Python 3.x 中如何使用smtplib模块发送邮件

前言

在现代化的社会中,邮件是人们进行信息传递和交流的一种非常重要的方式。尤其是在工作和学习中,我们经常需要发送或者接收邮件。

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标准库中的email.mime模块文档

Python标准库中的smtplib模块文档

总结

本文介绍了如何使用Python 3.x 中的smtplib模块来发送邮件。在使用smtplib发送邮件之前,需要先开启邮箱的SMTP服务,获取邮箱的SMTP服务器地址和端口。在编写邮件内容时,可以使用email.mime模块中的MIMEText()和MIMEMultipart()函数来创建邮件内容,并通过smtplib.SMTP.sendmail()方法将邮件发送出去。

后端开发标签