查看原文
其他

[快学Python3]SMTP发送邮件

苦叶子 开源优测 2022-11-13

点击上方蓝字“开源优测”一起玩耍

概述

在本文中,主要介绍使用smtplib进行文本格式、HTML格式和带附件的邮件发送处理。

  • 导入smtplib模块

import smtplib
  • 关键函数说明

# 创建smtp对象
smtp = smtplib.SMTP([host [, port [, localhost]]] )

# 参数说明
# host: smtp服务地址,例如126邮箱的是:smtp.126.com
# port: smtp服务端口
# localhost: 如果你的smtp服务在本机,则只需指定localhost即可


# 发送邮件函数
SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])

# 参数说明
# from_addr: 邮件发送地址
# to_addrs: 邮件接收地址列表
# msg: 邮件内容
# mail_options, rcpt_options  可选参数,暂时不需要了解

文本邮件示例

下面演示如何通过126邮箱发送纯文本邮件。

# -*- coding:utf-8 -*-

__author__ = '苦叶子'
import smtplib

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

if
__name__ == "__main__":
   print("发送文本邮件示例")    # 邮件发送者    sender = "deep_test@126.com"    # 邮件接收地址列表    # 请将xxx改为你的126邮箱名或整个改为你的目标接收邮箱地址    receivers = "xxx@126.com"    # 发送内容构建    # text标识发送内容为文本格式    msg = MIMEText("微信公众号号:开源优测", "plain", "utf-8")    msg["From"] = "deep_test@126.com"    msg["To"] = receivers    # 构建邮件标题    msg["Subject"] = Header("开源优测_DeepTest", "utf-8")    # smtp服务    smtpserver = "smtp.126.com"    smtpport = 25    # 发送人邮件用户名或专用于smtp账户用户名    username = "deep_test"    # 发送人邮件密码或专用于smtp账户的密码    password = "123456a"    # 构建smtp对象    smtp = smtplib.SMTP()    # 连接到smtp服务    con = smtp.connect(smtpserver, smtpport)    
   print("连接结果: ", con)    # 登录smtp服务    log = smtp.login(username, password)    
   print
("登录结果:", log)    # 发送邮件    print(receivers)    res = smtp.sendmail(sender, receivers, msg.as_string())    
   print("邮件发送结果: ", res)    # 退出    smtp.quit()    
   print
("send email finish")

运行上述代码,你的目标邮箱将收到一封测试邮件。

注:最好改为你的自己的邮箱smtp账户,过段时间我会将我的smtp账户启用服务关闭

HTML格式邮件

下面我们试着发送html格式的邮件。

将文本格式邮件代码中的以下部分替换如下:

# 发送内容构建

# html标识发送内容为文本格式
msg = MIMEText("<p>微信公众号号:开源优测</p><a href='http://www.testingunion.com'>开源优测社区</a>>",
       "html",
        "utf-8"
)

完整的代码示例如下:

# -*- coding:utf-8 -*-

__author__ = '苦叶子'

import smtplib

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

if __name__ == "__main__":    
   print("发送HTML邮件示例")    # 邮件发送者    sender = "deep_test@126.com"    # 邮件接收地址列表    # 请将xxx改为你的126邮箱名或整个改为你的目标接收邮箱地址    receivers = "xxx@126.com"    # 发送内容构建    # html标识发送内容为文本格式    msg = MIMEText("<p>微信公众号号:开源优测</p><a href='http://www.testingunion.com'>开源优测社区</a>>",
       "html",
       "utf-8")    msg["From"] = "deep_test@126.com"    msg["To"] = receivers    # 构建邮件标题    msg["Subject"] = Header("开源优测_DeepTest", "utf-8")    # smtp服务    smtpserver = "smtp.126.com"    smtpport = 25    # 发送人邮件用户名或专用于smtp账户用户名    username = "deep_test"    # 发送人邮件密码或专用于smtp账户的密码    password = "123456a"    # 构建smtp对象    smtp = smtplib.SMTP()    # 连接到smtp服务    con = smtp.connect(smtpserver, smtpport)    
   print
