在今天互联网高度发达的情况下,邮件已成为中小企业沟通的主要方式之一,邮件的可靠性和实时性也是企业合作的必要条件之一。在这篇文章中,我们将会介绍Python如何实现邮件发送功能,让你快速掌握邮件发送的技能。
一、SMTP协议
在介绍如何使用Python发送邮件之前,我们需要先了解SMTP协议。SMTP(Simple Mail Transfer Protocol)是一种用于发送邮件的标准协议,它定义了邮件客户端程序和邮件服务器之间的通信规则。SMTP协议使用TCP协议传输邮件,邮件传输过程中使用25号端口(部分邮件服务商使用465、587端口)。
SMTP协议有以下几个阶段:
- 握手
- 建立传输通道
- 发送命令
- 发送邮件内容
- 关闭传输通道
在Python中,我们可以使用smtplib库实现SMTP协议,进行邮件发送。
二、Python邮件发送库
Python邮件发送库和SMTP协议紧密相连,可以使用Python的smtplib库实现邮件发送。Python邮件发送库提供了邮件内容的构建,邮件的发送以及邮件附件的添加等功能。下面是Python邮件发送的代码示例:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
sender = 'xxx@xxx.com' # 发送者邮箱地址
password = 'xxxxxx' # 发送者邮箱密码
smtp_server = 'smtp.xxx.com' # 发送邮箱服务器地址
receiver = 'xxx@xxx.com' # 接收者邮箱地址
message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8') # 邮件内容
message['From'] = Header('Python邮件测试', 'utf-8') # 邮件发送者信息
message['To'] = Header('测试', 'utf-8') # 邮件接收者信息
subject = 'Python SMTP 邮件测试' # 邮件主题
message['Subject'] = Header(subject, 'utf-8')
try:
smtpObj = smtplib.SMTP(smtp_server, 25) # 连接邮件服务器
smtpObj.login(sender, password) # 登录邮件服务器
smtpObj.sendmail(sender, receiver, message.as_string()) # 发送邮件
print('发送成功')
except smtplib.SMTPException as e:
print('发送失败', e)
finally:
smtpObj.quit() # 断开连接
以上代码中,smtplib.SMTP()方法用于连接SMTP服务器,25是SMTP协议默认端口。在连接SMTP服务器之后,我们需要使用smtplib.SMTP().login()方法登录SMTP服务器,登录成功后使用smtplib.SMTP().sendmail()方法发送邮件。
三、Python发送带附件的邮件
有些时候,我们需要发送带附件的邮件,比如发送图片、文档等。Python中的email.mime.multipart.MIMEMultipart()类可以帮助我们构建带有附件的邮件。下面是Python发送带附件的邮件的代码示例:
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.header import Header
sender = 'xxx@xxx.com' # 发送者邮箱地址
password = 'xxxxxx' # 发送者邮箱密码
smtp_server = 'smtp.xxx.com' # 发送邮箱服务器地址
receiver = 'xxx@xxx.com' # 接收者邮箱地址
message = MIMEMultipart() # 创建MIMEMultipart对象
message['From'] = Header('Python邮件测试', 'utf-8') # 发送者信息
message['To'] = Header('测试', 'utf-8') # 接收者信息
subject = 'Python SMTP 邮件测试' # 邮件主题
message['Subject'] = Header(subject, 'utf-8')
# 构造邮件正文
message.attach(MIMEText('Python 邮件发送测试...', 'plain', 'utf-8'))
# 构造附件
with open('example.pdf', 'rb') as f:
pdf = MIMEApplication(f.read())
pdf.add_header('Content-Disposition', 'attachment', filename='example.pdf')
message.attach(pdf)
try:
smtpObj = smtplib.SMTP(smtp_server, 25) # 连接邮件服务器
smtpObj.login(sender, password) # 登录邮件服务器
smtpObj.sendmail(sender, receiver, message.as_string()) # 发送邮件
print('发送成功')
except smtplib.SMTPException as e:
print('发送失败', e)
finally:
smtpObj.quit() # 断开连接
以上代码中,我们使用email.mime.multipart.MIMEMultipart()类创建一个带有附件的邮件,使用email.mime.application.MIMEApplication()类构造附件。构造邮件正文后,我们可以使用MIMEMultipart().attach()方法把附件添加到邮件中。
四、Python发送HTML邮件
Python还可以发送HTML格式的邮件,使用email.mime.text.MIMEText()类可以构造HTML内容的邮件。以下是Python发送HTML邮件的示例代码:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
sender = 'xxx@xxx.com' # 发送者邮箱地址
password = 'xxxxxx' # 发送者邮箱密码
smtp_server = 'smtp.xxx.com' # 发送邮箱服务器地址
receiver = 'xxx@xxx.com' # 接收者邮箱地址
message = MIMEText('Python 邮件发送测试...
这是一封HTML格式的邮件!