Python 发送SMTP邮件的简单教程

yizhihongxing

下面是“Python发送SMTP邮件的简单教程”的完整攻略:

1. SMTP协议介绍

SMTP(Simple Mail Transfer Protocol)是一种用于发送邮件的协议,它是由RFC 821规范定义的。在Python中,我们可以借助内置的smtplib模块来发送邮件。

2. 准备工作

在使用Python发送邮件之前,我们需要先进行以下准备工作:

  1. 获得邮件服务器的地址和端口号。
  2. 获得发件人的登录用户名和密码。
  3. 获取收信人的邮箱地址和邮件主题、正文等信息。

3. Python发送SMTP邮件的代码示例

在Python中,发送SMTP邮件的代码示例如下所示:

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

# 第三方 SMTP 服务
mail_host = "smtp.xxx.com"  # SMTP服务器
mail_user = "user"  # 用户名
mail_pass = "password"  # 密码

sender = 'sender@xxx.com'  # 发件人邮箱
receivers = ['receiver@xxx.com']  # 收件人邮箱列表

message = MIMEText('Python SMTP 邮件发送测试', 'plain', 'utf-8')
message['From'] = Header("发件人姓名", 'utf-8')  # 发件人姓名
message['To'] = Header("收件人姓名", 'utf-8')  # 收件人姓名
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')

try:
    smtpObj = smtplib.SMTP()
    smtpObj.connect(mail_host, 25)  # 连接到服务器
    smtpObj.login(mail_user, mail_pass)  # 登录到服务器
    smtpObj.sendmail(sender, receivers, message.as_string())  # 发送邮件
    print("邮件发送成功")
except smtplib.SMTPException as e:
    print("Error: 无法发送邮件", e)

上述代码中,我们首先通过smtplib模块连接到指定的SMTP服务器,然后通过email.mime.textemail.header模块创建邮件内容和邮件头信息,最后通过sendmail()方法发送邮件。

3.1 示例一

下面是一个更加完整的Python发送SMTP邮件的示例,它包含了邮件主题、正文、附件等信息:

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

# 第三方 SMTP 服务
mail_host = "smtp.xxx.com"  # SMTP服务器
mail_user = "user"  # 用户名
mail_pass = "password"  # 密码

sender = 'sender@xxx.com'  # 发件人邮箱
receivers = ['receiver@xxx.com']  # 收件人邮箱列表

message = MIMEMultipart('related')
message['From'] = Header("发件人姓名", 'utf-8')  # 发件人姓名
message['To'] = Header("收件人姓名", 'utf-8')  # 收件人姓名
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')

# 创建邮件内容
text = MIMEText('Python SMTP 邮件发送测试', 'plain', 'utf-8')
message.attach(text)

# 创建邮件附件
filename = 'test.txt'
if os.path.isfile(filename):
    with open(filename, 'rb') as f:
        mime = MIMEApplication(f.read())
        mime.add_header('Content-Disposition', 'attachment', filename=filename)
        message.attach(mime)

try:
    smtpObj = smtplib.SMTP()
    smtpObj.connect(mail_host, 25)  # 连接到服务器
    smtpObj.login(mail_user, mail_pass)  # 登录到服务器
    smtpObj.sendmail(sender, receivers, message.as_string())  # 发送邮件
    print("邮件发送成功")
except smtplib.SMTPException as e:
    print("Error: 无法发送邮件", e)

在上述示例中,我们首先使用email.mime.multipart模块创建一个带有主题、正文和附件的MIMEMultipart对象,然后通过MIMETextMIMEApplication分别创建邮件正文和附件。最后,我们通过attach()方法将正文和附件添加到MIMEMultipart对象中。

3.2 示例二

下面是一个Python发送HTML格式邮件的示例,邮件内容为一个带有图片的HTML页面:

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
import os

# 第三方 SMTP 服务
mail_host = "smtp.xxx.com"  # SMTP服务器
mail_user = "user"  # 用户名
mail_pass = "password"  # 密码

sender = 'sender@xxx.com'  # 发件人邮箱
receivers = ['receiver@xxx.com']  # 收件人邮箱列表

message = MIMEMultipart('related')
message['From'] = Header("发件人姓名", 'utf-8')  # 发件人姓名
message['To'] = Header("收件人姓名", 'utf-8')  # 收件人姓名
subject = 'Python SMTP HTML 邮件测试'
message['Subject'] = Header(subject, 'utf-8')

# 定义HTML页面内容
html_content = """
    <html>
    <head></head>
    <body>
        <h1>Python SMTP发送HTML邮件测试</h1>
        <p><img src="cid:image1"></p>
    </body>
    </html>
"""

# 创建邮件内容
text = MIMEText(html_content, 'html', 'utf-8')
message.attach(text)

