Python發送QQ郵件

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 對象 

發送郵件的多功能代碼:

  • 發送文本
  • 發送圖片
  • 發送超文本
  • 發送附件

代碼地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章