1-1
批量发送 email
1 from openpyxl import load_workbook
2 import smtplib
3 from email.mime.text import MIMEText
4 from email.mime.multipart import MIMEMultipart
5
6 # 设置邮箱账号
7 account = input('请输入邮箱账户:')
8 # 设置邮箱授权码
9 token = input('请输入邮箱授权码:')
10 # 设置邮箱服务器,端口
11 smtp = smtplib.SMTP_SSL('smtp.qq.com', 465)
12 # 登录qq邮箱
13 smtp.login(account, token)
14
15 # 打开工作表
16 wb = load_workbook('./04_月考勤表.xlsx')
17 sheet = wb.active
18
19 # 编写正文内容
20 content = '四月的考勤表已出,其中迟到时长超出 45 分钟的人员如下:\n'
21 for row_data in sheet.iter_rows(min_row=2, values_only=True):
22 # 获取迟到时长超过45分钟的人员
23 if row_data[2] > 45:
24 content += '姓名:{name} 迟到总时长:{time} \n'.format(name=row_data[1], time=row_data[2])
25 content += '详情见附件内容'
26
27 # 创建简单邮件对象
28 email_content = MIMEText(content, 'plain', 'utf-8')
29
30 # 读取工作表文件数据
31 with open('./04_月考勤表.xlsx', 'rb') as f:
32 file_data = f.read()
33
34 # 设置内容类型为附件
35 attachment = MIMEText(file_data, 'base64', 'utf-8')
36 # 设置附件标题以及文件类型
37 attachment.add_header('Content-Disposition', 'attachment', filename='04_月考勤表.xlsx')
38
39 # 创建复合邮件对象
40 msg = MIMEMultipart()
41
42 # 添加正文到复合邮件对象中
43 msg.attach(email_content)
44
45 # 添加附件到复合邮件对象里
46 msg.attach(attachment)
47
48 # 设置发送者信息
49 msg['From'] = '陈知枫'
50 # 设置接受者信息
51 msg['To'] = '闪光金融的各位同事们'
52 # 设置邮件标题
53 msg['Subject'] = '04_月考勤表'
54
55 # 发送邮件
56 smtp.sendmail(account, 'example@mail.com', msg.as_string())
57 # 关闭邮箱服务
58 smtp.quit()

 1-1-1
1 from openpyxl import load_workbook
2 import smtplib
3 from email.mime.text import MIMEText
4 from email.mime.multipart import MIMEMultipart
5
6 # 设置邮箱账号
7 account = input('请输入邮箱账户:')
8 # 设置邮箱授权码
9 token = input('请输入邮箱授权码:')
10 # 设置邮箱服务器,端口
11 smtp = smtplib.SMTP_SSL('smtp.qq.com', 465)
12 # 登录qq邮箱
13 smtp.login(account, token)
14
15 # 打开工作表
16 wb = load_workbook('./04_月考勤表.xlsx')
17 sheet = wb.active
18
19 # 编写正文内容
20 content = '四月的考勤表已出,其中迟到时长超出 45 分钟的人员如下:\n'
21 for row_data in sheet.iter_rows(min_row=2, values_only=True):
22 # 获取迟到时长超过45分钟的人员
23 if row_data[2] > 45:
24 content += '姓名:{name} 迟到总时长:{time} \n'.format(name=row_data[1], time=row_data[2])
25 content += '详情见附件内容'
26
27 # 设置正文,创建简单邮件对象
28 email_content = MIMEText(content, 'plain', 'utf-8')
29
30 # 读取工作表文件数据
31 with open('./04_月考勤表.xlsx', 'rb') as f:
32 file_data = f.read()
33
34 # 设置内容类型为附件
35 attachment = MIMEText(file_data, 'base64', 'utf-8')
36 # 设置附件标题以及文件类型
37 attachment.add_header('Content-Disposition', 'attachment', filename='04_月考勤表.xlsx')
38
39 # 创建复合邮件对象
40 msg = MIMEMultipart()
41
42 # 添加正文到复合邮件对象中
43 msg.attach(email_content)
44
45 # 添加附件到复合邮件对象里
46 msg.attach(attachment)
47
48 # 设置发送者信息
49 msg['From'] = '陈知枫'
50 # 设置接受者信息
51 msg['To'] = '闪光金融的各位同事们'
52 # 设置邮件标题
53 msg['Subject'] = '04_月考勤表'
54
55 # 发送邮件
56 smtp.sendmail(account, 'example@mail.com', msg.as_string())
57 # 关闭邮箱服务
58 smtp.quit()

