使用 python 发送邮件

邮件系统中有两类协议,一类是获取邮件的协议,另一类是发送邮件的协议,获取邮件的协议有 pop,imap。发送邮件的协议 有 smtp。

这里给出用 python 发送邮件的示例程序

发送邮件的三大步:

  1. 登录邮件服务器
  2. 准备邮件内容
  3. 发送邮件
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
使用 SMTP 协议发送邮件,支持同时发送文本信息、超文本信息和多附件
"""
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
import os

# 配置变量
# 下面所有参数均可通过配置文件配置获取
  """
  :param mail_host: 设置服务器,"smtp.xx.com"
  :param mail_user: 用户名
  :param mail_pass: 口令
  :param sender: 发送邮件的地址
  :param receivers: 接收邮件,可设置为你的QQ邮箱或者其他邮箱
  :param messageText: 邮件发送的文本内容
  :param messageHTML: 邮件发送的超文本内容
  :param messageFromHeader: 发送邮件方的别名展示(类似昵称)
  :param messageToHeader: 接收邮件方的展示信息
  :param messageSubject: 邮件主题
  :param filePath: 附件详细地址
  """
# 设置服务器, "smtp.xx.com"
mail_host = "smtp.qq.com"
# 用户名
mail_user = "xxx@qq.com"
# 口令有个 getpass 模块可以获取密码
mail_pass = "****"
# smtp 服务器端口,每个服务商提供的邮件服务端口可能不一致,465是腾讯的端口
mail_port = 465
# 发送邮件的地址
sender = "xxx@vip.qq.com"
# 接收邮件,可设置为你的QQ邮箱或者其他邮箱,list类型,可同时填写多个地址并以,分割
receivers = "xxx@qq.com","xxx@qq.com"
# 邮件发送的内容
messageText = "测试使用\n"
# 邮件发送的超文本内容
messageHTML = """
    <!DOCTYPE html>
    <html lang="en">
    <head>
     <meta charset="UTF-8">
     <title>test</title>
    </head>
    <body>
     <img src="http://a.hiphotos.baidu.com/image/pic/item/730e0cf3d7ca7bcb6a172486b2096b63f624a82f.jpg" alt="test" width="200px" height="200px">
    </body>
    </html>
   """
# 发件人的别名展示(类似昵称),为空则显示发件方地址
messageFromHeader = "John"
# 收件人
messageToHeader = "Alice"
# 邮件主题
messageSubject = "fortest"
# 需要发送的附件的详细地址,支持多附件发送,附件之间以,分割
filePaths = '1.txt','2.txt','3.txt'
# 发送邮件
def sendMail():
  # 邮件类型为"multipart/alternative"的邮件包括纯文本正文(text / plain)和超文本正文(text / html)。
  # 邮件类型为"multipart/related"的邮件正文中包括图片,声音等内嵌资源。
  # 邮件类型为"multipart/mixed"的邮件包含附件。向上兼容,如果一个邮件有纯文本正文,超文本正文,内嵌资源,附件,默认mixed类型。
  message = MIMEMultipart()
 
  # 邮件显示信息内容
  # 发送邮件方的头部展示信息
  message['From'] = Header(messageFromHeader, 'utf-8')
  # 接收邮件方的展示信息
  message['To'] = Header(messageToHeader, 'utf-8')
  # 邮件主题
  message['Subject'] = Header(messageSubject, 'utf-8')
 
  try:
    # 添加邮件附件,支持多附件发送
    for filePath in filePaths:
      messageFile = open(filePath, 'rb').read()
      message_file = MIMEText(messageFile, 'base64', 'utf-8')
      message["Content-Type"] = 'application/octet-stream'
      # 目前发送附件不能使用message_file["Content-Disposition"] = 'attachment; filename="aaa.txt"'方式发送信息
      message_file.add_header('Content-Disposition', 'attachment', filename=os.path.basename(filePath))
      # 附件内容
      message.attach(message_file)
  except Exception as e:
    print("添加附件失败:" + str(e))
 
  # 一共三个参数,第一个为发送文本信息,第二个发送类型,第三个发送信息的编码。如果想要发送html类型的信息,仅需要 修改第二个参数'plain'为'html'即可
  # 文本信息,使用‘plain'属性不能正常显示
  message_text = MIMEText(messageText, 'html', 'utf-8')
  message.attach(message_text)
  
  # 超文本信息
  message_html = MIMEText(messageHTML, 'html', 'utf-8')
  message.attach(message_html)
 
  try:
    # 因为现在很多服务商做了安全验证,所有在发送邮件的时候需要把原来的smtplib.SMTP()改成现在的smtplib.  SMTP_SSL()方式
    smtpObj = smtplib.SMTP_SSL()
    # 链接邮件服务器
    smtpObj.connect(mail_host, mail_port)
    # 登录邮件服务器
    smtpObj.login(mail_user, mail_pass)
    # 发送邮件信息
    smtpObj.sendmail(sender,receivers,message.as_string())
    print("邮件发送成功")
  except Exception as e:
    print(("邮件发送失败,错误信息:" + str(e)))
 
if __name__ == '__main__':
  sendMail()

参考:

  1. https://www.jb51.net/article/162273.htm
  2. python自动发邮件总结及实例说明
  3. 最完整的自动化测试流程:Python编写执行测试用例及定时自动发送最新测试报告邮件
  4. Python SMTP发送邮件 | 菜鸟教程 (runoob.com)
  5. 如何使用Python发送邮件
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值