
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是⼀一组⽤用于由源地址到⽬目的地址传送
邮件的规则,由它来控制信件的中转⽅方式。python的smtplib提供了了⼀一种很⽅方便便的途径发送电⼦子邮件。它对smtp协议进⾏行行了了简单的封装。
准备好邮箱账号和邮箱登录授权码。不同类型邮箱获取授权码的方式大同小异,这儿以QQ邮箱为例演示获取授权码步骤:
第一步:用网页登录QQ邮箱,找到帮助中心

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

然后按照对应的要求操作,得到授权码并且保存。
代码发送邮件的步骤,和人工发送邮件步骤基本一致:登录邮箱  -> 准备邮件内容   ->  发送邮件。
import smtplib 1. 连接邮箱服务器 连接对象 = smtplib.SMTP_SSL(服务器地址, 邮箱服务端口) - 服务器地址:smtp.163.com(163邮箱)、smtp.qq.com(qq邮箱) - 邮箱服务端口:465或者25 2. 登录邮箱 连接对象.login(邮箱账号, 授权码)
数据指的需要发送的内容。邮件内容的构建需要涉及到另外一个库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(文字对象)
连接对象.sendmail(发件⼈, 收件人, 邮件对象.as_string()) 连接对象.quit()
这类邮件的邮件正文只有普通文字信息,没有超文本也没有图片,并且没有附件:
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()
正文更加丰富和有趣的一种邮件,生活中我们接收到的来自各大平台发送的邮件都是这类邮件,核心代码格式如下:
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>
                    <div class="aritcle_card">
                        <a class="aritcle_card_img" href="/ai/patentpal%E4%B8%93%E5%88%A9%E7%94%B3%E8%AF%B7%E5%86%99%E4%BD%9C">
                            <img src="https://img.php.cn/upload/ai_manual/001/246/273/68b6d4855a9ab930.png" alt="PatentPal专利申请写作">
                        </a>
                        <div class="aritcle_card_info">
                            <a href="/ai/patentpal%E4%B8%93%E5%88%A9%E7%94%B3%E8%AF%B7%E5%86%99%E4%BD%9C">PatentPal专利申请写作</a>
                            <p>AI软件来为专利申请自动生成内容</p>
                            <div class="">
                                <img src="/static/images/card_xiazai.png" alt="PatentPal专利申请写作">
                                <span>13</span>
                            </div>
                        </div>
                        <a href="/ai/patentpal%E4%B8%93%E5%88%A9%E7%94%B3%E8%AF%B7%E5%86%99%E4%BD%9C" class="aritcle_card_btn">
                            <span>查看详情</span>
                            <img src="/static/images/cardxiayige-3.png" alt="PatentPal专利申请写作">
                        </a>
                    </div>
                
@@##@@ <center>百度图片</center>
<a href='https://www.php.cn/link/deee9fe5195586bf4545518a76aff2f7'>百度⼀下</a>
"""
html = MIMEText(content, 'html', 'utf-8')
msg.attach(html)
# 发送邮件
con.sendmail('xxxx@163.com', '726550822@qq.com', msg.as_string())
con.quit()
邮件内容除了正文内容,有的时候还需要将各种文件以附件的形式单独发送,发送附件的核心代码如下:
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()

以上就是利用Python实现邮件发送的详细内容,更多请关注php中文网其它相关文章!
 
                        
                        python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
 
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号