1.第 6~13 行实现了第一个功能块:登录邮箱。
2.第 15~28 行实现第二个功能块:设置正文内容。
3.第 30~37 行实现第三个功能块:设置附件内容。
4.第 40~54 行实现第四个功能块:设置邮件内容及信息。
我们在这里会把正文和附件整合,并设置好发送者、接收者、标题等信息。
5.第 56~59 行实现第五个功能块:发送邮件并关闭邮箱服务。

SMTP(简单邮件传输协议)是用于发送电子邮件的协议。规定电子邮件应该如何在邮件服务器之间传递。
它就像一个官方的规则,用于控制信件的中转方式。

smtplib是Python的内置模块,它对SMTP协议进行了简单的封装,提供了一种发送电子邮件的方法。
smtp = smtplib.SMTP_SSL(host, port)
第一步,我们需要实例化模块smtplib中的类SMTP_SSL(),得到一个smtp对象
这个smtp对象就像给我们送邮件的邮差。你给他一些特定的命令后,他就会帮你完成邮件的发送等工作。
需要传入两个参数:参数1:host(服务器地址),参数2:port(端口号)。
服务器地址,一般是公开的一个网站地址,相当于是该服务在互联网中的标识。

而端口号就好比一个通道,通向这个网站特定的一个服务。
【注意】在传入服务器地址的时候需要加上单引号,以字符串的形式传入。

如果你不使用qq邮箱也可以直接百度:对应邮箱+smtp服务器,如:gmail smtp服务器,或在它对应的帮助中心找到服务器地址。
MIMEText()
编辑正文文本,我们需要实例化类MIMEText(),得到一个简单邮件对象
而简单邮件对象可以用来承载邮件内容,例如:正文文本、附件。

email_content = MIMEText(_text, _subtype, _chartset)
实例化类MIMEText(),得到一个简单邮件对象 email_content(邮件正文)。
实例化MIMEText()时,需要往括号内传入三个参数:参数1:_text 、参数2:_subtype、参数3:_chartset,咱们一个个来看。

参数1:_text,意思就是内容。例如:构造正文时就是正文文本,构造附件时就是读取到的附件文件。
参数2:_subtype,意思是文本格式。构造正文内容时文本格式为'plain',而构造附件时文本格式为'base64'
参数3:_chartset,意思是编码方式。此处采用'utf-8',它是电子邮件、网页及其他存储或传送文字的应用中,常常采用的编码。
         

