Python - 发送电子邮件

大家好,有抱负的Python程序员们!今天,我们将开始一段激动人心的旅程,学习如何使用Python发送电子邮件。作为您友好的电脑老师,我很高兴能引导您完成这个过程。相信我,在本教程结束时,您将能够像专业人士一样发送电子邮件!

Python - Sending Email

在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(发送者邮箱, 接收者邮箱, 消息)

让我们分解一下:

  1. 我们导入了smtplib库。
  2. 我们设置了发送者邮箱、接收者邮箱和密码。
  3. 我们创建了一个简单的消息。
  4. 我们连接到Gmail的SMTP服务器(稍后会详细介绍)。
  5. 我们启动TLS以确保安全。
  6. 我们登录到我们的电子邮件账户。
  7. 最后,我们发送电子邮件!

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