亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> Python

Python 发送邮件实战:SMTP 协议快速上手指南

简单邮件传输协议 (SMTP) 负责发送邮件并在邮件服务器间路由邮件。

Python 提供 smtplib 模块,定义了 SMTP 客户端会话对象,可用于向任何运行 SMTP 或 ESMTP 监听守护进程的互联网主机发送邮件。

创建 SMTP 对象

简单语法:

import smtplib
smtpObj = smtplib.SMTP([host[, port[, local_hostname]]])

参数详情:

SMTP 对象实例方法 sendmail 执行发送工作,接受三个参数:

示例:发送纯文本邮件

#!/usr/bin/python
import smtplib
sender = 'from@fromdomain.com'
receivers = ['to@todomain.com']
message = """From: From Person 
To: To Person 
Subject: SMTP e-mail test
This is a test e-mail message."""
try:
    smtpObj = smtplib.SMTP('localhost')
    smtpObj.sendmail(sender, receivers, message)
    print("Successfully sent email")
except SMTPException:
    print("Error: unable to send email")

邮件正文使用三引号,正确格式化头部:需包含 From、To、Subject 头部,与正文间留空行。

使用 smtpObj 连接本地 SMTP 服务器,调用 sendmail 发送。若本地无 SMTP 服务器,可用 smtplib 客户端连接远程 SMTP 服务器。除非使用网页邮件(如 Hotmail、Yahoo! Mail),邮件提供商会提供发件服务器详情,如:

smtplib.SMTP('mail.your-domain.com', 25)

发送 HTML 邮件

发送文本邮件时内容视为纯文本,HTML 标签不会渲染。Python 支持将 HTML 作为真正 HTML 发送。

发送时指定 MIME 版本、内容类型和字符集。

示例

#!/usr/bin/python
import smtplib
message = """From: From Person 
To: To Person 
MIME-Version: 1.0
Content-type: text/html
Subject: SMTP HTML e-mail test
This is an e-mail message to be sent in HTML format
This is HTML message.

This is headline.

""" try: smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender, receivers, message) print("Successfully sent email") except SMTPException: print("Error: unable to send email")

发送带附件的邮件

混合内容邮件需设置 Content-type 为 multipart/mixed,文本和附件部分在 边界 内指定。

边界以两个连字符加唯一编号开始,编号不得出现在邮件正文中。结束边界也需以两个连字符结尾。

附件文件需用 pack("m") 函数进行 base64 编码后传输。

示例:发送 /tmp/test.txt 作为附件

#!/usr/bin/python
import smtplib
import base64
filename = "/tmp/test.txt"
fo = open(filename, "rb")
filecontent = fo.read()
encodedcontent = base64.b64encode(filecontent)
sender = 'webmaster@tutorialpoint.com'
reciever = 'amrood.admin@gmail.com'
marker = "AUNIQUEMARKER"
body = """This is a test email to send an attachment."""
part1 = """From: From Person 
To: To Person 
Subject: Sending Attachment
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=%s
--%s""" % (marker, marker)
part2 = """Content-Type: text/plain
Content-Transfer-Encoding:8bit
%s
--%s""" % (body, marker)
part3 = """Content-Type: multipart/mixed; name="%s"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename=%s
%s
--%s--""" % (filename, filename, encodedcontent, marker)
message = part1 + part2 + part3
try:
    smtpObj = smtplib.SMTP('localhost')
    smtpObj.sendmail(sender, reciever, message)
    print("Successfully sent email")
except Exception:
    print("Error: unable to send email")

Python

  1. 树莓派配合 TMP006 红外温度传感器:Python 库与安装指南
  2. 树莓派与 Python 构建远程温度传感器:分步实战指南
  3. 精通Python数据类型:实战指南
  4. 精通Python运算符:全面指南
  5. 精通Python Pass语句:实战指南
  6. 精通Python函数参数:位置、关键字与默认参数
  7. 精通 Python 字典:创建、操作与进阶技巧
  8. 精通 Python 异常处理:try、except、else 与 finally 详解
  9. Python 计算平均值:从循环到 NumPy 的四种实战方法
  10. Python 优雅交换两变量:无需临时变量的一行代码
  11. Python 发送邮件实战:SMTP 协议快速上手指南
  12. Java 发送邮件完整指南:从基础到进阶实战