首頁  >  文章  >  後端開發  >  利用Python實現郵件發送

利用Python實現郵件發送

PHPz
PHPz轉載
2023-04-12 10:04:122972瀏覽

利用Python實現郵件發送

SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協定,它是⼀一組⽤用於由來源位址到⽬目的位址傳送

#郵件的規則,由它來控制信件的中轉⽅方式。 python的smtplib提供了⼀一種很⽅方便便的途徑發送電⼦子郵件。它對smtp協定進⾏行行了簡單的封裝。

一. 準備用來寄送郵件的郵件帳號

準備好信箱帳號和信箱登入授權碼。不同類型郵箱取得授權碼的方式大同小異,這兒以QQ郵箱為例演示獲取授權碼步驟:

##第一步:用網頁登入QQ郵箱,找到幫助中心


利用Python實現郵件發送

#第二步:在說明中心中選擇"客戶端設定"中的第2個問題:


利用Python實現郵件發送

#然後依照對應的要求操作,得到授權碼並且儲存。


二. 傳送郵件的基本步驟


程式碼寄送郵件的步驟,和手動寄送郵件步驟大致一致:登入信箱 -> 準備郵件內容  ->  寄送郵件。


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

利用Python實現郵件發送

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.php.cn/link/deee9fe5195586bf4545518a76aff2f7/img/bd_logo1.png' alt="利用Python實現郵件發送" > <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()

利用Python實現郵件發送

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()

利用Python實現郵件發送

以上是利用Python實現郵件發送的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除