前言
在现代化的社会中,邮件是人们进行信息传递和交流的一种非常重要的方式。尤其是在工作和学习中,我们经常需要发送或者接收邮件。
Python 3.x 中的smtplib模块是一个用于发送邮件的标准Python库,我们可以使用它来发送包含文本信息和附件的邮件。在本文中,我们将介绍如何使用Python 3.x 中的smtplib模块来发送邮件。
发送邮件之前
在使用smtplib发送邮件之前,需要进行以下准备工作:
1. 开启邮箱的SMTP和POP3服务
在使用SMTP协议发送邮件之前,需要先开启邮箱的SMTP服务。否则会提示如下错误:
SMTPAuthenticationError: (535, b'Error: authentication failed')
具体操作方式如下:
在邮箱设置中找到“账户”选项。
打开“账户”选项,找到“安全选项”中的“开启POP3/SMTP服务”。
点击“开启POP3/SMTP服务”选项,并按照提示进行设置。
2. 获取邮箱的SMTP服务器地址和端口
各个邮箱的SMTP服务器地址和端口不尽相同,因此需要根据具体情况进行设置。以下是几个常见的邮箱SMTP服务器地址和端口:
邮箱 | SMTP服务器地址 | SMTP服务器端口 |
---|---|---|
QQ邮箱 | smtp.qq.com | 465/587 |
163邮箱 | smtp.163.com | 465/994 |
Gmail邮箱 | smtp.gmail.com | 465/587 |
使用Python发送邮件
1. 登录邮箱
使用Python发送邮件之前,需要先登录邮箱。在Python中,可以通过smtplib.SMTP()函数来实现SMTP认证登录。
import smtplib
mail_host = 'smtp.qq.com' # 设置SMTP服务器地址
mail_port = 465 # 设置SMTP服务器端口,默认使用SSL加密传输
smtpObj = smtplib.SMTP_SSL(mail_host, mail_port) # 启用SSL加密传输
smtpObj.login('sender@qq.com', 'password') # 登录邮箱
注意:需要使用授权码(即登录密码)来进行SMTP认证登录。
2. 编写邮件内容
在进行邮件发送之前,需要编写邮件的内容。在Python中,可以通过email.mime模块中的MIMEText()和MIMEMultipart()函数来创建邮件内容。
2.1 创建邮件正文
下面的代码演示如何创建一封只包括邮件正文的邮件:
from email.mime.text import MIMEText
msg = MIMEText('这是一封Python自动发送的邮件。') # 创建纯文本邮件内容
msg['Subject'] = 'Hello World' # 设置邮件标题
msg['From'] = 'sender@qq.com' # 设置发件人邮箱
msg['To'] = 'recipient@qq.com' # 设置收件人邮箱
2.2 创建包含附件的邮件
下面的代码演示如何创建一封包含附件的邮件:
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.mime.text import MIMEText
msg = MIMEMultipart() # 创建包含附件的邮件内容
msg['Subject'] = 'Hello World' # 设置邮件标题
msg['From'] = 'sender@qq.com' # 设置发件人邮箱
msg['To'] = 'recipient@qq.com' # 设置收件人邮箱
# 创建邮件正文
body = MIMEText('这是一封包含附件的Python自动发送的邮件。')
msg.attach(body)
# 创建附件对象
file = MIMEApplication(open('document.txt').read())
file.add_header('Content-Disposition', 'attachment', filename='document.txt') # 设置附件名称
msg.attach(file)
注意:在发送包含附件的邮件时,需要使用MIMEMultipart()来创建邮件内容,并通过attach()方法将附件添加到邮件中。
3. 发送邮件
在创建完邮件内容之后,可以使用smtplib.SMTP.sendmail()方法将邮件发送出去:
smtpObj.sendmail('sender@qq.com', 'recipient@qq.com', msg.as_string()) # 发送邮件
注意:SMTP.sendmail()方法中的邮件内容需要使用as_string()方法转换为字符串格式。
4. 关闭连接
完成以上步骤后,需要关闭SMTP连接:
smtpObj.quit() # 关闭连接
参考资料
总结
本文介绍了如何使用Python 3.x 中的smtplib模块来发送邮件。在使用smtplib发送邮件之前,需要先开启邮箱的SMTP服务,获取邮箱的SMTP服务器地址和端口。在编写邮件内容时,可以使用email.mime模块中的MIMEText()和MIMEMultipart()函数来创建邮件内容,并通过smtplib.SMTP.sendmail()方法将邮件发送出去。