yagmail发邮件辅助系统(一)

项目初衷

手里有大量的学员家长邮箱,以前都是利用163邮件客户端将邮件地址复制黏贴到收件栏然后群发,效率不高,于是琢磨着能不能设计一款应用程序实现自动发送邮件功能,并且该程序分享给朋友,让朋友在没有Python开发环境下也能帮忙发一部分,从诞生了——yagmail发邮件辅助系统。

设计理念

手里头有一张学员家长信息excel表单,里面有一列为邮件地址,通过程序读取里面的邮件地址生成一个待发送邮件列表,由于服务器一次性发送有阈值,所以要进行邮件数量控制,输入起始数 m m , 再输入结束数 n n > m ) n(n>m) , 用来截取一段长为 n m n-m 邮件地址,然后通过对截取下来的邮件地址一个一个发送邮件,并要有进度条显示发送进程,最好能打印出发送错误的邮件地址作为反馈,并且分别计数。

主体程序

import pandas as pd #导入数据分析模块
import time #导入时间模块
from tqdm import tqdm #进度条
data=pd.read_excel("test.xlsx",index_col=u'序号') #读取数据
email=data[u'邮箱'] #邮箱地址
m=input("请输入起始数码按回车键:")
n=input("请输入结束数码按回车键:")
recipients=tqdm(email[int(m):int(n)]) #待发送的邮件列表recipients
print("start sending……")
import yagmail  #导入发邮箱模块
yag=yagmail.SMTP(user="******",password="******",host='smtp.126.com',encoding='utf-8') #链接邮箱服务器
content=[
           "<h1 style='color:red'>暑假线上答疑招生啦!</h1>" ,#可以是html语言,一级标题
           "暑假是数学打基础提分的关键时期,可能你的孩子已经在其他辅导机构狂补特补,数学知识的大量摄入必然会导致消化不良。",
          "我们三行答疑专门从事数学微信群在线答疑,有一流的师资队伍, 为你的孩子搭建知识架构,解答疑惑,帮助消化,让你家孩子数学永不掉线。",
           "只要你孩子想学习数学,就可以来报名,费用美丽,报名入口“三行科创”微信公众号菜单→在线答疑。",
           yagmail.inline("D:/PythonProgram/sendmail/qrcode.jpg"),  #图片会内嵌到正文
           "前50名免费体验。",
           "D:/PythonProgram/sendmail/poster1.jpeg",  #图片文件以附件形式发送
           ] #邮件正文

i=0 #用来记总数
k=0 #用来记发送成功数
s=0 #用来记发送失败数
failure_send=[] #用来存放发送失败的邮件
for j in recipients: #对邮箱地址列表循环
    i=i+1 #计总数
    try:
        yag.send(to=j,                         #发给谁
                 contents=content,             #邮件正文
                 subject="暑假线上答疑招生啦!",    #主题
                 headers={"From": "曾老师"},   #来自何方
                 )
        k=k+1 #发送成功个数
        time.sleep(0.5) #每发一个挂起0.5秒,防止发太快了
    except:
        print("\n%s is not valid" %j) #如果邮件地址错误打印出错误邮件地址
        failure_send.append(j) #追加发送失败的邮件
        s=s+1 #发送失败个数
yagmail.SMTP.close(yag) #关闭服务器链接        
print("finished!") #1388
print("totally send: %s " %i) #发送邮件总数
print("send sucessfully: %s " %k) #发送成功数
print("send failure: %s " %s) #发送失败数

程序解释

程序大致过程是读取Excel里面的邮件地址形成一个recipients待发送列表,然后对recipients进行循环,利用yagmail一个一个发送,并且给发送的邮件打上标签,发送成功或者发送失败,收集发送失败的邮件地址存在failure_send列表里面。

yagmail模块分析

首先,yagmail比较简单,整体思路清晰,最智能的是能够判断contents列表里面的内容的类型, 先判断是否为本地文件, 如果是本地文件, 则置于附件中发送,可以是相对路径, 也可以填写绝对路径,其次会判断是否为html语言, 是的话, 能够在正文中被浏览器渲染. 如果都不是, 则当作普通文本, 放在邮件正文。

后话

最好不要添加大量的附件,会拖垮发送进程的,也不要让 n m n-m 足够大,不管是163还是126还是qq等第三方邮件服务器都有流量限制和spam措施,应多注意,下一步就是打包成可执行的Windows程序分享给朋友。

发布了45 篇原创文章 · 获赞 12 · 访问量 8692

猜你喜欢

转载自blog.csdn.net/zengbowengood/article/details/94590040
今日推荐