Python利用smtplib实现邮件发送

 更新时间:2023年06月29日 09:26:02   作者:陆理手记  
在当今数字时代,电子邮件已成为我们生活和工作中不可或缺的一部分,本篇文章将为你讲解如何在Python发送邮件,并为你提供实现的多种方式,希望对大家有所帮助

1.引言

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

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

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邮箱为例)。

这些前置工作做好后,让我们开始进入编程实操吧!

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端口。 

4.3 建立连接并登录

使用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.")

成功收到邮件:

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.")

邮件收到了!很快啊!

6.总结

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

以上就是Python利用smtplib实现邮件发送的详细内容,更多关于Python smtplib发送邮件的资料请关注脚本之家其它相关文章!

相关文章

  • python json.dumps中文乱码问题解决

    python json.dumps中文乱码问题解决

    这篇文章主要介绍了如何解决python中中文乱码问题和json.dumps中文乱码问题,需要的朋友可以参考下
    2021-05-05
  • 使用python模拟高斯分布例子

    使用python模拟高斯分布例子

    今天小编就为大家分享一篇使用python模拟高斯分布例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python中函数带括号和不带括号的区别及说明

    Python中函数带括号和不带括号的区别及说明

    这篇文章主要介绍了Python中函数带括号和不带括号的区别及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 学生如何注册Pycharm专业版以及pycharm的安装

    学生如何注册Pycharm专业版以及pycharm的安装

    这篇文章主要介绍了学生如何注册Pycharm专业版以及pycharm的安装,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 将图片文件嵌入到wxpython代码中的实现方法

    将图片文件嵌入到wxpython代码中的实现方法

    前面一篇文章中提到的那个程序,GUI中包含了一张图片。在编译成exe文件发布时,无法直接生成一个单独的exe文件。因此需要直接把图片写入到代码中
    2014-08-08
  • Python中的赋值、浅拷贝、深拷贝介绍

    Python中的赋值、浅拷贝、深拷贝介绍

    这篇文章主要介绍了Python中的赋值、浅拷贝、深拷贝介绍,Python中也分为简单赋值、浅拷贝、深拷贝这几种“拷贝”方式,需要的朋友可以参考下
    2015-03-03
  • Python实现针对中文排序的方法

    Python实现针对中文排序的方法

    这篇文章主要介绍了Python实现针对中文排序的方法,结合实例形式较为详细的分析了Python针对中文进行排序操作出现的问题与相关处理技巧,需要的朋友可以参考下
    2017-05-05
  • Sanic框架Cookies操作示例

    Sanic框架Cookies操作示例

    这篇文章主要介绍了Sanic框架Cookies操作,结合实例形式分析了Sanic框架cookie读取、写入及删除等简单操作技巧,需要的朋友可以参考下
    2018-07-07
  • 详解Ubuntu环境下部署Django+uwsgi+nginx总结

    详解Ubuntu环境下部署Django+uwsgi+nginx总结

    这篇文章主要介绍了Ubuntu环境下部署Django+uwsgi+nginx总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • 详解Python Qt的窗体开发的基本操作

    详解Python Qt的窗体开发的基本操作

    这篇文章主要介绍了详解Python Qt的窗体开发的基本操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07

最新评论