千锋教育-做有情怀、有良心、有品质的职业教育机构

当前位置:首页  >  关于学院  >  技术干货  >  Python技术干货  >  正文

利用Python实现邮件发送,方法详解!

来源:千锋教育
作者:qyf
关键词: 北京 大连
2022-09-27
分享

  SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。python的smtplib提供了一种很方便便的途径发送电子邮件。它对smtp协议进行行了了简单的封装。

  1. 准备用来发送邮件的邮箱账号

  准备好邮箱账号和邮箱登录授权码。不同类型邮箱获取授权码的方式大同小异,这儿以QQ邮箱为例演示获取授权码步骤:

  第一步:用网页登录QQ邮箱,找到帮助中心

image

  第二步:在帮助中心中选择"客户端设置"中的第2个问题:

截屏2022-09-26 上午11.42.28

  然后按照对应的要求操作,得到授权码并且保存。

  2. 发送邮件的基本步骤

  代码发送邮件的步骤,和人工发送邮件步骤基本一致:登录邮箱 -> 准备邮件内容 -> 发送邮件。

  2.1 登录邮箱

  import smtplib

  1. 连接邮箱服务器

  连接对象 = smtplib.SMTP_SSL(服务器地址, 邮箱服务端口)

  - 服务器地址:smtp.163.com(163邮箱)、smtp.qq.com(qq邮箱) - 邮箱服务端口:465或者25

  2. 登录邮箱 连接对象.login(邮箱账号, 授权码)

  2.2 准备数据

  数据指的需要发送的内容。邮件内容的构建需要涉及到另外一个库email,它可以⽤来构建邮件主题以及各种形式的邮件内容(包括文字内容、图片内容、html内容、附件)等,这⼉先简单说一下邮件主题和⽂本内容,其他形式的内容在后⾯面邮件内容部分详细讲解。

  from email.mime.multipart import MIMEMultipart

  from email.mime.text import MIMEText

  from email.header import Header

  1. 创建邮件对象

  邮件对象 = MIMEMultipart()

  2. 设置邮件主题

  主题对象 = Header(邮件标题, 编码方式).encode()

  邮件对象['Subject'] = 主题对象

  3.设置邮件发送者

  邮件对象['From'] = '用户名 <用户名>'

  4.设置邮件接受者

  邮件对象['To'] = '收件⼈1;收件⼈2;收件人3...'

  5. 添加文字内容

  文字内容对象 = MIMEText(内容, 类型, 编码方式)

  - 内容:就是文字字符串

  - 类型:plain(简单的⽂字内容)、html(超文本) 邮件对象.attach(文字对象)

  2.3 发送邮件

  连接对象.sendmail(发件⼈, 收件人, 邮件对象.as_string())

  连接对象.quit()

  3.各种类型邮件发送实例

  3.1普通文字内容邮件

  这类邮件的邮件正文只有普通文字信息,没有超文本也没有图片,并且没有附件:

  import smtplib

  from email.mime.multipart import MIMEMultipart

  from email.mime.text import MIMEText

  from email.header import Header

  # 1. 连接邮箱服务器

  con = smtplib.SMTP_SSL('smtp.163.com', 465)

  # 2. 登录邮箱

  con.login('XXXX@163.com', 'XXXXX')

  # 2. 准备数据

  # 创建邮件对象

  msg = MIMEMultipart()

  # 设置邮件主题

  subject = Header('找回密码', 'utf-8').encode() msg['Subject'] = subject

  # 设置邮件发送者

  msg['From'] = 'XXXX@163.com <xxxx@163.com>'

  # 设置邮件接受者

  msg['To'] = '726550822@qq.com'

  # 添加⽂文字内容

  text = MIMEText('忘记密码需要找回密码', 'plain', 'utf-8')

  msg.attach(text)

  # 3.发送邮件

  con.sendmail('xxxx@163.com', '726550822@qq.com', msg.as_string())

  con.quit()

截屏2022-09-26 上午11.44.29

  3.2 超文本文件内容

  正文更加丰富和有趣的一种邮件,生活中我们接收到的来自各大平台发送的邮件都是这类邮件,核心代码格式如下:

  from email.mime.text import MIMEText

  html⽂本对象 = MIMEText(html内容字符串, 'html', 编码方式) 邮件对象.attach(html⽂本对象)

  具体代码:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header
con = smtplib.SMTP_SSL('smtp.163.com', 465)
con.login('xxxx@163.com', 'xxxxxx')
msg = MIMEMultipart()
subject = Header('找回密码', 'utf-8').encode()
msg['Subject'] = subject
msg['From'] = 'xxxx@163.com <xxxx@163.com>'
msg['To'] = '726550822@qq.com'