("连接结果: ", con)    # 登录smtp服务    log = smtp.login(username, password)
   print("登录结果:", log)    # 发送邮件    print(receivers)    res = smtp.sendmail(sender, receivers, msg.as_string())    
   print("邮件发送结果: ", res)    # 退出    smtp.quit()    print("send email finish")

注:

  • 将plain改为html标识邮件内容为html格式

  • 邮件内容采用html语言来格式化

附件格式邮件

下面看看如何发送带附件的邮件。 需要导入新的类,如下:

from email.mime.multipart import MIMEMultipart

需要使用MIMEMultipart构建内容结构,关键代码如下:

# 发送内容构建# html标识发送内容为文本格式
msg = MIMEMultipart() msg["From"] = "deep_test@126.com"
msg["To"] = receivers

# 构建邮件标题
msg["Subject"] = Header("开源优测_DeepTest", "utf-8")

# 构建邮件正文内容

msg.attach(MIMEText("微信公众号:开源优测", "plain", "utf-8"))
# 构造附件,多个附件同理
attach1 = MIMEText(open("发送附件邮件.py", 'rb').read(), "base64", "utf-8") attach1["Content-Type"] = "application/octet-stream"

# 这里filename随意写,将会在邮件中显示
attach1["Content-Disposition"] = "attrachment;filename=code.py"

# 关联附件到邮件中msg.attach(attach1)

完整的代码示例如下:

# -*- coding:utf-8 -*-

__author__ = '苦叶子'

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

if __name__ == "__main__":    
   print
("发送HTML邮件示例")    
   # 邮件发送者
   sender = "deep_test@126.com"    # 邮件接收地址列表    # 请将xxx改为你的126邮箱名或整个改为你的目标接收邮箱地址    receivers = "xxx@126.com"    # 发送内容构建    # html标识发送内容为文本格式    msg = MIMEMultipart()    msg["From"] = "deep_test@126.com"    msg["To"] = receivers    
   
   # 构建邮件标题
   msg["Subject"] = Header("开源优测_DeepTest", "utf-8")    
   
   # 构建邮件正文内容    msg.attach(MIMEText("微信公众号:开源优测", "plain", "utf-8"))    

   # 构造附件,多个附件同理
   attach1 = MIMEText(open("发送附件邮件.py", 'rb').read(), "base64", "utf-8")    attach1["Content-Type"] = "application/octet-stream"
   # 这里filename随意写,将会在邮件中显示    attach1["Content-Disposition"] = "attrachment;filename=code.py"
   # 关联附件到邮件中    msg.attach(attach1)    
   
   # smtp服务
   smtpserver = "smtp.126.com"    smtpport = 25    # 发送人邮件用户名或专用于smtp账户用户名    username = "deep_test"    # 发送人邮件密码或专用于smtp账户的密码    password = "123456a"    # 构建smtp对象    smtp = smtplib.SMTP()    
   
   # 连接到smtp服务    con = smtp.connect(smtpserver, smtpport)    
   print("连接结果: ", con)    
   
   # 登录smtp服务
   log = smtp.login(username, password)    
   
   print("登录结果:", log)    
   
   # 发送邮件    print(receivers)    res = smtp.sendmail(sender, receivers, msg.as_string())    
   
   print("邮件发送结果: ", res)    
   
   # 退出    smtp.quit()    
   
   print("send email finish")

小结

上述各示例最终邮件收到如下所示:

  • 构建文本和html格式的邮件使用MIMEText构建,使用plain标识文本内容格式,使用html标识html内容格式

  • 对于附件格式则需使用MIMEMultipart

 

开源优测

分享软件测试开源技术、经验、方案的首发平台

长按二维码/微信扫描 关注开源优测

QQ群:260407012

苦叶子私人微信:liyimin1912

有问题,可留言或加好友进微信群

苦叶子原创文章首发平台


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存