当前位置:   article > 正文

Python通过smtplib发送邮件(2020最新最全版)_python 发送邮件库 忽略证书无效

python 发送邮件库 忽略证书无效

smtplib 邮件自动发送

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。

python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。

准备需要发送邮件的邮箱账号

如果是163邮箱只需要准备账号和密码;如果是QQ邮箱,需要准备账号和授权码(密码不好用),可以去QQ邮箱官网的帮助中心去查看授权码的获取方式。

发送邮件的基本步骤
  1. 登录邮箱

    import smtplib
    1. 连接邮箱服务器
    连接对象 = smtplip.SMTP_SSL(服务器地址, 邮箱服务端口)		
    
    - 服务器地址:smtp.163.com(163邮箱)、smtp.qq.com(qq邮箱)
    - 邮箱服务端口:465或者25
    
    2. 登录邮箱
    连接对象.login(邮箱账号, 密码)
    
    - 密码:如果是163邮箱直接使用邮箱的登录密码,如果是qq邮箱就使用授权码
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  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(文字对象)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
  3. 发送邮件

    连接对象.sendmail(发件人, 收件人, 邮件对象.as_string())
    连接对象.quit()
    
    • 1
    • 2

示例如下:

"""__author__=余婷"""
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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

在这里插入图片描述

特殊内容的发送
1. HTML邮件的构建

HTML格式的邮件本质还是文本格式的邮件,所有文件的构建方式和普通文本文件的构建方式差不多:

from email.mime.text import MIMEText
html文本对象 = MIMEText(html内容字符串, 'html', 编码方式)
邮件对象.attach(html文本对象)
  • 1
  • 2
  • 3

实例如下:

"""__author__=余婷"""
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', 'xxxxxx')

# 2. 准备数据
# 创建邮件对象
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)

# 3.发送邮件
con.sendmail('xxxx@163.com', '726550822@qq.com', msg.as_string())
con.quit()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

在这里插入图片描述

2.发送图片
  1. 以附件的形式发送本地图片
from email.mime.image import MIMEImage
图片对象 = MIMEImage(图片二进制数据)
图片对象["Content-Disposition"] = 'attachment; filename="图片名"'
邮件对象.attach(图片对象)
- 图片二进制数据:可以通过文件操作去读取
  • 1
  • 2
  • 3
  • 4
  • 5

示例如下:

"""__author__=余婷"""
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

# 1. 连接邮箱服务器
con = smtplib.SMTP_SSL('smtp.163.com', 465)

# 2. 登录邮箱
con.login('xxxx@163.com', 'xxxxxx')

# 2. 准备数据
# 创建邮件对象
msg = MIMEMultipart()

# 设置邮件主题
subject = Header('图片发送', 'utf-8').encode()
msg['Subject'] = subject

# 设置邮件发送者
msg['From'] = 'xxxx@163.com <xxxx@163.com>'

# 设置邮件接受者
msg['To'] = '726550822@qq.com'

# 添加图片附件
image_data = open('files/image.jpg', 'rb').read()
image = MIMEImage(image_data)
image["Content-Disposition"] = 'attachment; filename="image.jpg"'	# 设置图片标题
msg.attach(image)

# 3.发送邮件
con.sendmail('xxxx@163.com', '726550822@qq.com', msg.as_string())
con.quit()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

在这里插入图片描述

  1. 以邮件内容的形式发送图片

    如果想要叫本地图片作为邮件中的内容,需要将图片以<img src='cid:图片id'/>的形式关联到html文本中

    from email.mime.image import MIMEImage
    图片对象 = MIMEImage(图片二进制数据)
    image.add_header('Content-ID', '<自定义图片id>')
    邮件对象.attach(图片对象)
    
    • 1
    • 2
    • 3
    • 4

    示例如下:

    """__author__=余婷"""
    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 copy import deepcopy
    
    # 1. 连接邮箱服务器
    con = smtplib.SMTP_SSL('smtp.163.com', 465)
    
    # 2. 登录邮箱
    con.login('xxxx@163.com', 'xxxxxx')
    
    # 2. 准备数据
    # 创建邮件对象
    msg = MIMEMultipart()
    
    # 设置邮件主题
    subject = Header('图片发送', 'utf-8').encode()
    msg['Subject'] = subject
    
    # 设置邮件发送者
    msg['From'] = 'xxxx@163.com <xxxx@163.com>'
    
    # 设置邮件接受者
    msg['To'] = '726550822@qq.com'
    
    # 添加文字内容
    content = """
    <h2>我是正文中的标题</h2>
    <p>邮件正文描述性文字1</p>
    <p>邮件正文描述性文字2</p>
    <img src='cid:image1'>
    <center>图片显示</center>
    <a href='https://www.baidu.com'>百度一下</a>
    """
    html = MIMEText(content, 'html', 'utf-8')
    msg.attach(html)
    
    # 添加图片附件
    image_data = open('files/image.jpg', 'rb').read()
    image = MIMEImage(image_data)
    image.add_header('Content-ID', '<image1>')	
    msg.attach(image)
    
    # 3.发送邮件
    con.sendmail('xxxx@163.com', '726550822@qq.com', msg.as_string())
    con.quit()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

在这里插入图片描述

3. 发送附件
from email.mime.text import MIMEText
文件对象 = MIMEText(文件二进制数据, 'base64', 编码方式)
文件对象["Content-Disposition"] = 'attachment; filename="文件名"'
邮件对象.attach(文件对象)
  • 1
  • 2
  • 3
  • 4

示例如下:

"""__author__=余婷"""
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

# 1. 连接邮箱服务器
con = smtplib.SMTP_SSL('smtp.163.com', 465)

# 2. 登录邮箱
con.login('xxxx@163.com', 'xxxxxx')

# 2. 准备数据
# 创建邮件对象
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)


# 3.发送邮件
con.sendmail('xxxx@163.com', '726550822@qq.com', msg.as_string())
con.quit()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

在这里插入图片描述

~~欢迎大家关注我的b站视频,上面全是我自己录的一些python好玩儿的模块的授课视频,其中包括这篇博客内容的授课视频:https://space.bilibili.com/49719176

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/701902
推荐阅读
相关标签
  

闽ICP备14008679号