Python3进阶(三) | SMTP发送邮件(发送不同格式、附件)
发布日期:2021-05-10 06:27:21 浏览次数:18 分类:精选文章

本文共 3303 字,大约阅读时间需要 11 分钟。

Python3 SMTP发送邮件

SMTP概述

SMTP(简单邮件传输协议)是一组规则,用于控制信件的中转方式。它是电子邮件系统的基础协议之一,用于将信息从一台邮件服务器传送到另一台邮件服务器,完成邮件的中继。

使用smtplib发送邮件

配置SMTP服务器

在开始编码之前,首先需要了解常用的SMTP服务器地址和端口:

  • 如果使用QQ邮箱:SMTP服务器为smtp.qq.com,端口为25。
  • 如果使用163邮箱:SMTP服务器为smtp.163.com,端口为25。
  • 其他邮箱服务提供商可能有所不同,需查阅其官网获取详细信息。

SMTP对象创建

使用smtplib.SMTP创建SMTP对象:

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

参数说明:

  • host:SMTP服务器地址,可以是域名或IP地址。
  • port:如果提供了host参数,需指定.QLabel>端口号,通常为25。
  • local_hostname:指定本地主机名(可选项。

邮件发送流程

使用SMTP对象的sendmail方法发送邮件:

smtpObj.sendmail(from_addr, to_addrs, msg, [mail_options, rcpt_options])

参数说明:

  • from_addr:发件人地址。
  • to_addrs:收件人地址列表。
  • msg:邮件内容。
  • mail_options:邮件选项(可选项。
  • rcpt_options:收件人选项(可选项。

邮件内容格式

使用MIMEText创建邮件内容:

from email.mime.text import MIMEText
msg = MIMEText(content, 'plain', 'utf-8')
msg['From'] = formataddr(["From昵称", from_addr])
msg['To'] = formataddr(["To昵称", to_addr])
msg['Subject'] = subject

实际应用示例

以下是一个通过QQ邮箱发送邮件的示例:

# QQ邮箱示例
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
from_addrs = '你的QQ邮箱'
password = 'QQ邮箱的授权码'
to_addrs = '收件人邮箱'
msg = MIMEText('邮件内容', 'plain', 'utf-8')
msg['From'] = formataddr(["From昵称", from_addrs])
msg['To'] = formataddr(["To昵称", to_addrs])
msg['Subject'] = "邮件标题"
server = smtplib.SMTP_SSL('smtp.qq.com')
try:
server.login(from_addrs, password)
server.sendmail(from_addrs, [to_addrs], msg.as_string())
server.quit()
except Exception:
print('邮件发送失败!')
如果是163邮箱,示例如下:
# 163邮箱示例
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
from_addrs = '你的163邮箱'
password = '163邮箱的授权码'
to_addrs = '收件人邮箱'
msg = MIMEText('邮件内容', 'plain', 'utf-8')
msg['From'] = formataddr(["From昵称", from_addrs])
msg['To'] = formataddr(["To昵称", to_addrs])
msg['Subject'] = "邮件标题"
server = smtplib.SMTP_SSL('smtp.163.com')
try:
server.login(from_addrs, password)
server.sendmail(from_addrs, [to_addrs], msg.as_string())
server.quit()
except Exception:
print('邮件发送失败!')

HTML格式邮件

为了发送HTML格式的邮件,只需要指定MIME类型为html

# 发送HTML邮件
msg = MIMEText(content, 'html', 'utf-8')
msg['From'] = formataddr(["From昵称", from_addrs])
msg['To'] = formataddr(["To昵称", to_addrs])
msg['Subject'] = "HTML邮件标题"

附件邮件

将附件添加到邮件中:

# 发送带附件的邮件
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
message = MIMEMultipart()
message['From'] = Header("邮件标题", 'utf-8')
message['To'] = Header("Li子们", 'utf-8')
# 邮件内容
text_part = MIMEText('邮件内容', 'plain', 'utf-8')
message.attach(text_part)
# 附件1(PDF文件)
pdf_path = 'Spring Boot实战 ,丁雪丰 (译者).pdf'
pdf_file = MIMEApplication(open(pdf_path, 'rb').read())
pdf_file.add_header('Content-Disposition', 'attachment', filename=pdf_path)
message.attach(pdf_file)
# 附件2(文本文件)
txt_path = 'Python学习须知.txt'
txt_file = MIMEApplication(open(txt_path, 'rb').read())
txt_file.add_header('Content-Disposition', 'attachment', filename=txt_path)
message.attach(txt_file)
server = smtplib.SMTP('smtp.163.com')
try:
server.login(from_addrs, password)
server.sendmail(from_addrs, [to_addrs], message.as_string())
server.quit()
except Exception:
print('邮件发送失败!')

注意事项

在实际应用中,需确保:

  • 调用server.login()时使用正确的邮箱账号和授权码。
  • SMTP服务器和端口号与所选邮箱服务一致。
  • 该脚本具有异常处理,避免因异常而导致资源未释放或邮件失败。

通过以上方法,可以在Python中便捷地使用SMTP协议发送邮件,灵活配置内容和附件,满足不同场景的需求。

上一篇:可视化 | Echarts基础&异步加载数据&交互组件&数据集
下一篇:Python3进阶(二) | 正则表达式

发表评论

最新留言

不错!
[***.144.177.141]2025年04月17日 05时21分34秒