Python发送邮件

一、启用邮箱的SMTP访问

Python发邮件需要有SMTP服务,可以在本地搭建SMTP服务,也可以使用第三方的SMTP服务(比如网易邮箱或QQ邮箱)。 这里我使用了网易126邮箱来发邮件。

1 登录网易邮箱

2 设置-->POP3/SMTP/IMAP-->设置POP3/SMTP/IMAP,勾选“POP3/SMTP服务”和“IMAP/SMTP服务”。

3 设置客户端授权密码,要求邮箱绑定手机,设置验证码之前需要先输入短信验证码 注意:网易授权密码,一天最多只能接收3次

用手机网易邮箱登录邮件账号时,所填的密码不是你的登录密码,而是上面这个授权密码。 同样地,用Python发邮件也是使用授权密码,而不是邮箱登录密码。

二、编写发邮件程序

(一)用到的模块

python发邮件需要掌握两个模块的用法,smtplib和email,这俩模块是python自带的,只需import即可使用。 smtplib模块主要负责发送邮件:是一个发送邮件的动作,连接邮箱服务器,登录邮箱,发送邮件(有发件人,收信人,邮件内容)。 email模块主要负责构造邮件:指的是邮箱页面显示的一些构造,如发件人,收件人,主题,正文,附件等。

(二)消息对象

构造一个邮件对象就是一个Message对象,如果构造一个MIMEText对象,就表示一个文本邮件对象,如果构造一个MIMEImage对象,就表示一个作为附件的图片,要把多个对象组合起来,就用MIMEMultipart对象,而MIMEBase可以表示任何对象。它们的继承关系如下:

邮件发送程序为了防止有些邮件阅读软件不能显示处理HTML格式的数据,通常都会用两类型分别为"text/plain"和"text/html"

构造MIMEText对象时,第一个参数是邮件正文,第二个参数是MIME的subtype,最后一定要用utf-8编码保证多语言兼容性。比如:

text = "Hi!\nHow are you?\n "    
text_plain = MIMEText(text,'plain', 'utf-8')   

(三)发送邮件的代码

import smtplib
from email.mime.text import MIMEText
# 第三方 SMTP 服务
mail_host = 'smtp.126.com'              # 设置服务器
mail_username = 'zhenghaishu@126.com'      # 用户名
mail_auth_password = "**********"       # 授权密码 
sender = 'zhenghaishu@126.com'
#receivers = '270114497@qq.com'            # 一个收件人
receivers = '270114497@qq.com, zhenghaishu@126.com' # 多个收件人
message = MIMEText('这里是邮件正文', 'plain', 'utf-8')
message['From'] = sender
message['To'] =  receivers
message['Subject'] = "这里是邮件主题5"
try:
    smtpObj = smtplib.SMTP(mail_host, 25)                                 # 生成smtpObj对象,使用非SSL协议端口号25
    #smtpObj = smtplib.SMTP_SSL(mail_host, 465)                         # 生成smtpObj对象,使用SSL协议端口号465
    smtpObj.login(mail_username, mail_auth_password)                    # 登录邮箱
    # smtpObj.sendmail(sender, receivers, message.as_string())          # 发送给一人
    smtpObj.sendmail(sender, receivers.split(','), message.as_string())    # 发送给多人
    print ("邮件发送成功")
except smtplib.SMTPException:
    print ("Error: 无法发送邮件")

运行结果:

注意,若收件箱里没有收到邮件,记得去垃圾箱里找。

