Python - 发送电子邮件
大家好,有抱负的Python程序员们!今天,我们将开始一段激动人心的旅程,学习如何使用Python发送电子邮件。作为您友好的电脑老师,我很高兴能引导您完成这个过程。相信我,在本教程结束时,您将能够像专业人士一样发送电子邮件!
在Python中发送电子邮件
我们从基础开始。在Python中发送电子邮件就像成为一名数字邮递员,但不是挨家挨户地走,而是使用一个特殊的Python库叫做smtplib
。SMTP代表简单邮件传输协议,这只是说“通过互联网发送邮件的规则”的一种花哨方式。
以下是一个简单的例子来开始:
import smtplib
发送者邮箱 = "[email protected]"
接收者邮箱 = "[email protected]"
密码 = "your_password"
消息 = "Hello, this is a test email from Python!"
with smtplib.SMTP("smtp.gmail.com", 587) as server:
server.starttls()
server.login(发送者邮箱, 密码)
server.sendmail(发送者邮箱, 接收者邮箱, 消息)
让我们分解一下:
- 我们导入了
smtplib
库。 - 我们设置了发送者邮箱、接收者邮箱和密码。
- 我们创建了一个简单的消息。
- 我们连接到Gmail的SMTP服务器(稍后会详细介绍)。
- 我们启动TLS以确保安全。
- 我们登录到我们的电子邮件账户。
- 最后,我们发送电子邮件!
Python smtplib.SMTP() 函数
SMTP()
函数是我们数字邮局的关键。它建立与我们要使用的SMTP服务器的连接。以下是更详细的介绍:
import smtplib
server = smtplib.SMTP('smtp.gmail.com', 587)
print(server.ehlo())
server.starttls()
print(server.ehlo())
在这个例子中:
- 我们为Gmail的服务器创建了一个SMTP对象。
-
ehlo()
就像对服务器说“你好”。 -
starttls()
启动TLS加密以确保安全。
Python smtpd 模块
虽然smtplib
用于发送电子邮件,但smtpd
用于接收电子邮件。这就像建立自己的迷你电子邮件服务器!以下是一个简单的例子:
import asyncore
from smtpd import SMTPServer
class EmailServer(SMTPServer):
def process_message(self, peer, mailfrom, rcpttos, data, **kwargs):
print(f'接收来自:{peer}的消息')
print(f'消息发件人:{mailfrom}')
print(f'消息收件人:{rcpttos}')
print(f'消息长度:{len(data)}')
server = EmailServer(('localhost', 1025), None)
asyncore.loop()
这个例子设置了一个基本的电子邮件服务器,它会打印出有关接收到的电子邮件的信息。这就像拥有自己的个人邮件分拣室!
使用Python发送HTML电子邮件
现在,让我们用一些HTML使我们的电子邮件变得花哨:
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
发送者邮箱 = "[email protected]"
接收者邮箱 = "[email protected]"
密码 = "your_password"
消息 = MIMEMultipart("alternative")
消息["Subject"] = "multipart test"
消息["From"] = 发送者邮箱
消息["To"] = 接收者邮箱
文本 = "Hi there! This is a plain text email."
html = """\
<html>
<body>
<p>Hi there!<br>
This is an <b>HTML</b> email.
</p>
</body>
</html>
"""
part1 = MIMEText(文本, "plain")
part2 = MIMEText(html, "html")
消息.attach(part1)
消息.attach(part2)
with smtplib.SMTP("smtp.gmail.com", 587) as server:
server.starttls()
server.login(发送者邮箱, 密码)
server.sendmail(发送者邮箱, 接收者邮箱, 消息.as_string())
这个例子发送了一个包含纯文本和HTML版本的电子邮件。这就像发送一个带有花哨信封的信!
作为电子邮件发送附件
如果我们想和电子邮件一起发送一个文件呢?没问题!以下是方法:
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
发送者邮箱 = "[email protected]"
接收者邮箱 = "[email protected]"
密码 = "your_password"
消息 = MIMEMultipart()
消息["From"] = 发送者邮箱
消息["To"] = 接收者邮箱
消息["Subject"] = "带附件的电子邮件"
正文 = "这是一封带附件的电子邮件。"
消息.attach(MIMEText(正文, "plain"))
文件名 = "document.pdf" # 用您的文件名替换
附件 = open(文件名, "rb")
部分 = MIMEBase("application", "octet-stream")
部分.set_payload(附件.read())
encoders.encode_base64(部分)
部分.add_header(
"Content-Disposition",
f"attachment; filename= {文件名}",
)
消息.attach(部分)
with smtplib.SMTP("smtp.gmail.com", 587) as server:
server.starttls()
server.login(发送者邮箱, 密码)
server.sendmail(发送者邮箱, 接收者邮箱, 消息.as_string())
这个脚本将一个文件附加到您的电子邮件中。这就像在信中添加一个包裹!
使用Gmail的SMTP服务器发送电子邮件
在整篇教程中,我们一直在使用Gmail的SMTP服务器。以下是一些常见SMTP服务器的快速参考表:
电子邮件提供商 | SMTP服务器 | 端口 |
---|---|---|
Gmail | smtp.gmail.com | 587 |
Outlook | smtp-mail.outlook.com | 587 |
Yahoo Mail | smtp.mail.yahoo.com | 587 |
请记住,当使用Gmail时,您可能需要启用“不够安全的应用访问”或使用“应用密码”,如果您启用了双因素身份验证。
就是这样,各位!您现在可以像Python专业人士一样发送电子邮件了。请记住,能力越大,责任越大——明智地使用您的新电子邮件发送技能!编程愉快,愿您的电子邮件总能到达目的地!
Credits: Image by storyset