20201203-5 批量发送 email【】的更多相关文章

  1. 用那啥 那啥来着Django来发送Email,结合腾讯云,批量发短信给用户!

    你们好,我是来ZB的! 这篇博客是用来发送邮件的,用的是Django框架,很好用.遗憾的是我当时用的阿里云,把腾讯QQ的端口给……给屏蔽了,啊啊啊啊,多么痛的领悟呀.后来用的163网易的邮箱.可以了! ...

  2. .net 邮件批量发送功能源码

    #define debug   using System; using System.Text; using System.Linq; using System.IO; using System.Ne ...

  3. Python实现邮件的批量发送

    Python实现邮件的批量发送 1 发送文本信息 '''加密发送文本邮件''' def sendEmail(from_addr,password,to_addr,smtp_server): try: ...

  4. java发送email

    package com.assess.util; import java.io.File; import java.util.ArrayList; import java.util.List; imp ...

  5. Spring 发送 Email

    本文转自:http://zl198751.iteye.com/blog/757617 看到了本文,收获颇丰,感谢之至! 首先介绍下Email的发送流程: 需要选中smtp邮件服务器,Yahoo不提供免 ...

  6. 使用PHP发送email进行账号激活或者密码修改操作

    使用PHPMailer编写发送邮件 PHPMailer需PHP的socket扩展支持,而PHPMailer链接qq域名邮箱时需要ssl加密方式(qq邮箱最近做了限制,新开域名邮箱不再允许通过smtp协 ...

  7. 使用python原生的方法实现发送email

    使用python原生的方法实现发送email import smtplib from email.mime.text import MIMEText from email.mime.multipart ...

  8. C#发送Email邮件(实例:QQ邮箱和Gmail邮箱)

    下面用到的邮件账号和密码都不是真实的,需要测试就换成自己的邮件账号. 需要引用: using System.Net.Mail; using System.Text; using System.Net; ...

  9. 【WinForm】C# 发送Email

    发送Email  的条件 1.SmtpClient SMTP 协议    即 Host 处理事务的主机或IP地址     //smtp.163.com      UseDefaultCredentia ...

随机推荐

  1. Nginx 解析漏洞复现

    一.漏洞描述 该漏洞与nginx.php版本无关,属于用户配置不当造成的解析漏洞 二.漏洞原理 1.由于nginx.conf的如下配置导致nginx把以'.php'结尾的文件交给fastcgi处理,为 ...

  2. RSA脚本环境配置-攻防世界-OldDriver

    [Crypto] 题目链接 [RSA算法解密] 审题分析 首先拿到一个压缩包,解压得到文件enc.txt. 先不用去管其他,第一眼enc马上联想到 RSA解密.接着往下看 [{"c" ...

  3. 【PYTEST】第四章Fixture

    知识点: 利用fixture共享数据 conftest.py共享fixture 使用多个fixture fixture作用范围 usefixture 重命名 1. 利用fixture共享数据 test ...

  4. SQL相关子查询是什么?和嵌套子查询有什么区别?

    目录 两者的各种叫法 相关子查询MySQL解释 相关子查询Wikipedia解释 相关子查询执行步骤拆解 相关子查询和嵌套查询的区别 参考资料 两者的各种叫法 相关子查询叫做:Correlated S ...

  5. leetcode 练习--反转链表

    最近开始学习数据结构和算法的学习,也自然开始在 leetcode 上练习,所以每周大概会分享做过的leetcode 练习,尽量做到每天更新一道题目. 作为 leetcode 练习笔记的第一道题目,选择 ...

  6. Python实现树莓派摄像头持续录像并传送到主机

    关于树莓派,想必从事嵌入式开发的开发者都有听过,树莓派原名为Raspberry Pi,也就是它的英文读法,树莓派诞生于英国,由"Raspberry Pi 基金会"这个慈善组织注册开 ...

  7. 真香,理解记忆法学习Python基础语法

    这篇文章很难写!我最开始学 Python,和大多数人一样,是看的菜鸟教程: 在写完这篇文章的第一遍后,我发现并没有写出新意,很可能读者看到后,会和我当初一样,很快就忘了.我现在已经不是读者而是作者了, ...

  8. EF Core 执行SQL语句和存储过程

    无论ORM有多么强大,总会出现一些特殊的情况,它无法满足我们的要求.在这篇文章中,我们介绍几种执行SQL的方法. 表结构 在具体内容开始之前,我们先简单说明一下要使用的表结构. public clas ...

  9. 解决右键notepad++打开时提示, ShellExecute failed (2): Is this command correct?

    错误如下图: 解决方法: 右键notepad++.exe; 去掉管理员方式

  10. 第4.7节 Python特色的序列解包、链式赋值、链式比较

    一.序列解包 序列解包(或可迭代对象解包):解包就是从序列中取出其中的元素的过程,将一个序列(或任何可迭代对象)解包,并将得到的值存储到一系列变量中. 一般情况下要解包的序列包含的元素个数必须与你在等 ...