(四)发送带附件的邮件代码

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
# 第三方 SMTP 服务
mail_host = 'smtp.126.com'              # 设置服务器
mail_username = 'zhenghaishu@126.com'      # 用户名
mail_auth_password = "***********"       # 授权密码 
sender = 'zhenghaishu@126.com'
#receivers = '270114497@qq.com'            # 一个收件人
receivers = '270114497@qq.com, zhenghaishu@126.com' # 多个收件人
message = MIMEMultipart()
message['From'] = sender
message['To'] =  receivers
message['Subject'] = "这里是邮件主题2"
message.attach(MIMEText('这是邮件正文', 'plain', 'utf-8'))
# 构造附件1,传送当前目录下的test1.txt 文件
att1 = MIMEText(open('test1.txt', 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
# 这里的filename可以任意写,写什么名字,邮件中显示什么名字
att1["Content-Disposition"] = 'attachment; filename="test1.txt"'
message.attach(att1)
# 构造附件2,传送当前目录下的test2.txt文件
att2 = MIMEText(open('test2.txt', 'rb').read(), 'base64', 'utf-8')
att2["Content-Type"] = 'application/octet-stream'
att2["Content-Disposition"] = 'attachment; filename="test_2.txt"'
message.attach(att2)
try:
    smtpObj = smtplib.SMTP(mail_host)                                     # 生成smtpObj对象,默认使用非SSL协议端口号25
    #smtpObj = smtplib.SMTP_SSL(mail_host, 465)                         # 生成smtpObj对象,使用SSL协议端口号465
    smtpObj.login(mail_username, mail_auth_password)                    # 登录邮箱
    # smtpObj.sendmail(sender, receivers, message.as_string())          # 发送给一人
    smtpObj.sendmail(sender, receivers.split(','), message.as_string())    # 发送给多人
    print ("邮件发送成功")
except smtplib.SMTPException:
    print ("Error: 无法发送邮件")

运行结果:

原文发布于微信公众号 - 海天一树(gh_de7b45c40e8b)

原文发表时间:2018-06-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏开源项目

Git 项目推荐 | 开源 PHP 加密运行扩展

开源php加密运行扩展,基于screw二次开发,暂时只能在linux下运行 。 oschina http://git.oschina.net/splot/php...

635130
来自专栏阮一峰的网络日志

HTTPS 升级指南

上一篇文章我介绍了 HTTP/2 协议 ,它只有在 HTTPS 环境才会生效。 为了升级到 HTTP/2 协议,必须先启用 HTTPS。如果你不了解 HTTPS...

35550
来自专栏程序员宝库

更快更安全,HTTPS 优化总结

在网站升级到 HTTPS 之后,我们还可以有很多玩意可以折腾,优化 HTTPS,让它更快更安全。这里是一篇 HTTPS 优化的总结,也包含问题的解决方法,不过不...

1K110
来自专栏云计算教程系列

加固你的Roundcube服务器

Roundcube是一个Webmail客户端,具有强大的安全功能和来自其插件存储库的广泛自定义选项。本文介绍如何进一步保护基本的现有Roundcube安装。

31400

在Debian 8上使用Postfix配置SPF和DKIM

SPF(发件人策略框架)是一种向邮件服务器标识允许哪些主机为给定域发送电子邮件的系统。设置SPF有助于防止您的电子邮件被归类为垃圾邮件。

29000
来自专栏Laoqi's Linux运维专列

使用Python 3发邮件

26390
来自专栏HadesMo

调用STS接口生成临时密钥

APPID获取链接:https://console.cloud.tencent.com/developer

58670
来自专栏QQ会员技术团队的专栏

HTTP/2探索第二篇——工具及应用

由于不同环境过于复杂,本文仅基于Mac OS和Linux来讲解工具及应用。 目录结构: HTTP/2环境搭建Step by step wireshark使用 f...

771100
来自专栏Small Code

用Python发电子邮件

使用的库 这个程序涉及两个库:smtplib 和 email。 这两个库都是Python自带的,所以不需要额外的下载安装,此外,这次使用的Python版本为2....

27570
来自专栏俗人笔记

如何免费将网站升级到HTTPS

由于HTTPS可以防止页面被中间人攻击、确保数据传输过程不被篡改,保证内容完整性。所以升级网站到HTTPS是大的趋向。像苹果AppStore已经禁止使用HTTP...

35460

扫码关注云+社区

领取腾讯云代金券