第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 【Python自动化办公】批量发送邮件(持续更新)

【Python自动化办公】批量发送邮件(持续更新)

时间:2020-07-01 10:29:00

相关推荐

【Python自动化办公】批量发送邮件(持续更新)

【Python自动化办公】批量发送邮件

一. 要求二. 步骤1. 开启QQ邮箱SMTP服务2. 需要发送的邮件3. 代码分析4. 参考资料

一. 要求

编写python程序实现批量发送邮件(含附件)

二. 步骤

1. 开启QQ邮箱SMTP服务

① 登录QQ邮箱,点击“设置”:

② 点击“账户”:

③ 开启SMTP服务(可全部开启):

④ 获取授权码:

2. 需要发送的邮件

3. 代码分析

三个班级的收件邮箱被存储在名为“邮件发送地址”的一个excel文件中:

使用load_workbook打开这个文件夹,并以各班单位为键,收件邮箱为值保存于名为address的字典中:

from openpyxl import load_workbookwb = load_workbook("邮件发送地址.xlsx")ws = wb.activeaddress = {} # 设置address空字典,存储收件方名称与收件方邮件地址for i in range(2,ws.max_row+1):name = ws["A"+ str(i)].valueto_addr = ws["B"+ str(i)].valueaddress[name] = [to_addr]

单独打印下address看看效果(邮箱地址做了打码处理):

>>> print(address){'电子信息1班': ['1*********7@'], '电子信息2班': ['1********3@'], '电子信息3班': ['2********2@']}

利用pandas库读取文件则不方便进行以上操作,load_workbook的一些用法可以参考文章:load_workbook 基本用法

import osimport smtplib # smtplib 用于邮件的发信动作from email.mime.text import MIMEText # email 用于构建邮件内容from email.mime.multipart import MIMEMultipartfrom email.mime.base import MIMEBasefrom email import encodersfrom email.header import Header # 用于构建邮件头

def Send_mail(to_add, file_path, name):from_addr = '*********@' # 发信方的信息:发信邮箱,QQ 邮箱授权码password = '************'# 你的授权码数字smtp_server = ''# 发信服务器#创建一个带附件的实例msg = MIMEMultipart() msg['From'] = Header(from_addr) # 括号里的对应发件人邮箱账号msg['To'] = Header(to_addr) # 括号里的对应收件人邮箱账号msg['Subject'] = '成绩单' # 邮件的主题,也可以说是标题# 邮箱正文内容msg.attach(MIMEText('你好,\n这是{}的成绩单,请查收!谢谢。\n\n学习部 小蒋'.format(name),'plain','utf-8')) # 第一个参数为内容,第二个参数为格式(plain 为纯文本),第三个参数为编码# 构造附件att = MIMEText(open(os.listdir('成绩单')[0],'rb').read(),'base64','utf-8')att['Content-Type'] = 'application/octet-stream'att.add_header('Content-Disposition', 'attachment', filename = '{}成绩单.xlsx'.format(name)) # 这里的filename是指邮件中显示的附件名称msg.attach(att)server = smtplib.SMTP_SSL(smtp_server, 465) # 发件人邮箱中的SMTP服务器,端口是465server.login(from_addr, password)# 登录发信邮箱server.sendmail(from_addr, to_addr, msg.as_string())# 发送邮件server.quit()# 关闭服务器

进行批量发送邮件:

for name in address.keys(): to_addr = address[i][0] # 收信方邮箱os.listdir('成绩单')file_path = os.getcwd() + '\\成绩单\\{}_成绩单.xlsx'.format(name) Send_mail(to_addr, file_path)print("邮件发送完成!")

4. 参考资料

/LeoPhilo/article/details/89074232/python/python-email.html/p/24180606/pptde/article/details/111573494/discuss/969955749132672/1177449138455872/zhangxinqi/p/9113859.html#_label2/article/65172.htm/zin521/article/details/102582930

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。