python3 发送邮件携带附件(可携带多个不同格式的附件)

 

最近在学习python,刚刚看完python3使用SMTP发送邮件,简单小节下。

python3 发送邮件携带附件(可携带多个不同格式的附件)

要了解SMTP的可以自行去百度,这里不做解释。

使用SMTP发送有邮件前要确保发件人的邮箱已开启SMTP服务。若发件人邮箱已开启此服务可跳过此教程直接参考代码。

一、163邮箱开启SMTP方式

1.登陆163邮箱网页版,进入"POP3/SMTP/IMAP"页面,开启smtp服务,一般默认开启,

直接去生成授权码即可。

 

2、生成客户端授权码,进入"客户端授权密码"页面,开启客户端授权码。

 

3、选择开启后需要进行短信验证

 

 

 4、身份验证完成后进入设置授权码页面,自己设置就好了。

二、qq邮箱开启SMTP服务

1、登陆qq邮箱,进入设置也页面。

 

2、在账户页面找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务开启服务,开启时生成的授权码可以用于第三方登陆。

 

 

 三、根据自己的实际使用的邮箱开启SMTP服务后,接下来就直接看代码

 1  1 import smtplib
 2  2 from email.header import Header
 3  3 from email.mime.text import MIMEText
 4  4 from email.mime.multipart import MIMEMultipart
 5  5 from email.header import  make_header
 6  6 class Email():
 7  7     def send(self,xx,receiver,copy_to,mail_title,text_part)
8 8 9 9 sender = 'xxxxxx@163.com' 10 10 receiver = receiver 11 11 copy_to = copy_to 12 12 smtpserver = 'smtp.163.com' #邮箱服务器,163邮箱为smtp.163.com,qq邮箱为smtp.qq.com,根据实际情况选择 13 13 username = 'xxxxxx@163.com' #邮箱账号 14 14 # 如果是163邮箱,这里的密码是163的授权码而不是登陆密码。qq邮箱使用qq邮箱生成的授权吗。 15 15 password = 'xxxxxx' 16 16 mail_title = mail_title 17 17 18 18 # 创建一个带附件的实例 19 19 message = MIMEMultipart() 20 20 message['From'] = sender #发件人邮箱 21 21 22 22 23 23 message['To'] = ','.join(receiver ) #将列表中的收件人拼接成用“,”连接的字符串 24 24
25 25 message['Cc'] = ','.join(copy_to ) 26 26 message['Subject'] = Header(mail_title, 'utf-8') 27 27 message.attach(MIMEText(text_part, 'plain', 'utf-8')) 28 28 29 29 att = [] 30 30 #通过循环统计附件个数,便于添加添加附件 31 31 for j in range(len(xx)): 32 32 att.append(j) 33 33 #通过for循环添加附件,这里的xx表示附件路径,xx为list 34 34 for i in range(len(xx)):
35 35 print(xx[i-1].split("/")[-1]) 36 36 path_file = xx[i-1] #获取列表中的单个文件路径 37 37 file= xx[i-1].split("/")[-1]#获取附件名称 38 38 att[i]= MIMEText(open(path_file,'rb').read(),'base64','utf-8') 39 39 att[i]["Content-Type"] = 'application/octet-stream;name="%s"' % make_header([(file, 'UTF-8')]).encode('UTF-8')#解决附件中文名乱码问题 40 40 att[i]["Content-Disposition"] = 'attachment;filename= "%s"' % make_header([(file, 'UTF-8')]).encode('UTF-8') 41 41 message.attach(att[i]) 42 42 43 43 try: 44 44 smtpObj = smtplib.SMTP_SSL() # 注意:如果遇到发送失败的情况(提示远程主机拒接连接),这里要使用SMTP_SSL方法 45 45 smtpObj.connect(smtpserver) 46 46 smtpObj.login(username, password) 47 47 smtpObj.sendmail(sender, receiver+copy_to, message.as_string())#receiver+copy_to收件人和抄送对象需要放在同一列表中 48 48 print("邮件发送成功!!!") 49 49 smtpObj.quit() 50 50 except: 51 51 print ('邮件发送失败') 52 52 smtpObj.quit() 53 53 if __name__ == '__main__': 54 54 xx = ['附件路径1','附件路径2']#附件路径以列表形式传。附件路径要用“/”方式表示,可以改为“\\"或”\",需要修改第35和37行代码中的“/” 55 56 receiver = ['xxxxxx@163.com','xxxxxx@qq.com']#收件人多个人时以列表方式传入,否则只有第一个人能收到 56 57 copy_to = ['xxxxxx@qq.com','xxxxxx@163.com']#抄送对象 57 58 58 59 mail_title = '邮件主题' 59 60 text_part = '邮件正文' 60 61 email = Email() 61 62 email.send(xx,receiver,copy_to,mail_title,text_part)

以上代码可以实现同时是发送,抄送邮件给多人,也可携带多个任意格式的附件,但该代码有缺陷,邮件发送成功后发件人看不到附件,收件人可以正常查看。等有时间时在做修改把。

以上代码参考于  https://blog.csdn.net/kunshanyuZ/article/details/78824971

小白第一次写,请各位大佬多多指教

转载于:https://www.cnblogs.com/ceshixiaobai/p/10312060.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值