1. 前言
Python作为一门广泛使用的编程语言,拥有着丰富的第三方库,很多问题都能够用Python来解决。在项目中,邮件的发送是很常见的需求,使用Python可以轻松地实现邮件发送的功能。本文将介绍如何使用Python的smtplib和email库来发送邮件。
2. 发送普通邮件
2.1 smtplib库
smtplib是Python内置的发送邮件的库,可以通过SMTP协议向指定的邮件服务器发送邮件。在使用smtplib发送邮件之前,需要先获取邮件服务器的地址和登录信息。
2.2 获取邮件服务器信息
获取邮件服务器的信息需要知道SMTP服务器的地址和SMTP端口号,以及是否需要使用TLS加密。常见的邮件提供商如Gmail、Outlook、QQ邮箱等均提供SMTP服务器支持。以下是一些常见邮件提供商的SMTP服务器地址、端口号和TLS选项:
- Gmail: smtp.gmail.com,端口号465或587,需要使用TLS
- Outlook: smtp.office365.com,端口号587,需要使用TLS
- QQ邮箱: smtp.qq.com,端口号465或587,需要使用SSL
2.3 登录邮件服务器
登录邮件服务器需要提供发件人的邮箱地址和邮箱的授权码,授权码是为了保证邮箱的安全性而设置的,可以在邮箱的设置中获取。以下是登录邮件服务器的代码示例:
import smtplib
# 设置登录信息和邮件服务器地址
smtp_server = 'smtp.gmail.com'
port = 587
sender_email = 'your_email@gmail.com'
password = 'your_password'
# 登录邮件服务器
smtp_obj = smtplib.SMTP(smtp_server, port)
smtp_obj.ehlo()
smtp_obj.starttls()
smtp_obj.login(sender_email, password)
2.4 构造邮件内容
使用email库来构造邮件内容,可以包括邮件的主题、发件人、收件人、正文和附件等信息。以下是一个简单的邮件示例:
from email.mime.text import MIMEText
from email.header import Header
# 构造邮件
subject = 'Python邮件测试'
sender = 'your_email@gmail.com'
receivers = ['receiver_email@example.com'] # 收件人邮箱,可以是一个列表
content = '这是一封Python邮件
'
html = MIMEText(content, 'html', 'utf-8') # 将正文转换为MIME格式
html['From'] = Header(sender, 'utf-8')
html['To'] =Header(','.join(receivers), 'utf-8')
html['Subject'] = Header(subject, 'utf-8')
正文可以是纯文本,也可以是HTML格式。在构造邮件时,需要注意编码格式,避免出现乱码。
2.5 发送邮件
使用smtplib库的sendmail方法来发送邮件,该方法需要三个参数,分别为发件人邮箱、收件人邮箱和邮件内容。以下是发送邮件的代码示例:
# 发送邮件
smtp_obj.sendmail(sender_email, receivers, html.as_string())
smtp_obj.quit()
print('邮件发送成功')
3. 发送带附件的邮件
3.1 构造带附件邮件内容
如果需要发送带附件的邮件,需在邮件内容中添加附件信息。使用MIMEBase来构造附件,将附件内容添加到MIMEBase中,再将MIMEBase添加到MIMEMultipart中。
以下是一个发送带附件的邮件示例:
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
# 构造邮件
subject = 'Python邮件测试'
sender = 'your_email@gmail.com'
receivers = ['receiver_email@example.com'] # 收件人邮箱,可以是一个列表
body = '这是一封带附件的Python邮件
'
msg = MIMEMultipart('related')
msg['From'] = Header(sender, 'utf-8')
msg['To'] = Header(','.join(receivers), 'utf-8')
msg['Subject'] = Header(subject, 'utf-8')
msg.attach(MIMEText(body, 'html', 'utf-8'))
# 添加附件
filename = 'test.txt'
with open(filename, 'rb') as f:
attachment = MIMEBase('application', 'octet-stream')
attachment.set_payload(f.read())
encoders.encode_base64(attachment)
attachment.add_header('Content-Disposition', 'attachment', filename=('gbk', '', filename))
msg.attach(attachment)
在以上代码中,我们创建了一个MIMEMultipart对象msg,该对象包含了邮件的基本信息。然后,我们使用MIMEBase对象来创建附件,并将附件添加到MIMEMultipart对象中。
3.2 发送带附件的邮件
在发送邮件时,我们需要将MIMEMultipart对象作为参数传递给sendmail方法。
以下是发送带附件的邮件的代码示例:
# 发送邮件
smtp_obj.sendmail(sender_email, receivers, msg.as_string())
smtp_obj.quit()
print('邮件发送成功')
4. 总结
通过使用Python的smtplib和email库,我们可以轻松地实现邮件的发送功能。在使用smtplib库发送邮件时,需要先获取邮件服务器的地址和登录信息,然后使用email库构造邮件内容,最后调用smtplib库的sendmail方法来发送邮件。
参考文献
1. Python官方文档 https://docs.python.org/3/library/email.mime.html
2. Python邮件发送实战 https://www.cnblogs.com/mzc1997/p/11356612.html