# 添加html内容
content = """
<h2>我是正⽂中的标题</h2>
<p>邮件正文描述性文字1</p>
<p>邮件正⽂描述性文字2</p>
<img src='https://www.baidu.com/img/bd_logo1.png'> <center>百度图片</center>
<a href='https://www.baidu.com'>百度⼀下</a>
"""
html = MIMEText(content, 'html', 'utf-8')
msg.attach(html)
# 发送邮件
con.sendmail('xxxx@163.com', '726550822@qq.com', msg.as_string())
con.quit()

  3.3 发送附件

  邮件内容除了正文内容,有的时候还需要将各种文件以附件的形式单独发送,发送附件的核心代码如下:

  from email.mime.text import MIMEText

  ⽂文件对象 = MIMEText(⽂件二进制数据, 'base64', 编码⽅式)

  文件对象["Content-Disposition"] = 'attachment; filename="⽂件名"'

  邮件对象.attach(⽂件对象)

  具体代码:

  import smtplib

  from email.mime.multipart import MIMEMultipart

  from email.mime.text import MIMEText

  from email.mime.image import MIMEImage

  from email.header import Header

  from email.mime.message import MIMEMessage from copy import deepcopy

  con = smtplib.SMTP_SSL('smtp.163.com', 465)

  con.login('xxxx@163.com', 'xxxxxx')

  msg = MIMEMultipart()

  subject = Header('⽂文件附件发送', 'utf-8').encode() msg['Subject'] = subject

  msg['From'] = 'xxxx@163.com <xxxx@163.com>'

  msg['To'] = '726550822@qq.com'

  # 添加⽂文件附件

  file1 = MIMEText(open('files/test.txt', 'rb').read(), 'base64', 'utf-8')

  file1["Content-Disposition"] = 'attachment; filename="test.txt"'

  msg.attach(file1)

  file2 = MIMEText(open('files/pyecharts的使⽤用.pdf', 'rb').read(), 'base64', 'utf-8')

  file2["Content-Disposition"] = 'attachment; filename="test.pdf"'

  msg.attach(file2)

  # 发送邮件

  con.sendmail('xxxx@163.com', '726550822@qq.com', msg.as_string())

  con.quit()

截屏2022-09-26 上午11.46.57

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

相关推荐

  • 利用Python实现邮件发送,方法详解! SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。python的smtplib提供了一种很方便便的途径发送电子邮件。它对smtp协议进行行了了简单的封装。
  • 如何利用Python开发App实战?附详细开发过程 利用Python开发app需要用到Python的一个模块–kivy,kivy是一个开源的,跨平台的Python开发框架,用于开发使用创新的应用程序。简而言之,这是一个Python桌面程序开发框架(类似wxpython等模块),强大的是kivy支持linux、mac、windows、android、ios平台,这也是为什么开发app需要用到这个模块。
  • 年度最强的编程语言来了,Python蝉联冠军之位! 这一年,TIOBE、Stack Overflow等各大语言榜单,都被Python霸占了,可谓一骑绝尘、气势如虹。最近IEEE Spectrum发布的第九届年度顶级编程语言榜单中,Python依旧稳定发挥,呈现横扫之势。不过本次年度榜单中,也出现了一个比较令人意外的结果,那就是工作中最吃香的语言竟然是SQL。
  • Python培训教程分享:重定向命令如何使用?代码怎么实现? 本期Python培训教程分享:重定向命令如何使用?代码怎么实现?重定向称为输出重定向,把在终端执行命令的结果保存到目标文件,只要在终端能显示信息的命令都可以使用重定向。
  • Python培训分享:常用的聚合函数有哪些?怎么用? 本期Python培训分享:常用的聚合函数有哪些?怎么用?很多人都对这方面不是很了解,下面小编就为大家详细介绍一下,聚合函数可以对一组值执行计算并返回单一的值,多用于统计和计算分组数据。在实际的操作过程中国可以应用于查询语句的SELECT中或者HAVING子句中。 聚合函数实现了对数据表里面的数据进行计算和、平均值、最大值、最小值、统计总数等。
  • Python培训教程分享:十款超实用的Python开发工具! 不管是学习Python技术的同学还是正在Python岗位工作的小伙伴,如果想提高自己的学习成功和工作效率,那么一个好的开发辅助工具是非常重要的,以下小编为大家介绍的Python培训教程:十款超实用的Python开发工具,希望能够帮助到大家。