likes
comments
collection
share

Python基础教程:使用smtplib发送邮件

作者站长头像
站长
· 阅读数 14

1.引言

在当今数字时代,电子邮件已成为我们生活和工作中不可或缺的一部分。Python 中的 smtplib 库提供了一个简单的接口,使得发送电子邮件变得非常容易。通过Python可以方便地自动发送邮件,将邮件发送给客户、同事或朋友,以及提醒你的任务列表或提醒你必须完成的工作。本篇文章将为你讲解如何在Python发送邮件,并为你提供实现的多种方式。不管你是初学者还是有一定编程经验的高级用户,都能从中受益。 若要实现发送电子邮件,我们的大致思路可分为以下几个步骤:

  • 1.申请邮箱账号(本文以163邮箱为例)
  • 2.登录:提供账号密码,并通过python smtplib库登录。
  • 3.编辑邮件内容:包括发件人、收件人、抄送人、主题、邮件内容(文本、附件)等。
  • 4.发送邮件。

Python基础教程:使用smtplib发送邮件

2. POP3、SMTP、IMAP协议

POP3、IMAP、SMTP 都是与电子邮件相关的协议。 POP3(Post Office Protocol version 3) 是一种常用的电子邮件接收邮件协议,它允许用户从远程服务器下载自己的邮件收件箱中的邮件。它的主要缺点是如何管理收件箱中的邮件,即当用户将电子邮件从服务器上下载到本地计算机时,它通常从服务器上删除邮件,在某些情况下,会导致一些问题。

IMAP(Internet Message Access Protocol) 允许用户远程管理邮件服务器中的电子邮件。它提供了一种在客户端计算机和邮件服务器之间保持持久化连接的方式,因此它在管理邮件上有更大的灵活性。它还提供了一种能够让用户保存邮件的方式,即当用户在客户端中删除电子邮件时,它不会从邮件服务器上删除。

SMTP(Simple Mail Transfer Protocol) 是一个定义了邮件传输方式的简单且基本的协议。它用于从一台服务器(发送邮件的服务器)将邮件传输到另一台服务器(接收邮件的服务器)。SMTP使用TCP/ IP协议来传输邮件,并使用25端口(默认情况下)。它允许用户发送电子邮件以便其他用户可以接收它。

3. 申请邮箱账号

如图所示,注册并登录邮箱后,我们需开启客户端登录权限,并获取到授权码(此处以163邮箱为例)。 Python基础教程:使用smtplib发送邮件 这些前置工作做好后,让我们开始进入编程实操吧!

4.发送普通邮件

下面我们将使用Python内置的smtplib模块和ssl模块发送电子邮件。这个方法需要一些邮件服务器的相关信息,例如SMTP地址和端口号,以及登录凭据(上面已经准备好了)。具体步骤如下:

4.1 导入必要模块

导入smtplib和ssl模块,ssl模块将保护您的登录凭据,确保安全发送电子邮件。

import smtplib, ssl

4.2 设置服务器和端口号

使用您的邮箱提供商提供的SMTP地址和端口号来设置SMTP服务器。根据您的邮箱,可以设置为不同的地址和端口号。

smtp_server = "smtp.163.com"
port = 465# 对于TLS连接,我们使用465端口。 

建立连接并登录

使用SMTP服务器建立与服务器的连接。然后,使用您的发送电子邮件的电子邮件地址和密码进行身份验证。电子邮件与您的登录密码或其他访问令牌是相互关联的,因此此过程也称为“登录”。 下面是一个完整的Python示例,用于向收件人发送电子邮件:

# -*- coding: utf-8
import smtplib
# 邮箱服务器相关配置
smtp_server = 'smtp.163.com'
smtp_port = 465
# 发件人相关配置
mail_sender = 'liululee@163.com' # 发件人电子邮箱
mail_sender_password = 'XXXXXXXXXXXXXXXXXXX' # 发件人邮箱密码

# 建立到邮件服务器的加密连接
server = smtplib.SMTP_SSL(smtp_server, smtp_port)
server.login(mail_sender, mail_sender_password)

# 邮件内容
receiver_email = "729235361@qq.com"
message = "\n".join([
    "Subject: Test email",
    "To: {}".format(receiver_email),
    "From: {}".format(mail_sender),
    "",
    "This is a test email sent with Python."
])

# 发送邮件
server.sendmail(mail_sender, receiver_email, message)
print("Email sent successfully.")


成功收到邮件: Python基础教程:使用smtplib发送邮件

5.发送复杂邮件

接下来,我们使用email模块相关的组件来实现发送复杂邮件,它可以⽤来构建邮件主题以及各种形式的邮件内容(包括文字内容、图片内容、html内容、附件)等,当我们发送复杂邮件时,使用它非常便利。


## -*- coding: utf-8
import smtplib, ssl
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header
# 邮箱服务器相关配置
smtp_server = 'smtp.163.com'
smtp_port = 465
# 发件人相关配置
mail_sender = 'liululee@163.com' # 发件人电子邮箱
mail_sender_password = 'XXXXXXXXXXXXXXXXX' # 发件人邮箱密码
# 创建SSL类的上下文对象
context = ssl.create_default_context()
# 建立到邮件服务器的加密连接
server = smtplib.SMTP_SSL(smtp_server, smtp_port)
server.login(mail_sender, mail_sender_password)
# 邮件内容
receiver_email = "729235361@qq.com"
# message = "\n".join([
#     "Subject: Test email",
#     "To: {}".format(receiver_email),
#     "From: {}".format(mail_sender),
#     "",
#     "This is a test email sent with Python."
# ])
# 1.创建邮件对象
message = MIMEMultipart()
# 2.设置邮件主题
subject = Header('来自poycode.cn的晚安问候', 'utf-8').encode()
message['Subject'] = subject
# 3.设置发送者
message['From'] = mail_sender
# 4.设置接收者
message['To'] = receiver_email
# 5.设置抄送者
message['Cc'] = 'developlee@163.com'
# 6.添加文字内容
## 6.1 普通文字
text = MIMEText('Hi, 欢迎你访问我的个人站点 poycode.cn ', 'plain', 'utf-8')
message.attach(text)
## 6.2 超文本内容
# 添加html内容
content = """
<h2>陆理手记</h2>
<p>来自poycode.cn</p>
<p>感谢你关注我的公众号</p>
<img src='https://static.poycode.cn/wp-content/uploads/2023/06/20230602225540172.jpg'> <center>陆理手记公众号二维码</center>
<a href='https://www.poycode.cn'>陆理手记-个人博客</a>
"""
htmltext = MIMEText(content, 'html', 'utf-8')
message.attach(htmltext)
# 7.添加附件
attachment = MIMEText(open('poycode.txt', 'rb').read(), 'base64', 'utf-8')
attachment["Content-Disposition"] = 'attachment; filename="poycode.txt"'
message.attach(attachment)
# 发送邮件
server.sendmail(mail_sender, receiver_email, message.as_string())
server.quit()
print("Email sent successfully.")

邮件收到了!很快啊! Python基础教程:使用smtplib发送邮件

6.总结

上一篇教程:Python基础教程:requests模块发送http请求 Python中的smtplib模块可用于发送电子邮件,它提供了一种方便易用的方式来处理邮件。在教程中,通过使用email模块,使得我们可以发送更为复杂的邮件。通过Python发送邮件与其它功能,如定时任务、告警等功能相结合,可以帮助我们更好地处理日常工作。希望这篇教程能够帮助到您!以上的步骤应用于Python邮件发送的基本过程,您可以根据自己的需要对代码进行修改和改进。