python发送带附件的邮件_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 importsmtplib2 2 from email.header importHeader3 3 from email.mime.text importMIMEText4 4 from email.mime.multipart importMIMEMultipart5 5 from email.header importmake_header6 6 classEmail():7 7 defsend(self,xx,receiver,copy_to,mail_title,text_part) 8 8

9 9 sender = ‘xxxxxx@163.com‘

10 10 receiver =receiver11 11 copy_to =copy_to12 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_title17 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 inrange(len(xx)):32 32att.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 41message.attach(att[i])42 42

43 43 try:44 44 smtpObj = smtplib.SMTP_SSL() #注意:如果遇到发送失败的情况(提示远程主机拒接连接),这里要使用SMTP_SSL方法

45 45smtpObj.connect(smtpserver)46 46smtpObj.login(username, password)47 47 smtpObj.sendmail(sender, receiver+copy_to, message.as_string())#receiver+copy_to收件人和抄送对象需要放在同一列表中

48 48 print("邮件发送成功!!!")49 49smtpObj.quit()50 50 except:51 51 print (‘邮件发送失败‘)52 52smtpObj.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)

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值