Python 发送邮件方法总结

Python 发送邮件是一项非常常用的操作,本文将对 Python 发送邮件的方法进行详细、全面的介绍,包括邮件的基本原理、Python 发送邮件的三种方法以及常见错误及解决方案。

邮件的基本原理

在介绍 Python 发送邮件的方法前,我们需要了解邮件发送的基本过程和原理。邮件发送的过程可以简单归纳为以下几个步骤:

  1. 用户通过邮件客户端编写邮件,并提交邮件到邮件服务器;
  2. 邮件服务器对邮件进行验证、处理和转发;
  3. 如果目标邮件地址是本地用户,则直接交给本地邮箱;
  4. 如果目标邮件地址不是本地用户,则通过 SMTP 协议将邮件发送到目标邮件服务器;
  5. 目标邮件服务器接收邮件,并将邮件投递到目标用户的邮箱。

在发送邮件的过程中,SMTP(Simple Mail Transfer Protocol) 是一个非常重要的协议。它定义了邮件在网络上传输的标准,主要有以下几个重要步骤:

  1. 连接到目标邮箱服务器;
  2. 发送 HELO 命令,表示开始与目标服务器的通信;
  3. 发送 AUTH 命令,进行认证;
  4. 发送 MAIL FROM 命令,表示发件人地址;
  5. 发送 RCPT TO 命令,表示收件人地址;
  6. 发送 DATA 命令,开始发送邮件内容;
  7. 发送 . 命令,表示邮件发送完毕。

Python 发送邮件的三种方法

Python 发送邮件有多种方法,本文将重点介绍下面三种:

  1. 使用 Python 的 smtplib 模块;
  2. 使用 Python 的 email 模块;
  3. 使用 Python 的 MIMEText、MIMEMultipart 和 MIMEImage 类库。

1. 使用 Python 的 smtplib 模块

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

# 邮件服务器地址和端口号
mail_host = "smtp.xxx.com"
mail_port = 587

# 发件人信息
mail_user = "xxx@xxx.com"
mail_pass = "xxx"

# 收件人信息
to_mail = ["xxx1@xxx.com", "xxx2@xxx.com"]

# 邮件内容
mail_content = """
<p>这是一封测试邮件。</p>
<p>Python 邮件发送测试...</p>
"""

# 构造邮件
msg = MIMEText(mail_content,'html','utf-8')
msg['From'] = "{}".format(mail_user)
msg['To'] = ",".join(to_mail)
msg['Subject'] = Header("Python SMTP 发送邮件测试", 'utf-8').encode()

# 发送邮件
try:
    smtpObj = smtplib.SMTP(mail_host, mail_port)
    smtpObj.login(mail_user,mail_pass)
    smtpObj.sendmail(mail_user, to_mail, msg.as_string())
    print("邮件发送成功")
except smtplib.SMTPException as e:
    print("Error: 无法发送邮件")
    print(e)

上面的代码通过 Python 的 smtplib 模块完成邮件发送的任务。其中,邮件的内容使用 MIMEText 类型构建,邮件的收件人可以是一个 list 类型的数组,邮件的主题使用 Header 进行编码。

2. 使用 Python 的 email 模块

import smtplib
import os
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header

# 邮件服务器地址和端口号
mail_host = "smtp.xxx.com"
mail_port = 25

# 发件人信息
mail_user = "xxx@xxx.com"
mail_pass = "xxx"

# 收件人信息
to_mail = ["xxx1@xxx.com", "xxx2@xxx.com"]

# 邮件内容
mail_content = """
<p>这是一封测试邮件。</p>
<p>Python 邮件发送测试...</p>
"""

# 构造邮件正文
msg_text = MIMEText(mail_content, 'html', 'utf-8')

# 构造邮件附件
base_path = 'C:\\Users\\xxx\\Desktop\\Test'
filename = 'test.docx'
file_path = os.path.join(base_path, filename)

msg_app = MIMEMultipart()
attachment = MIMEApplication(open(file_path, 'rb').read())
attachment.add_header('Content-Disposition', 'attachment', filename=filename)
msg_app.attach(attachment)
msg_text = MIMEText(mail_content, 'html', 'utf-8')
msg_app.attach(msg_text)

# 构造邮件标题,发件人、收件人信息
msg_app['Subject'] = Header('Python邮件发送测试', 'utf-8')
msg_app['From'] = Header(mail_user)
msg_app['To'] = ','.join(to_mail)

# 发送邮件
try:
    smtp_obj = smtplib.SMTP(mail_host, mail_port)
    smtp_obj.login(mail_user, mail_pass)
    smtp_obj.sendmail(mail_user, to_mail, msg_app.as_string())
    print('邮件发送成功')

except smtplib.SMTPException as e:
    print('Error: 无法发送邮件')
    print(e)

上面的代码通过 Python 的 email 模块完成邮件发送任务。其中,邮件正文和邮件附件都是使用 MIMEMultipart 类型构建,邮件的收件人可以是一个 list 类型的数组,邮件的主题和发件人信息通过 Header 进行编码。该示例中还附带了一个附件,可以非常方便地将本地文件添加为附件发送。

3. 使用 Python 的 MIMEText、MIMEMultipart 和 MIMEImage 类库



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

# 邮件服务器地址和端口号
mail_host = "smtp.xxx.com"
mail_port = 587

# 发件人信息
mail_user = "xxx@xxx.com"
mail_pass = "xxx"

# 收件人信息
to_mail = ["xxx1@xxx.com","xxx2@xxx.com"]

# 邮件内容
mail_content = """
<p>这是一封测试邮件。</p>
<p>Python 邮件发送测试...</p>
<p><img src="cid:image1"></p>
"""

