码迷,mamicode.com
首页 > 编程语言 > 详细

python smtp邮件

时间:2019-04-15 16:42:13      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:www.   name   err   邮件传输   部分   tip   user   地址   cap   

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。

python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。

参考:https://www.cnblogs.com/ysocean/p/7653252.html

   https://blog.csdn.net/qq_42543250/article/details/81586663

   https://www.cnblogs.com/captainmeng/p/7683395.html

 在第三方客户端使用stmp之前需要开启邮箱中的POP3/SMTP/IMAP服务,并获取到授权码。这里使用是163邮箱

技术图片

 

纯文本邮件

 1 import smtplib
 2 from email.header import Header
 3 from email.mime.text import MIMEText
 4  
 5 # 第三方 SMTP 服务
 6 mail_host = "smtp.163.com"               # SMTP服务器
 7 mail_user = "*******@163.com"       # 用户名
 8 mail_pass = "*******"               # 授权密码,非登录密码
 9  
10 sender = ********@163.com       # 发件人邮箱(最好写全, 不然会失败)
11 receivers = [********@163.com]  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
12  
13 content = 这里是测试文本!             #测试文本
14 title = smtp邮件测试                       # 邮件主题
15 
16  #内置参数执行
17 def sendEmail():
18  
19     message = MIMEText(content, plain, utf-8)  # 内容, 格式, 编码
20     message[From] = "{}".format(sender)
21     message[To] = ",".join(receivers)
22     message[Subject] = title
23  
24     try:
25         smtpObj = smtplib.SMTP_SSL(mail_host)  # 启用SSL发信, 端口默认是25(可以不写)
26         smtpObj.login(mail_user, mail_pass)    # 登录验证
27         smtpObj.sendmail(sender, receivers, message.as_string())  # 发送
28         print("mail has been send successfully.")
29     except smtplib.SMTPException as e:
30         print(e)
31 
32  #参数传入执行
33 def send_email2(SMTP_host, from_account, from_passwd, to_account, subject, content):
34     email_client = smtplib.SMTP(SMTP_host)
35     email_client.login(from_account, from_passwd)
36     # create msg
37     msg = MIMEText(content, plain, utf-8)
38     msg[Subject] = Header(subject, utf-8)  # subject
39     msg[From] = from_account
40     msg[To] = to_account
41     email_client.sendmail(from_account, to_account, msg.as_string())
42  
43     email_client.quit()
44  
45 if __name__ == __main__:
46     sendEmail()
47 
48         

 

插入图片(非附件形式)

 1 # coding: utf-8
 2 
 3 import smtplib
 4 from email.mime.multipart import MIMEMultipart
 5 from email.mime.text import MIMEText
 6 from email.mime.base import MIMEBase
 7 from email import encoders
 8 
 9 mail_host = smtp.163.com
10 receivers = [******@163.com]
11 receiver = ,.join(receivers)
12 sender = ******@163.com
13 password = *****
14 
15 msg = MIMEMultipart(alternative)
16 msg[From] = sender
17 msg[To] = receiver
18 msg[Subject] = 主题
19 #插入一个html格式
20 msg.attach(MIMEText(<html><body><h1>Hello</h1> +
21     <p><img src="cid:0"></p> +
22     </body></html>, html, utf-8))
23 
24 file_path = rE:\stmp_test\img.png
25 with open(file_path, rb) as f:
26     mm = MIMEBase(image, png, filename=b.png)    # 设置附件的MIME和文件名,这里是png类型:
27     mm.add_header(Content-Disposition, attachment, filename=b.jpg)  #加上必要的头信息
28     mm.add_header(Content-ID, <0>)       #头信息
29     mm.add_header(X-Attachment-Id, 0)     #头信息
30     mm.set_payload(f.read())    # 把附件的内容读进来
31     encoders.encode_base64(mm)
32     msg.attach(mm)
33 
34 try:
35     server = smtplib.SMTP()
36     # 加上这句就可以打印出所有的log,更方便我们定位问题
37     server.set_debuglevel(1)
38     server.connect(mail_host, 25)
39     server.login(sender, password)
40     server.sendmail(sender, receiver,msg.as_string())
41     server.close()
42     print (Success)
43 except smtplib.SMTPException:
44     print( Error)

直接在HTML邮件中链接图片地址是不行的。引文大部分邮件服务商都会自动屏蔽带有外链的图片,因为不知道这些链接是否指向恶意网站。
只需要在HTML中通过引用src="cid:0"就可以把附件作为图片嵌入了。如果有多个图片,给它们依次编号,然后引用不同的cid:x即可。

python smtp邮件

标签:www.   name   err   邮件传输   部分   tip   user   地址   cap   

原文地址:https://www.cnblogs.com/Hamge/p/10710827.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!