下面我将详细讲解“Python基于smtplib协议实现发送邮件”的完整攻略。
一、准备 SMTP 协议发送邮件
在 Python 中,我们可以使用内置模块 smtplib
来实现使用 SMTP 协议发送邮件的功能。
首先,我们需要通过如下方式导入 smtplib
模块:
import smtplib
接着,我们需要创建 smtplib.SMTP()
类的实例,这个实例用于连接邮件服务器并登录账户:
smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
其中,参数含义如下:
- host: SMTP 服务器主机名,例如 "smtp.gmail.com"。
- port: 端口号,默认是 25。
- local_hostname: 当前主机名,默认是本机名称。
接着,我们可以使用 smtpObj.login()
方法登录邮箱账户:
smtpObj.login(username, password)
其中 username
和 password
是发件人登录邮箱的账户和密码。
此时,我们已经登录成功,然后我们可以通过 smtpObj.sendmail()
方法进行发送邮件操作。
二、使用示例
下面我们分别介绍两个示例,详细说明如何使用 smtplib
模块来发送邮件。
示例一:发送文本格式邮件
要发送文本格式邮件,我们可以使用 email.mime.text
模块。下面是一个完整的例子:
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
def send_email():
# 发件人邮箱账号
sender_email = 'example@example.com'
# 发件人邮箱密码
password = 'password'
# 收件人邮箱账号
receiver_email = 'example2@example.com'
# 邮件主题
subject = 'Python 发送邮件测试'
# 邮件内容
mail_content = '这是一封通过 Python 发送的测试邮件'
# 创建一个邮件实例
message = MIMEText(mail_content, 'plain', 'utf-8')
# 邮件头部信息
message['From'] = formataddr(["发件人姓名", sender_email])
message['To'] = formataddr(["收件人姓名", receiver_email])
message['Subject'] = subject
try:
# 登录邮箱并发送邮件
server = smtplib.SMTP('smtp.exmail.qq.com', 25)
server.login(sender_email, password)
server.sendmail(sender_email, [receiver_email], message.as_string())
print('邮件发送成功')
except smtplib.SMTPException as e:
print('邮件发送失败,原因:', e)
finally:
# 退出邮箱
server.quit()
if __name__ == '__main__':
send_email()
示例二:发送带有附件的邮件
要发送带有附件的邮件,我们需要使用 email.mime.multipart
和 email.mime.application
模块。下面是一个完整的例子:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from email.utils import formataddr
def send_email_with_attachment():
# 发件人邮箱账号
sender_email = 'example@example.com'
# 发件人邮箱密码
password = 'password'
# 收件人邮箱账号
receiver_email = 'example2@example.com'
# 邮件主题
subject = 'Python 发送带有附件的邮件测试'
# 邮件内容
mail_content = '这是一封通过 Python 发送的带有附件的测试邮件'
# 创建一个邮件实例
message = MIMEMultipart()
# 邮件头部信息
message['From'] = formataddr(["发件人姓名", sender_email])
message['To'] = formataddr(["收件人姓名", receiver_email])
message['Subject'] = subject
# 邮件正文
text = MIMEText(mail_content)
message.attach(text)
# 附件处理
with open('test.txt', 'rb') as f:
attachment = MIMEApplication(f.read())
attachment.add_header('Content-Disposition', 'attachment', filename='test.txt')
message.attach(attachment)
try:
# 登录邮箱并发送邮件
server = smtplib.SMTP('smtp.exmail.qq.com', 25)
server.login(sender_email, password)
server.sendmail(sender_email, [receiver_email], message.as_string())
print('邮件发送成功')
except smtplib.SMTPException as e:
print('邮件发送失败,原因:', e)
finally:
# 退出邮箱
server.quit()
if __name__ == '__main__':
send_email_with_attachment()
如上述的示例,你按照对应格式进行代码编写就可以实现你想要的效果。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python基于smtplib协议实现发送邮件 - Python技术站