# 创建邮件图片
filename = 'test.png'
if os.path.isfile(filename):
    with open(filename, 'rb') as f:
        img = MIMEImage(f.read())
        img.add_header('Content-ID', '<image1>')
        message.attach(img)

try:
    smtpObj = smtplib.SMTP()
    smtpObj.connect(mail_host, 25)  # 连接到服务器
    smtpObj.login(mail_user, mail_pass)  # 登录到服务器
    smtpObj.sendmail(sender, receivers, message.as_string())  # 发送邮件
    print("邮件发送成功")
except smtplib.SMTPException as e:
    print("Error: 无法发送邮件", e)

在上述示例中,我们定义了一个带有图片的HTML页面,并通过email.mime.image模块创建一个图片MIMEImage对象,将其添加到邮件内容中。同时,我们通过Content-ID参数为该图片指定了一个ID,方便在HTML页面中引用。最后,我们将HTML页面实例添加到邮件内容中,以便发送出去。

以上就是Python发送SMTP邮件的简单教程完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 发送SMTP邮件的简单教程 - Python技术站

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

相关文章

  • 详解Python3中的正则表达式的基本用法

    详解Python3中的正则表达式的基本用法 正则表达式是一种用于描述字符串模式的语言,可以用于匹配、查找、替换和割字符串。Python中的re模块提供了正则表达式支持,方便进行字符串的处理。本文将详细讲解Python3中正则表达式的基本用法,包括正则表达式语法、re模块的常用函数以及两个用匹配实例。 正则表达式语法 正则表达式由一些特殊字符普通字符组成,用于…

    python 2023年5月14日
    00
  • 全面分析Python的优点和缺点

    全面分析Python的优点和缺点 优点 简单易学:Python语法简洁清晰,语言结构非常简单,易于学习。 开发效率高:Python拥有丰富的类库和开发工具,可以极大地提高开发效率。 跨平台性好:Python是一款跨平台语言,可以在Windows、Linux、Mac OS等多种操作系统上运行,具有良好的可移植性。 大量第三方库:Python拥有大量的第三方库,…

    python 2023年5月30日
    00
  • python的print输出在控制台并且将输出内容保存为文件(最新推荐)

    要在Python中实现将print输出在控制台并且将输出内容保存为文件,可以按照以下步骤操作: 1. 打开文件 首先,需要使用Python的内置函数open打开一个文件,在这里我们使用文件名为output.txt的文件作为示例。可以使用如下代码: output_file = open("output.txt", "w"…

    python 2023年6月3日
    00
  • 使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)

    请注意,使用Python开发抢购脚本可能违反京东的使用规则,可能会导致账户被封禁或其他不良后果。本文仅作技术研究学习使用,不建议将其用于实际抢购行为。 使用Python开发京东抢购脚本是一种常见的技术研究和学习方法。Python可以使用多种库和工具来实现京东抢购脚本,例如selenium、requests、beautifulsoup等。本文将详细讲解如何使用…

    python 2023年5月15日
    00
  • Pandas将列表(List)转换为数据框(Dataframe)

    当我们需要将Python中的列表(List)转换为数据框(Dataframe)时,可以使用Pandas库提供的函数来实现。Pandas是一个常用的数据处理库,它供了丰富的数据结构和函数,可以方便地进行数据分析和处理。本攻略将详细介绍如何使用Pandas将列表转换为数据框包括使用pd.DataFrame()函数和使用pd.Series()函数的方法。 使用pd…

    python 2023年5月13日
    00
  • Python 居然可以在 Excel 中画画你知道吗

    当然,我非常乐意为您讲解如何在Excel中使用Python画图。接下来是完整的实例教程及示例说明。 准备工作 首先,您需要确保以下工具及环境已安装并配置正确: Python pip pandas openpyxl xlsxwriter Jupyter Notebook 或其他编辑器(例如VS Code、PyCharm等) 如果您尚未安装以上工具或环境,请按照…

    python 2023年5月13日
    00
  • python数组中的 k-diff 数对例题解析

    Python数组中的k-diff数对例题解析 在Python中,经常会遇到需要查找数组中满足某些条件的数对的问题。这类问题可以通过使用哈希表来解决,其中k-diff数对是其中一种常见问题。本文将详细讲解如何使用哈希表解决这类问题。 什么是k-diff数对? k-diff数对指的是:在给定的数组中,两个不同的数的绝对差等于k。绝对差是指两数之差的绝对值,并且这…

    python 2023年6月6日
    00
  • 基于python实现操作redis及消息队列

    基于Python操作Redis及消息队列的完整攻略 1. 什么是Redis Redis是一款基于内存的高性能键值存储数据库,它可以将数据存储在内存中,从而支持非常快速的读写操作。Redis不仅支持诸如字符串、哈希、列表、集合、有序集合等常见的数据类型,还提供了一些特殊的功能,例如发布/订阅、Lua脚本等。它的特点是简单、快速、可靠。 2. Redis的安装及…

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