smtplib、email实现邮件发送

目录

发送纯文字邮件

发送HTML邮件

发送图片邮件

发送附件邮件


Python实现发送邮件主要用到smtplib和email模块,其中:

  • smtplib模块主要负责发送邮件的动作、连接邮箱服务器和登录邮箱等操作。

  • email模块用于管理电子邮件消息的库,主要负责构造邮件,如发件人、收件人、主题、正文、附件等。

通过smtplib、email模块可以发送纯文字、HTML、图片、带附件的邮件。

发送纯文字邮件

发送纯文字邮件,首先使用email模块编辑邮件信息,如发件人、收件人、邮件主题和邮件内容等,示例代码如下:

from email.mime.text import MIMEText
from email.header import Header

mail_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模块实现发送邮件的动作、连接邮箱服务器和登录邮箱,示例代码如下:

import smtplib
sender = 'xxxxxxxxxxx@xxx.com'   # 发件人邮箱
receivers = ['xxxxxxxxx@xxx.com','xxxxxxxxx@xxx.com']  # 收件人邮箱列表
try:
    smtpObj = smtplib.SMTP_SSL('smtp.xxx.cn')  # 获得邮箱服务器的传输协议证书
    smtpObj.connect('smtp.xxx.cn', '服务器端口')     # 连接邮箱服务器
    smtpObj.login('登录邮箱', '授权码')       # 登录邮箱
    smtpObj.sendmail(sender,receivers, message.as_string())  # 发送邮件
    print("邮件发送成功")
except smtplib.SMTPException as e:
    print(e)

首先使用smtplib.SMTP_SSL()方法获取邮箱服务器的传输协议证书,其传入的参数为邮箱服务器,常见的邮件服务器如下:

  • 谷歌邮箱:smtp.gmail.com,端口号:587;

  • 新浪邮箱:smtp.sina.com.cn,端口号:25;

  • 网易邮箱:smtp.163.com,端口号:25;

  • Foxmail邮箱:SMTP.foxmail.com,端口号:25;

  • QQ邮箱:smtp.qq.com,端口号:25;

  • 阿里云邮箱:smtp.aliyun.com,SSL加密端口:465;非加密端口:25;

获取传输协议证书后,通过connect()方法连接邮箱服务器,再通过login()方法登录邮箱,最后通过sendmail()方法发送邮件。

发送HTML邮件

发送HTML邮件与发送纯文字邮件类似,发送HTML邮件的邮件内容为HTML文本,MIMEText()方法第二个参数为html,示例代码如下:

import smtplib
from email.mime.text import MIMEText
from email.header import Header

mail_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@xxx.com'   # 发件人邮箱
receivers = ['xxxxxxxxx@xxx.com','xxxxxxxxx@xxx.com']  # 收件人邮箱列表
try:
    smtpObj = smtplib.SMTP_SSL('smtp.xxx.cn')    # 获得邮箱服务器的传输协议证书
    smtpObj.connect('smtp.xxx.cn', '服务器端口')     # 连接邮箱服务器
    smtpObj.login('登录邮箱', '授权码')       # 登录邮箱
    smtpObj.sendmail(sender,receivers, message.as_string())  # 发送邮件
    print("邮件发送成功")
except smtplib.SMTPException as e:
    print(e)

通过编写HTML代码使邮件内容样式更加丰富,例如为邮件内容字体加粗、加大,发送表格等。

发送图片邮件

发送图片邮件与发送纯文字、HTML邮件有所不同,编辑邮件信息示例代码如下:

from email.mime.image import MIMEImage
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
mail_msg = """
<body>
<p>测试Python发送带图片的邮件...</p>
<p>图片如下:</p>
<p><img src="cid:jpg1" alt="testimage1"></p>
<p><img src="cid:jpg2" alt="testimage2"></p>
</body>
"""
message = MIMEMultipart()    # 创建可携带各种资源的实例
message.attach(MIMEText(mail_msg,'html','utf-8'))  # 将邮件信息绑定到实例中
with open('1.png', 'rb') as image_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模块实现发送邮件的动作、连接邮箱服务器和登录邮箱,示例代码如下:

import smtplib
sender = 'xxxxxxxxxxx@xxx.com'   # 发件人邮箱
receivers = ['xxxxxxxxx@xxx.com','xxxxxxxxx@xxx.com']  # 收件人邮箱列表
try:
    smtpObj = smtplib.SMTP_SSL('smtp.xxx.cn')  # 获得邮箱服务器的传输协议证书
    smtpObj.connect('smtp.xxx.cn', '服务器端口')     # 连接邮箱服务器
    smtpObj.login('登录邮箱', '授权码')       # 登录邮箱
    smtpObj.sendmail(sender,receivers, message.as_string())  # 发送邮件
    print("邮件发送成功")
except smtplib.SMTPException as e:
    print(e)

发送附件邮件

发送附件邮件与发送图片邮件类似,编辑邮件信息示例代码如下:

from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
mail_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文件并构造附件1
att_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模块实现发送邮件的动作、连接邮箱服务器和登录邮箱,示例代码如下:

import smtplib
sender = 'xxxxxxxxxxx@xxx.com'   # 发件人邮箱
receivers = ['xxxxxxxxx@xxx.com','xxxxxxxxx@xxx.com']  # 收件人邮箱列表
try:
    smtpObj = smtplib.SMTP_SSL('smtp.xxx.cn')  # 获得邮箱服务器的传输协议证书
    smtpObj.connect('smtp.xxx.cn', '服务器端口')     # 连接邮箱服务器
    smtpObj.login('登录邮箱', '授权码')       # 登录邮箱
    smtpObj.sendmail(sender,receivers, message.as_string())  # 发送邮件
    print("邮件发送成功")
except smtplib.SMTPException as e:
    print(e)

这样就成功发送附件邮件了。

好了,关于smtplib、email实现发送邮件就讲到这里。

公众号:白巧克力LIN

该公众号发布Python、数据库、Linux、Flask、自动化测试、Git、算法等相关文章!

- END -

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白巧克力LIN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值