# 构造邮件
msg = MIMEMultipart()
msg['From'] = "{}".format(mail_user)
msg['To'] = ",".join(to_mail)
msg['Subject'] = Header("Python MIME 发送邮件测试", 'utf-8').encode()

# 构造邮件内容
text_content = MIMEText(mail_content,'html','utf-8')
msg.attach(text_content)

# 构造邮件图片
image_path = 'C:\\Users\\xxx\\Desktop\\Test\\test.jpg'
with open(image_path, 'rb') as f:
    image_data = f.read()
image = MIMEImage(image_data)
image.add_header('Content-ID', '<image1>')
msg.attach(image)

# 发送邮件
try:
    smtpObj = smtplib.SMTP(mail_host, mail_port)
    smtpObj.login(mail_user,mail_pass)
    smtpObj.sendmail(mail_user, to_mail, msg.as_string())
    print("邮件发送成功")
except smtplib.SMTPException as e:
    print("Error: 无法发送邮件")
    print(e)

上面的代码使用 Python 的 MIMEText、MIMEMultipart 和 MIMEImage 类库完成邮件发送。其中,邮件内容使用 MIMEText 类型构建,邮件图片使用 MIMEImage 类型构建,并使用 Content-ID 设置图片 ID,MIMEMultipart 类型可以同时包含文本和图片等多种内容。

常见错误及解决方案

在 Python 发送邮件的过程中,可能会遇到一些常见的错误。下面列出其中三个可能出现的错误及解决方案:

  1. SMTPEmptyResponse;
    解决方案:检查邮箱用户名、密码以及端口等信息是否填写正确。

  2. SMTPAuthenticationError;
    解决方案:检查邮箱用户名和密码是否填写正确。

  3. SMTPDataError;
    解决方案:检查邮件内容是否符合标准的邮件格式,例如是否添加了发件人、收件人、主题等必要项。

以上就是 Python 发送邮件的方法总结,希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 发送邮件方法总结 - Python技术站

(0)
上一篇 2023年6月5日
下一篇 2023年6月5日

相关文章

  • Python 函数返回符(return)详解

    在 Python 中,return 语句用于从函数中返回一个值。当函数调用一个 return 语句时,函数的执行将停止,并将一个值返回给函数调用者。在函数中使用 return 语句可以返回任何类型的数据,包括数字,字符串,列表,元组和字典等。 使用 return 语句时,我们可以选择是否返回值。如果函数没有 return 语句,函数将返回 None 值。No…

    2023年2月20日
    00
  • python requests包的request()函数中的参数-params和data的区别介绍

    在Python中,requests包是一个常用的HTTP客户端库,可以用于发送HTTP请求和处理HTTP响应。在requests包中,request()函数是最常用的函数之一,可以用于发送HTTP请求。request()函数有多个参数,其中包括params和data参数。以下是详细讲解requests包的request()函数中的参数params和data的…

    python 2023年5月15日
    00
  • 简单实现Python爬取网络图片

    下面是“简单实现Python爬取网络图片”的完整攻略: 准备工作 首先需要安装好Python,并在命令行中用以下命令安装好所需的第三方库: pip install requests # 用于发送HTTP请求 pip install beautifulsoup4 # 用于解析HTML文档 步骤 1. 获取要爬取的页面 爬取网络图片的第一步是获取要爬取的页面,可…

    python 2023年5月14日
    00
  • 硬核 Redis 高频面试题解析

    硬核Redis高频面试题解析 1. Redis的持久化方式有哪些? Redis支持两种持久化方式: RDB持久化 将Redis在内存中的数据以快照(snapshot)的形式保存到硬盘中的RDB文件中。RDB持久化方式主要有两个优点:一是RDB文件保存了Redis在某个时间点上的数据,因此可以用于备份和恢复;二是RDB文件经过压缩,所占用的空间比AOF持久化方…

    python 2023年5月13日
    00
  • 手把手教你Windows如何在cmd中切换python版本

    请跟我一步步来! 1. 首先确定Python版本 在cmd中输入python –version(注意是两个短横线),可以查看当前使用的Python版本。假设当前Python版本为Python 3.8.5。 2. 查看已安装的所有Python版本 打开cmd,并在命令行输入以下内容: where python 这个命令将列出在计算机上安装的所有Python版…

    python 2023年5月18日
    00
  • Python取读csv文件做dbscan分析

    下面是Python取读csv文件做dbscan分析的完整攻略。 1. 确定分析目的 在进行数据分析前,我们需要确定分析的目的和问题,以确保分析结果的准确性和实用性。在本文中,我们假设已经明确了分析目的为对csv文件中的数据进行聚类,找出其中相似的数据点,以便进一步的分析和应用。 2. 准备工作 在进行数据分析前,我们需要进行一些必要的准备工作,主要包括以下几…

    python 2023年6月3日
    00
  • 推荐五个常用的python图像处理库

    下面是推荐五个常用的Python图像处理库的攻略。 1. Pillow Pillow是Python Imaging Library (PIL) 的一个克隆版本,可以很方便的处理一些图像操作,比如加载图像、调整大小、旋转、裁剪、增加滤镜等等。下面是一个示例代码演示如何使用Pillow进行图像旋转和缩放操作: from PIL import Image # 读取…

    python 2023年5月18日
    00
  • Python使用xlrd和xlwt实现自动化操作Excel

    下面是Python使用xlrd和xlwt实现自动化操作Excel的完整实例教程。 前言 Excel 是一个常用的办公软件,但是 Excel 文件中内容往往比较繁杂,如果手动去处理太过繁琐。Python 的 xlrd 和 xlwt 库可以轻松实现对 Excel 文件的自动化操作。 xlrd 和 xlwt 简介 xlrd:一个用来提取 Excel 数据的库,可以…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部