您的位置:

使用Python发送邮件消息的示例代码

一、Python发送邮件的基本知识

Python发送邮件的基本知识包括SMTP、MIME和SSL/TLS协议三个方面。

SMTP(Simple Mail Transfer Protocol)是Internet邮件传输的协议,Python中使用smtplib模块提供基于SMTP协议的邮件发送功能。

MIME(Multipurpose Internet Mail Extensions)是一种邮件传输协议,可用于发送复杂或富文本邮件。Python中使用email及其子模块提供MIME邮件相关的功能。

SSL(Secure Socket Layer)与TLS(Transport Layer Security)是加密通信协议,可用于保护电子邮件通信中的数据,Python中使用ssl模块提供SSL/TLS相关功能。

import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.utils import formataddr

sender = 'sender@example.com' # 发件人邮箱
password = 'password' # 发件人邮箱密码或授权码
receivers = ['receiver1@example.com', 'receiver2@example.com'] # 接收人邮箱,可支持多个接收人

message = MIMEText('Python邮件发送测试', 'plain', 'utf-8')
message['From'] = formataddr((Header('发件人', 'utf-8').encode(), sender))
message['To'] = ','.join(receivers)
message['Subject'] = Header('Python SMTP 邮件测试', 'utf-8').encode()

try:
    smtpObj = smtplib.SMTP('smtp.example.com', 25) # SMTP服务器地址和端口
    smtpObj.login(sender, password) # 登录SMTP服务器
    smtpObj.sendmail(sender, receivers, message.as_string()) # 发送邮件
    smtpObj.quit() # 退出SMTP服务器
    print("邮件发送成功!")
except smtplib.SMTPException as e:
    print("邮件发送失败,错误信息:", e)

二、SMTP协议的使用

使用Python发送邮件的第一步是建立SMTP连接。Python提供了smtplib模块以支持SMTP协议。建立SMTP连接的方法是使用SMTP类的connect()或starttls()方法,这两种方法的选择取决于你是否需要使用加密连接。

在建立SMTP连接后,你可以使用SMTP类的login()方法提供SMTP服务器的用户名和密码进行身份验证。这是必须的,因为大多数SMTP服务器需要验证以防止恶意或未经授权的访问。

一旦你成功连接到SMTP服务器并进行身份验证,就可以使用SMTP类的sendmail()方法来发送邮件。在 sendmail() 方法中,你需要提供发件人地址,收件人地址以及要发送的消息。如果你要发送HTML或带附件的消息,你需要使用email库和MIME协议。

三、MIME协议的使用

邮件中的MIME(Multipurpose Internet Mail Extensions)协议是一种邮件内容格式。它允许您在邮件中发送不同类型的内容,例如文本、HTML、图像或附件。

Python中使用email库来创建MIME消息。将要发送的邮件消息作为一个字符串传递给MIMEText类。然后设置消息的发送者、接收者和主题,将该消息附加到MIME邮件中并发送它。

from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders

msg = MIMEMultipart()
msg['From'] = formataddr((Header('XX网站管理员', 'utf-8').encode(), 'webmaster@example.com'))
msg['To'] = formataddr((Header('用户', 'utf-8').encode(), 'user@example.com'))
msg['Subject'] = Header('XX网站密码重置', 'utf-8').encode()

# 邮件正文
message = MIMEText('请点击下面的链接重置您的密码:\n\nhttp://www.example.com/resetpassword?key=abcdefg\n\n', 'plain', 'utf-8')
msg.attach(message)

# 添加附件
filename = 'guide.pdf'
attachment = open(filename, 'rb')
part = MIMEBase('application', 'octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment; filename= %s" % filename)
msg.attach(part)

try:
    smtpObj = smtplib.SMTP('smtp.example.com', 25)
    smtpObj.login(sender, password)
    smtpObj.sendmail(sender, receivers, msg.as_string())
    smtpObj.quit()
    print("邮件发送成功!")
except smtplib.SMTPException as e:
    print("邮件发送失败,错误信息:", e)

四、使用SSL/TLS进行加密通信

SSL(Secure Socket Layer)与TLS(Transport Layer Security)是加密通信协议,可用于保护电子邮件通信中的数据。Python中使用ssl模块提供SSL/TLS相关功能。

如果你要使用SSL加密SMTP通信,请使用SMTP_SSL类代替SMTP类。如果你要使用STARTTLS加密SMTP通信,请使用SMTP类的starttls()方法来启动加密连接。

import ssl

context = ssl.create_default_context()
with smtplib.SMTP_SSL("smtp.example.com", 465, context=context) as server:
    server.login(sender, password)
    server.sendmail(sender, receivers, message.as_string())
    print('邮件发送成功!')

五、使用Python发送HTML邮件

使用Python发送HTML格式的邮件也很简单。只需使用MIMEText类,并指定“html”作为消息的子类型即可。

from email.mime.text import MIMEText

html = '

Hello, World!

这是一封HTML邮件。