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

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

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

来源:千锋教育
发布时间:2022-09-27 17:03:00
分享

  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

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

相关推荐

  • minionginx代理怎么操作 minionginx是一个基于Nginx的高性能代理服务器,它可以帮助用户实现反向代理、负载均衡、缓存加速等功能。下面我将详细介绍minionginx代理的操作步骤。1. 安装minionginx:
  • midjourney指令怎么操作 midjourney指令是一个用于控制机器人行进中途停止的指令。在操作midjourney指令之前,您需要确保已经连接到机器人并且具备相应的控制权限。下面是操作midjourney指令的步骤:1.
  • matlab绘制三维曲线怎么操作 要在MATLAB中绘制三维曲线,可以使用plot3函数。plot3函数可以在三维坐标系中绘制连续的曲线。下面是绘制三维曲线的基本操作步骤:1. 创建数据:需要定义曲线上的点的坐标。可以通过生成x、
  • linux端口号怎么操作 Linux端口号的操作可以通过多种方式实现,包括查看端口号、打开/关闭端口号以及修改端口号等。下面将详细介绍这些操作方法。1. 查看端口号: 在Linux系统中,可以使用以下命令来查看当前正在
  • linuxtmp怎么操作 Linux中的/tmp目录是一个临时目录,用于存储临时文件和临时数据。在Linux系统中,/tmp目录通常被设置为可读写和执行的权限,以便所有用户都可以在其中创建和访问临时文件。要操作/tmp目录,
  • kl散度怎么操作 KL散度(Kullback-Leibler divergence)是一种用于衡量两个概率分布之间差异的指标。它可以帮助我们理解两个概率分布之间的相似性或差异性,并在信息论、统计学和机器学习等领域中得到