import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.utils import formataddr
from email.header import Header
import openpyxl

my_sender = ‘*****@qq.com’ # 发件人邮箱账号
my_pass = ‘******’ # 发件人邮箱密码

# 发送邮件
def mail(nws):
ret = True
file_name = ’19年’+str(nws[0].value)+str(nws[1].value)+’线下积分核对.xlsx’
my_user = str(nws[2].value) # 收件人邮箱账号,

# noinspection PyBroadException
try:

mail_msg = “””
<p>DEAR:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;您好!线下8月积分表,请查收,谢谢</p>
“””

msg = MIMEMultipart()
msg[‘From’] = formataddr([“客服”, my_sender]) # 括号里的对应发件人邮箱昵称、发件人邮箱账号
msg[‘To’] = formataddr([“FK”, my_user]) # 括号里的对应收件人邮箱昵称、收件人邮箱账号
msg[‘Subject’] = Header(’19年’+str(nws[0].value)+str(nws[1].value)+’线下积分’, ‘utf-8’) # 邮件的主题,也可以说是标题
msg.attach(MIMEText(mail_msg, ‘html’, ‘utf-8’)) # html格式的内容

# 附件
att1 = MIMEApplication(open(file_name, ‘rb’).read())
att1.add_header(‘Content-Disposition’, ‘attachment’, filename=file_name)
msg.attach(att1)

server = smtplib.SMTP_SSL(“smtp.qq.com”, 465) # 发件人邮箱中的SMTP服务器,端口是25
server.login(my_sender, my_pass) # 括号中对应的是发件人邮箱账号、邮箱密码
server.sendmail(my_sender, [my_user, ], msg.as_string()) # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
server.quit() # 关闭连接
except Exception: # 如果 try 中的语句没有执行,则会执行下面的 ret=False
ret = False
return ret

# 加载excel
wb = openpyxl.load_workbook(‘盟主邮件发送.xlsx’)
# 获取Sheet
ws = wb.get_sheet_by_name(‘邮件发送’)
# 遍历sheet
for row in range(1,ws.max_row+1):
# 选择未发送的人
if ws.cell(row=row,column=4).value == ‘未发送’:
_ret = mail(ws[row])
if _ret:
print(“邮件发送成功”)
ws.cell(row=row,column=4).value = ‘邮件发送成功’
wb.save(‘盟主邮件发送.xlsx’)
else:
print(“邮件发送失败”)

上面程序是读取excel里面的待发送列表,按照每一行的人找到对应需要发送的附件,逐行发送带附件的邮件,最后修改该行未邮件已发送。
excel操作可以查看上一篇文章

发表评论

电子邮件地址不会被公开。