目录
发送纯文字邮件
发送HTML邮件
发送图片邮件
发送附件邮件
Python实现发送邮件主要用到smtplib和email模块,其中:
smtplib模块主要负责发送邮件的动作、连接邮箱服务器和登录邮箱等操作。
email模块用于管理电子邮件消息的库,主要负责构造邮件,如发件人、收件人、主题、正文、附件等。
通过smtplib、email模块可以发送纯文字、HTML、图片、带附件的邮件。
发送纯文字邮件
发送纯文字邮件,首先使用email模块编辑邮件信息,如发件人、收件人、邮件主题和邮件内容等,示例代码如下:
fromemail.mime.textimportMIMETextfromemail.headerimportHeadermail_msg="""Python测试邮件..."""message=MIMEText(mail_msg,'plain','utf-8')#邮件内容message['From']=Header("白巧克力LIN",'utf-8')#发件人名称(可以随便起)message['To']=Header("xxx",'utf-8')#收件人名称(可以随便起)message['cc']='xxxxxxxxxxx'#抄送人(可以随便填)message['Subject']=Header('测试邮件','utf-8')#邮件主题message['Date']=''#邮件日期,不可省略,可以随便填,最终日期为系统日期
使用MIMEText()方法编辑邮件内容,其中:第一个参数是邮件内容,第二个参数是文本格式,可选值有plain(原生文本模式)、html(网页文本模式),第三个参数是编码方式。
好了,编辑好邮件信息后,接下来通过smtplib模块实现发送邮件的动作、连接邮箱服务器和登录邮箱,示例代码如下:
importsmtplibsender='xxxxxxxxxxx@'#发件人邮箱receivers=['xxxxxxxxx@','xxxxxxxxx@']#收件人邮箱列表try:smtpObj=smtplib.SMTP_SSL('')#获得邮箱服务器的传输协议证书smtpObj.connect('','服务器端口')#连接邮箱服务器smtpObj.login('登录邮箱','授权码')#登录邮箱smtpObj.sendmail(sender,receivers,message.as_string())#发送邮件print("邮件发送成功")exceptsmtplib.SMTPExceptionase:print(e)
首先使用smtplib.SMTP_SSL()方法获取邮箱服务器的传输协议证书,其传入的参数为邮箱服务器,常见的邮件服务器如下:
谷歌邮箱:,端口号:587;
新浪邮箱:,端口号:25;
网易邮箱:,端口号:25;
Foxmail邮箱:,端口号:25;
QQ邮箱:,端口号:25;
阿里云邮箱:,SSL加密端口:465;非加密端口:25;
获取传输协议证书后,通过connect()方法连接邮箱服务器,再通过login()方法登录邮箱,最后通过sendmail()方法发送邮件。
发送HTML邮件
发送HTML邮件与发送纯文字邮件类似,发送HTML邮件的邮件内容为HTML文本,MIMEText()方法第二个参数为html,示例代码如下:
importsmtplibfromemail.mime.textimportMIMETextfromemail.headerimportHeadermail_msg="""<body>Python测试邮件...</body>"""message=MIMEText(mail_msg,'html','utf-8')#邮件内容message['From']=Header("白巧克力LIN",'utf-8')#发件人名称(可以随便起)message['To']=Header("xxx",'utf-8')#收件人名称(可以随便起)message['cc']='xxxxxxxxxxx'#抄送人(可以随便填)message['Subject']=Header('测试邮件','utf-8')#邮件主题message['Date']=''#邮件日期,不可省略,可以随便填,最终日期为系统日期sender='xxxxxxxxxxx@'#发件人邮箱receivers=['xxxxxxxxx@','xxxxxxxxx@']#收件人邮箱列表try:smtpObj=smtplib.SMTP_SSL('')#获得邮箱服务器的传输协议证书smtpObj.connect('','服务器端口')#连接邮箱服务器smtpObj.login('登录邮箱','授权码')#登录邮箱smtpObj.sendmail(sender,receivers,message.as_string())#发送邮件print("邮件发送成功")exceptsmtplib.SMTPExceptionase:print(e)
通过编写HTML代码使邮件内容样式更加丰富,例如为邮件内容字体加粗、加大,发送表格等。
发送图片邮件
发送图片邮件与发送纯文字、HTML邮件有所不同,编辑邮件信息示例代码如下:
fromemail.mime.imageimportMIMEImagefromemail.mime.textimportMIMETextfromemail.headerimportHeaderfromemail.mime.multipartimportMIMEMultipartmail_msg="""<body><p>测试Python发送带图片的邮件...</p><p>图片如下:</p><p><imgsrc="cid:jpg1"alt="testimage1"></p><p><imgsrc="cid:jpg2"alt="testimage2"></p></body>"""message=MIMEMultipart()#创建可携带各种资源的实例message.attach(MIMEText(mail_msg,'html','utf-8'))#将邮件信息绑定到实例中withopen('1.png','rb')asimage_file:#二进制读取图片msgImage=MIMEImage(image_file.read())#将二进制图片放在msgImage变量中msgImage.add_header('Content-ID','jpg1')#定义图片ID,在HTML文本中引用message.attach(msgImage)#将图片绑定到实例中message['From']=Header("白巧克力LIN",'utf-8')#发件人名称(可以随便起)message['To']=Header("xxx",'utf-8')#收件人名称(可以随便起)message['cc']='xxxxxxxxxxx'#抄送人(可以随便填)message['Subject']=Header('测试邮件','utf-8')#邮件主题message['Date']=''#邮件日期,不可省略,可以随便填,最终日期为系统日期
首先通过MIMEMultipart()方法创建实例,通过attach()方法将MIMEText()方法的邮件信息绑定到实例中,再通过MIMEImage()方法读取的图片存储在变量msgImage中,通过add_header()方法引用图片,通过attach()方法绑定到实例中。
当我们需要发送多张图片时,只需要重复15行到19行代码即可。
接下来通过smtplib模块实现发送邮件的动作、连接邮箱服务器和登录邮箱,示例代码如下:
importsmtplibsender='xxxxxxxxxxx@'#发件人邮箱receivers=['xxxxxxxxx@','xxxxxxxxx@']#收件人邮箱列表try:smtpObj=smtplib.SMTP_SSL('')#获得邮箱服务器的传输协议证书smtpObj.connect('','服务器端口')#连接邮箱服务器smtpObj.login('登录邮箱','授权码')#登录邮箱smtpObj.sendmail(sender,receivers,message.as_string())#发送邮件print("邮件发送成功")exceptsmtplib.SMTPExceptionase:print(e)
发送附件邮件
发送附件邮件与发送图片邮件类似,编辑邮件信息示例代码如下:
fromemail.mime.textimportMIMETextfromemail.headerimportHeaderfromemail.mime.multipartimportMIMEMultipartmail_msg="""Python测试邮件..."""message=MIMEMultipart()#创建可携带各种资源的实例message.attach(MIMEText(mail_msg,'plain','utf-8'))#将邮件信息绑定到实例中att_annex1=MIMEText(open('文件1.xlsx','rb').read(),'base64','utf-8')#读取文件1.xlsx文件并构造附件1att_annex1["Content-Type"]='application/octet-stream'#文件类型,二进制字节流att_annex1["Content-Disposition"]='attachment;filename="1111.xlsx"'#filename为邮件中附件的名字,不支持中文,后缀名要和传输的文件后缀名要一致message.attach(att_annex1)#将附件1绑定到实例中
首先使用MIMEMultipart()方法创建可携带各种资源的实例,通过attach()方法将MIMEText()方法的邮件信息绑定到实例中,通过MIMEText()方法将读取到文件构造成附件,通过将参数Content-Type的值设置为'application/octet-stream'告诉浏览器这是一个字节流(浏览器处理字节流的默认方式是下载),通过参数Content-Disposition来编辑附件的文件名并通过attach将附件绑定到实例中。
接下来通过smtplib模块实现发送邮件的动作、连接邮箱服务器和登录邮箱,示例代码如下:
importsmtplibsender='xxxxxxxxxxx@'#发件人邮箱receivers=['xxxxxxxxx@','xxxxxxxxx@']#收件人邮箱列表try:smtpObj=smtplib.SMTP_SSL('')#获得邮箱服务器的传输协议证书smtpObj.connect('','服务器端口')#连接邮箱服务器smtpObj.login('登录邮箱','授权码')#登录邮箱smtpObj.sendmail(sender,receivers,message.as_string())#发送邮件print("邮件发送成功")exceptsmtplib.SMTPExceptionase:print(e)
这样就成功发送附件邮件了。
好了,关于smtplib、email实现发送邮件就讲到这里。
公众号:白巧克力LIN
该公众号发布Python、数据库、Linux、Flask、自动化测试、Git、算法等相关文章!
- END -