Python SMTP发送邮件详解

Python SMTP发送邮件是一个常见的任务,通常用于自动化邮件通知、报告发送等场景。以下是对Python SMTP发送邮件的详细解析:

一、SMTP协议简介
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只需要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器。

二、Python SMTP发送邮件的步骤
准备SMTP服务器信息:
SMTP服务器地址:如smtp.example.com。
SMTP服务器端口:常见端口有25(默认端口)、465(SSL端口)和587(TLS端口)。
是否需要加密:根据SMTP服务器要求选择SSL或TLS加密。
准备认证信息:
发件人邮箱地址和密码:用于登录SMTP服务器进行身份验证。
准备邮件内容:
收件人邮箱地址:指定接收邮件的目标邮箱。
发件人邮箱地址:指定发送邮件的来源邮箱。
邮件主题:邮件的标题信息。
邮件正文:邮件的内容部分,可以是纯文本、HTML格式或包含附件。
编写Python脚本:
使用Python内置的smtplib库和email库来编写发送邮件的脚本。
smtplib库负责与SMTP服务器进行通信和发送邮件。
email库负责构造邮件内容,包括设置邮件头信息和邮件正文等。

三、Python SMTP发送邮件的示例代码
以下是一个使用Python SMTP发送简单文本邮件的示例代码:

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

def send_simple_email(smtp_server, smtp_port, sender_email, sender_password, receiver_email, subject, body):
# 创建一个MIMEText对象,设置邮件内容为纯文本格式
message = MIMEText(body, 'plain', 'utf-8')

# 设置邮件头信息
message['From'] = Header(sender_email, 'utf-8')
message['To'] = Header(receiver_email, 'utf-8')
message['Subject'] = Header(subject, 'utf-8')

try:
    # 根据SMTP服务器是否使用SSL来选择连接方式
    if smtp_port == 465:
        server = smtplib.SMTP_SSL(smtp_server, smtp_port)
    else:
        server = smtplib.SMTP(smtp_server, smtp_port)
        server.starttls()  # 开启TLS加密
    
    # 登录SMTP服务器
    server.login(sender_email, sender_password)
    
    # 发送邮件
    server.sendmail(sender_email, [receiver_email], message.as_string())
    print("邮件发送成功")
except Exception as e:
    print(f"发送邮件失败: {e}")
finally:
    # 关闭SMTP服务器连接
    server.quit()

测试函数

if name == "main":
# 填写SMTP服务器信息和个人信息
smtp_server = "smtp.example.com" # SMTP服务器地址
smtp_port = 587 # SMTP服务器端口号(非SSL)
sender_email = "your_email@example.com" # 发件人邮箱
sender_password = "your_password" # 发件人密码或应用专用密码
receiver_email = "recipient@example.com" # 收件人邮箱
subject = "测试邮件主题" # 邮件主题
body = "这是一封测试邮件的内容。" # 邮件正文内容

send_simple_email(smtp_server, smtp_port, sender_email, sender_password, receiver_email, subject, body)

此外,还可以发送带有HTML内容和附件的邮件。以下是发送带有HTML内容和附件的邮件的示例代码:

python
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
from email.header import Header

def send_html_email_with_attachment(smtp_server, smtp_port, sender_email, sender_password, receiver_email, subject, html_content, attachment_path=None):
# 创建一个多部分的消息容器
msg = MIMEMultipart('alternative')

# 设置邮件头信息
msg['From'] = Header(sender_email, 'utf-8')
msg['To'] = Header(receiver_email, 'utf-8')
msg['Subject'] = Header(subject, 'utf-8')

# 将HTML内容添加到消息体中
part1 = MIMEText(html_content, 'html', 'utf-8')
msg.attach(part1)

# 如果提供了附件路径,则将附件添加到邮件中
if attachment_path:
    with open(attachment_path, "rb") as attachment:
        part2 = MIMEBase('application', 'octet-stream')
        part2.set_payload(attachment.read())
        encoders.encode_base64(part2)
        # 添加附件头信息
        part2.add_header('Content-Disposition', f'attachment; filename={attachment_path.split("/")[-1]}')
        # 将附件添加到多部分消息中
        msg.attach(part2)

# 发送邮件的代码与上面示例类似,此处省略...

测试函数(省略,与上面示例类似)

四、注意事项
开启SMTP服务:在使用脚本发送邮件之前,需要确保已开启电子邮箱的SMTP服务,并获取SMTP服务器地址、端口号以及发件人邮箱的密码或应用专用密码。
异常处理:在发送邮件的过程中,可能会遇到各种异常,如网络问题、身份验证失败等。因此,在编写脚本时,应添加异常处理代码,以便在出现异常时能够给出提示并采取相应的处理措施。
安全性:在脚本中存储和使用邮箱密码时,需要注意安全性问题。建议使用应用专用密码或环境变量等方式来存储和管理密码信息。

综上所述,Python SMTP发送邮件是一个实用且强大的功能,通过掌握SMTP协议和Python的相关库(如smtplib和email),可以轻松实现邮件的自动化发送。

posted @   白色墨水  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示