下面是“Python发送SMTP邮件的简单教程”的完整攻略:
1. SMTP协议介绍
SMTP(Simple Mail Transfer Protocol)是一种用于发送邮件的协议,它是由RFC 821规范定义的。在Python中,我们可以借助内置的smtplib模块来发送邮件。
2. 准备工作
在使用Python发送邮件之前,我们需要先进行以下准备工作:
- 获得邮件服务器的地址和端口号。
- 获得发件人的登录用户名和密码。
- 获取收信人的邮箱地址和邮件主题、正文等信息。
3. Python发送SMTP邮件的代码示例
在Python中,发送SMTP邮件的代码示例如下所示:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 第三方 SMTP 服务
mail_host = "smtp.xxx.com" # SMTP服务器
mail_user = "user" # 用户名
mail_pass = "password" # 密码
sender = 'sender@xxx.com' # 发件人邮箱
receivers = ['receiver@xxx.com'] # 收件人邮箱列表
message = MIMEText('Python SMTP 邮件发送测试', 'plain', 'utf-8')
message['From'] = Header("发件人姓名", 'utf-8') # 发件人姓名
message['To'] = Header("收件人姓名", 'utf-8') # 收件人姓名
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(mail_host, 25) # 连接到服务器
smtpObj.login(mail_user, mail_pass) # 登录到服务器
smtpObj.sendmail(sender, receivers, message.as_string()) # 发送邮件
print("邮件发送成功")
except smtplib.SMTPException as e:
print("Error: 无法发送邮件", e)
上述代码中,我们首先通过smtplib
模块连接到指定的SMTP服务器,然后通过email.mime.text
和email.header
模块创建邮件内容和邮件头信息,最后通过sendmail()
方法发送邮件。
3.1 示例一
下面是一个更加完整的Python发送SMTP邮件的示例,它包含了邮件主题、正文、附件等信息:
import smtplib
import os
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.header import Header
# 第三方 SMTP 服务
mail_host = "smtp.xxx.com" # SMTP服务器
mail_user = "user" # 用户名
mail_pass = "password" # 密码
sender = 'sender@xxx.com' # 发件人邮箱
receivers = ['receiver@xxx.com'] # 收件人邮箱列表
message = MIMEMultipart('related')
message['From'] = Header("发件人姓名", 'utf-8') # 发件人姓名
message['To'] = Header("收件人姓名", 'utf-8') # 收件人姓名
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')
# 创建邮件内容
text = MIMEText('Python SMTP 邮件发送测试', 'plain', 'utf-8')
message.attach(text)
# 创建邮件附件
filename = 'test.txt'
if os.path.isfile(filename):
with open(filename, 'rb') as f:
mime = MIMEApplication(f.read())
mime.add_header('Content-Disposition', 'attachment', filename=filename)
message.attach(mime)
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(mail_host, 25) # 连接到服务器
smtpObj.login(mail_user, mail_pass) # 登录到服务器
smtpObj.sendmail(sender, receivers, message.as_string()) # 发送邮件
print("邮件发送成功")
except smtplib.SMTPException as e:
print("Error: 无法发送邮件", e)
在上述示例中,我们首先使用email.mime.multipart
模块创建一个带有主题、正文和附件的MIMEMultipart对象,然后通过MIMEText
和MIMEApplication
分别创建邮件正文和附件。最后,我们通过attach()
方法将正文和附件添加到MIMEMultipart对象中。
3.2 示例二
下面是一个Python发送HTML格式邮件的示例,邮件内容为一个带有图片的HTML页面:
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from email.header import Header
import os
# 第三方 SMTP 服务
mail_host = "smtp.xxx.com" # SMTP服务器
mail_user = "user" # 用户名
mail_pass = "password" # 密码
sender = 'sender@xxx.com' # 发件人邮箱
receivers = ['receiver@xxx.com'] # 收件人邮箱列表
message = MIMEMultipart('related')
message['From'] = Header("发件人姓名", 'utf-8') # 发件人姓名
message['To'] = Header("收件人姓名", 'utf-8') # 收件人姓名
subject = 'Python SMTP HTML 邮件测试'
message['Subject'] = Header(subject, 'utf-8')
# 定义HTML页面内容
html_content = """
<html>
<head></head>
<body>
<h1>Python SMTP发送HTML邮件测试</h1>
<p><img src="cid:image1"></p>
</body>
</html>
"""
# 创建邮件内容
text = MIMEText(html_content, 'html', 'utf-8')
message.attach(text)
# 创建邮件图片
filename = 'test.png'
if os.path.isfile(filename):
with open(filename, 'rb') as f:
img = MIMEImage(f.read())
img.add_header('Content-ID', '<image1>')
message.attach(img)
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(mail_host, 25) # 连接到服务器
smtpObj.login(mail_user, mail_pass) # 登录到服务器
smtpObj.sendmail(sender, receivers, message.as_string()) # 发送邮件
print("邮件发送成功")
except smtplib.SMTPException as e:
print("Error: 无法发送邮件", e)
在上述示例中,我们定义了一个带有图片的HTML页面,并通过email.mime.image
模块创建一个图片MIMEImage对象,将其添加到邮件内容中。同时,我们通过Content-ID
参数为该图片指定了一个ID,方便在HTML页面中引用。最后,我们将HTML页面实例添加到邮件内容中,以便发送出去。
以上就是Python发送SMTP邮件的简单教程完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 发送SMTP邮件的简单教程 - Python技术站