添加附件 邮件发送_批量发送带附件的邮件

师兄: 帮我写个代码,发190份带附件的邮件

我: 爪巴

师兄: 按学院两天工时算钱

我: 亲亲,啥时候要呢?

师兄: 明天下午

我: ok,我需要你提供一份Excel,里面包含邮箱账号和附件名称的对应关系。

师兄: ok

任务明确。

首先用自己的邮箱账号和授权码登录腾讯邮箱服务器

send_user = "xxxx@qq.com"#邮箱password = "xxxx" # 按下面方法获得授权码smtp_server = "smtp.qq.com"# qq邮箱需要绑定的腾讯smtp服务器和端口号smtp_port = 465 smtpObject = smtplib.SMTP_SSL(smtp_server , smtp_port)   #qq必须要用.SMTP_SSLsmtpObject.login(send_user , password)

授权码就相当于邮箱的密码, 用代码需要用授权码才能登录, 

具体如何获得腾讯邮箱的授权码可以看这篇:

https://service.mail.qq.com/cgi-bin/help?subtype=1&&no=1001256&&id=28

从Excel里取出位于第一行的目的邮箱,收件人姓名和对应的附件

读取Excel文件

    data = 'summary.xlsx'    d_read = pd.read_excel(data,index_col='序号',)  

Excel的内容格式如图:

95030738bd136409956d19123ea7a668.png 

存储附件的文件夹内容格式:

02be7cca7cc5d7871feefee6ebeffe0e.png

# 现在 i = 1, 为 第i行,   对应的附件为1.pdf email = d_read.loc[i,'邮箱']  # 读取目标邮箱name = d_read.loc[i,'姓名'] # 获得接收人姓名   用来做邮箱正文内容的称呼sub = "XX证书"# 邮件标题content = name + "同学:\n    你好,XXX,见附件。\n        --------XX大学 XXX学院"# 邮箱正文内容 ,  name 就是这位同学的名字 image = str(i) # 附件对应的名字, 之后会根据名字找到对应的附件1.pdf

开始构建邮件结构,普通邮件包含目标邮箱账号,邮件标题,邮件文本内容,邮件附件。逐一添加后即可发送。

# 写一个发送邮件的类class SendEmail: # 定义一个邮件发送函数  def send_mail(self,user_list,sub,content,image):        user = "给自己起个名" + " + send_user + ">"        # msg是信封, 把各种内容往信封里塞        msg = MIMEMultipart()         # 塞标题        msg['Subject'] = sub         # 塞发件人        msg['From'] = user        # 塞收件人        msg['To'] = ";".join(user_list)                # 塞制作好的邮件内容        msg.attach(MIMEText(content, 'plain', 'utf-8'))                # 文件的地址, 类型为pdf         image_path = './images/'+image+'.pdf'                # 制作附件        word = MIMEApplication(open(image_path,'rb').read())        word.add_header('Content-Disposition', 'attachment', filename=image+'.pdf')                # 塞制作好的邮件附件        msg.attach(word)                smtpObject.sendmail(send_user , user_list , msg.as_string())   #message.as_string()是将MIMEText对象变成字符串        print( "发送成功")# 实例化后把刚才定义的参数传入

逐行读取Excel,读取完成后退出与腾讯邮件服务器的连接。

完整代码:

#coding:utf-8import smtplibfrom email.mime.text import MIMETextfrom email.mime.image import MIMEImagefrom email.mime.multipart import MIMEMultipart  #创建包含多个部分的邮件体from email.mime.base import MIMEBasefrom email.mime.application import MIMEApplicationimport os.path    #分析路径from email import encoderssend_user = "xxxxxxxx@qq.com"password = "xxxxx"smtp_server = "smtp.qq.com"smtp_port = 465 class SendEmail:    def send_mail(self,user_list,sub,content,image):        user = "发送人的名字" + " + send_user + ">"        # 创建一个带附件的实例        msg = MIMEMultipart()        msg['Subject'] = sub        msg['From'] = user        msg['To'] = ";".join(user_list)        msg.attach(MIMEText(content, 'plain', 'utf-8'))        image_path = './images/'+image+'.pdf'        word = MIMEApplication(open(image_path,'rb').read())        word.add_header('Content-Disposition', 'attachment', filename=image+'.pdf')        msg.attach(word)         smtpObject.sendmail(send_user , user_list , msg.as_string())   #message.as_string()是将MIMEText对象变成字符串        print( "发送成功")if __name__ == '__main__':    send = SendEmail()    import pandas as pd    data = 'summary.xlsx'    d_read = pd.read_excel(data,index_col='序号',)    print(len(d_read))        smtpObject = smtplib.SMTP_SSL(smtp_server , smtp_port)   #qq必须要用.SMTP_SSL    smtpObject.login(send_user , password)    for i in range(1,len(d_read)+1):        user_list = []        print(i)        try:            email = d_read.loc[i,'邮箱']            # print(email)            user_list.append(email)                        name = d_read.loc[i,'姓名']            # print(name)            sub = "标题"            content = name+"同学: xxxx"                        image = str(i)            send.send_mail(user_list,sub,content,image)        except:            print("excel出错")    smtpObject.quit() # 发送完就退出连接    

如此傻傻的代码赚了几顿饭钱hhh

如果有兴趣还可以再写几个类, 

比如读取自己的邮箱, 

(下载邮件附件这个操作我试过, 下的很慢, 建议放弃, 

邮件读个标题基本就够了)

可以多加附件的文件类型,

(pdf是其中一种, 还有.jpg之类...)  

给邮件附件写个多线程发送

(带附件的邮件发送较慢, 一个小附件1秒多, 多线程就快多了)

我: 师兄, 下次还有这种好事记得喊我

师兄: 爪巴

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值