QQ郵箱傳輸協議
- SMTP:簡單郵件傳輸協議(由源地址到目的地址的傳輸規則)
- smtp.qq.com :QQ郵箱服務器
- 默認端口:25
- 生成第三方登錄QQ郵箱的密鑰,這樣從第三方登錄QQ郵箱,不能輸入密碼,只需要輸入第三方密鑰就行
需要使用到的庫
- smtplib :主要是負責發送郵件,連接郵箱服務器,登錄郵箱
- email :構造郵件,郵件顯示的內容,收件人,發件人
import smtplib
from email.mime.text import MIMEText # 發送文本
from email.mime.image import MIMEImage # 發送圖片
from email.mime.multipart import MIMEMultipart # 將多個對象結合起來
from email.utils import formataddr
from email.header import Header
發送郵件簡單代碼
sender_from = '[email protected]' # 發件人郵箱
sender_to='[email protected]' # 收件人郵箱
# 定義一個函數,接收傳入的郵件主題,郵件內容爲參數
def send_email(eamil_subject:str,email_content:str)->int:
try:
# 構造郵件的內容 plain:表示發送的是文本;HTML:表示發送的超文本
message = MIMEText(email_content, 'plain', 'utf-8')
# 主題
message['Subject'] = Header(eamil_subject, 'utf-8')
message['From'] = formataddr(['icessun', sender_from])
message['To'] = formataddr(['604421385', sender_to])
# 構造發送郵件的對象smtp,實例化SMTP()
smtp = smtplib.SMTP()
# 連接郵箱服務器 host 和 port
smtp.connect('smtp.qq.com', 25) # 可以簡寫 smtp=smtplib.SMTP('smtp.qq.com',25)
# 登陸郵箱 第二個參數是qq郵箱授權碼
smtp.login(sender_from, 'xxxxxxxx')
# 發送方,接收方(可以有多個['接收地址1','接收地址2',....]),發送的消息(字符串類型,使用郵件格式)
# message.as_string() 將MIMEText對象變爲str
smtp.sendmail(sender_from, sender_to, message.as_string())
# 退出郵箱,結束SMTP會話
smtp.quit()
return 0
except:
return -1
email中的 MIMEText
- plain:表示發送的文本,基本的
# 構造郵件的內容 plain:表示發送的是文本;HTML:表示發送的超文本
email_content = '這是發送的文本消息'
message = MIMEText(email_content, 'plain', 'utf-8')
-
html:表示發送的超文本
base64:表示添加附件
# 打開文件所在的位置
send_file=open(r'F:\password.txt').read() # 二進制文件
message = MIMEText(send_file, 'base64', 'utf-8')
message['Content-Type'] = 'application/octet-stream'
# 內容展示的方式:attachment ,中文名字顯示不成功 aaa.txt 英文才能正常顯示
# message['Content-Disposition'] = 'attachment;filename="aaa.txt"'
message.add_header('Content-Disposition','attachment',filename='aaaa.txt')
email中的 Header 和 formataddr
- 發送的郵件發送方和接收方全部使用 Header;不會顯示具體的發件人和收件人的郵箱地址
message['From'] = Header('python','utf-8')
message['To'] = Header('參數', 'utf-8')
- 發送的郵件發送方和接收方全部使用 formataddr;顯示具體的發件人和收件人的郵箱地址,和爲其設置的別名
# 默認字符編碼爲 utf-8,第一個參數傳入列表[發件人的名字,郵箱地址]
message['From'] = formataddr(['hhhh', sender_from])
message['To'] = formataddr(['604421385', sender_to])
email中的MIMEMultipart
- mixed:郵件包含附件,向上兼容
- related:郵件正文包含圖片,聲音等內嵌資源
- alternative:郵件只是純文本,超文本
message = MIMEMultipart('mixed')
# 然後把 郵件的 Subject From To 添加到 message中
message['Subject'] = Header(email_subject,'utf-8')
message['From'] = formataddr(['test',sender_from])
message['To'] = formataddr(['接收者',sender_to])
- 將其他文本添加到 Multipart 中
message.attach(text_plain) # MIMEText 對象
message.attach(text_html) # 超文本
message.attach(text_att) # 附件
message.attach(image) # MIMEImage 對象
發送郵件的多功能代碼:
- 發送文本
- 發送圖片
- 發送超文本
- 發送附件
代碼地址