利用Python SMTP发送电子邮件

一、SMTP协议简介

SMTP是简单邮件传输协议(Simple Mail Transfer Protocol)的缩写,它是一种用于电子邮件传输的标准协议。SMTP服务器用于将邮件从发件人传递到收件人的服务器。邮件客户端通过SMTP服务器发送电子邮件,而收件人通过POP3或IMAP服务器接收邮件。

SMTP服务器使用TCP协议的25号端口。当需要发送电子邮件时,邮件客户端通过SMTP开始会话,使用SMTP命令来进行身份验证和邮件的发送。

Python的smtplib模块是一个专门用于邮件发送的模块,可以在Python中实现SMTP协议的功能。

二、SMTP邮件发送流程

SMTP邮件发送流程包括以下几个步骤:

  1. 连接SMTP服务器
  2. 发送HELO命令
  3. 发送AUTH命令进行身份验证(可选)
  4. 发送MAIL FROM命令指定发件人
  5. 发送RCPT TO命令指定收件人
  6. 发送DATA命令开始邮件正文传输
  7. 传输邮件正文
  8. 发送QUIT命令关闭连接

其中,第3步使用AUTH PLAIN命令进行身份验证,需要使用Base64编码的用户名和密码。

三、Python SMTP邮件发送示例代码

import smtplib
from email.mime.text import MIMEText
from email.header import Header

# 发件人邮箱
sender = 'example@163.com'
# 收件人邮箱
receiver = 'example@qq.com'
# SMTP服务器地址
smtp_server = 'smtp.163.com'
# 发件人邮箱的用户名和密码
username = 'example@163.com'
password = 'password'

# 邮件正文
message = MIMEText('Hello, world!', 'plain', 'utf-8')
message['From'] = Header('example@163.com', 'utf-8')
message['To'] = Header('example@qq.com', 'utf-8')
message['Subject'] = Header('Python SMTP邮件发送示例', 'utf-8')

# 连接SMTP服务器
smtp_obj = smtplib.SMTP(smtp_server, 25)
# 发送HELO命令
smtp_obj.ehlo()
# 开始TLS加密(可选)
smtp_obj.starttls()
# 发送AUTH命令进行身份验证
smtp_obj.login(username, password)
# 发送MAIL FROM命令指定发件人
smtp_obj.sendmail(sender, [receiver], message.as_string())
# 发送QUIT命令关闭连接
smtp_obj.quit()

四、使用SSL加密连接SMTP服务器

SMTP服务器也支持使用SSL加密的连接,以保护邮箱账号信息和邮件内容的安全。在Python中,可以使用smtplib.SMTP_SSL()方法来创建SSL加密的SMTP连接。

以下是使用SSL加密的SMTP邮件发送示例代码:

import smtplib
from email.mime.text import MIMEText
from email.header import Header

# 发件人邮箱
sender = 'example@163.com'
# 收件人邮箱
receiver = 'example@qq.com'
# SMTP SSL服务器地址
smtp_server = 'smtp.163.com'
# 发件人邮箱的用户名和密码
username = 'example@163.com'
password = 'password'

# 邮件正文
message = MIMEText('Hello, world!', 'plain', 'utf-8')
message['From'] = Header('example@163.com', 'utf-8')
message['To'] = Header('example@qq.com', 'utf-8')
message['Subject'] = Header('Python SMTP邮件发送示例', 'utf-8')

# 连接SMTP SSL服务器
smtp_obj = smtplib.SMTP_SSL(smtp_server, 465)
# 发送HELO命令
smtp_obj.ehlo()
# 发送AUTH命令进行身份验证
smtp_obj.login(username, password)
# 发送MAIL FROM命令指定发件人
smtp_obj.sendmail(sender, [receiver], message.as_string())
# 发送QUIT命令关闭连接
smtp_obj.quit()

五、总结

本文介绍了SMTP协议的基本原理和Python中使用smtplib模块进行邮件发送的方法,包括普通SMTP连接和使用SSL加密的连接。通过代码示例,读者可以更加深入地理解SMTP协议,快速上手Python的邮件发送功能。

原创文章,作者:SWVDV,如若转载,请注明出处:https://www.506064.com/n/315715.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
SWVDVSWVDV
上一篇 2025-01-09 12:14
下一篇 2025-01-09 12:14

相关推荐

  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • Python字典去重复工具

    使用Python语言编写字典去重复工具,可帮助用户快速去重复。 一、字典去重复工具的需求 在使用Python编写程序时,我们经常需要处理数据文件,其中包含了大量的重复数据。为了方便…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29

发表回复

登录后才能评论