1. 程式人生 > 遊戲 >《吸血鬼倖存者》0.5.2版本 新增角色和重金屬配樂

《吸血鬼倖存者》0.5.2版本 新增角色和重金屬配樂

目錄

Python傳送郵件

smtplib 是 Python 用來發送郵件的模組,email 是用來處理郵件訊息

這裡,我們使用裝飾器來製作傳送郵件的功能

一、 文字資訊

我們使用MIMEText來發送文字資訊

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: A.L.Kun
# @file : mail.py
# @time : 2022/5/7 16:48
from smtplib import SMTP
from email.mime.text import MIMEText  # 傳送文字資訊使用的庫
from email.header import Header  # 設定請求的頭部資訊
from email.utils import formataddr  # 格式化
from functools import wraps

receivers = ['[email protected]',]  # 接收者為可迭代物件,可以實現郵件的群發
subject = '測試郵件'  # 設定郵件的標題


def decorate(fun_):
    
    username = '[email protected]'  # 傳送郵件的qq號
    password_pass = 'meryyupicqjjciei'  # 授權密碼,有的郵箱是使用登入密碼
    smtp = SMTP('smtp.qq.com')  # 建立一個SMTP伺服器,這裡使用qq郵箱
    smtp.login(username, password_pass)  # 登入
    
    @wraps(fun_)
    def func_mail(*args, **kwargs):
        fun_(smtp, username, *args, **kwargs)  # 呼叫發郵件的函式
        smtp.quit()  # 關閉伺服器
        smtp.close()  
    return func_mail


@decorate
def mail(smtp, username):
    for receiver_ in receivers:
        msgRoot = MIMEText(f"這是一個測試郵件,不要回復哦~~~", "html", "utf-8")  # 如果第二個引數為plain,則是傳送純文字資訊,如果郵件有中文,就要使用utf-8
        msgRoot["Subject"] = Header(subject, "utf-8")  # 設定文字標題
        msgRoot['From'] = formataddr(("A.L.Kun", username))  # 設定發件人資訊
        msgRoot['To'] = formataddr((receiver_.split("@")[0], receiver_))  # 設定收件人資訊
        smtp.sendmail(username, receiver_, msgRoot.as_string())  # 傳送郵件
        # smtp.set_debuglevel(1)  # 輸出除錯資訊
        print(receiver_.split("@")[0], ':傳送完成')


if __name__ == '__main__':
    mail()

使用裝飾器的好處,可以動態建立一個傳送郵件的物件,同時可以不用關注郵件的配置,只要關注郵件的內容

二、 圖片資訊

我們可以使用MIMEImage來讀取圖片資料,然後進行傳送

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: A.L.Kun
# @file : mail.py
# @time : 2022/5/7 16:48
from smtplib import SMTP
from email.mime.text import MIMEText  # 傳送文字資訊使用的庫
from email.mime.multipart import MIMEMultipart  # 可以傳送多種型別的郵件
from email.mime.image import MIMEImage  # 讀取圖片資訊
from email.header import Header  
from email.utils import formataddr  
from functools import wraps
import os

receivers = ['[email protected]',]
subject = '測試郵件'
pic_path = "./test.jpeg"


def decorate(fun_):
    username = '[email protected]'
    password_pass = 'mdsrecuicqjjciei'
    smtp = SMTP('smtp.qq.com')
    smtp.login(username, password_pass)

    @wraps(fun_)
    def func_mail(*args, **kwargs):
        fun_(smtp, username, *args, **kwargs)
        smtp.quit()
        smtp.close()

    return func_mail

@decorate
def mail(smtp, username):
    for receiver_ in receivers:
        msgRoot = MIMEMultipart("related")  # 建立一個容器,可以為related模式,可以往裡面新增文字、圖片、附件
        msgRoot["Subject"] = Header(subject, "utf-8")
        msgRoot['From'] = formataddr(("A.L.Kun", username))
        msgRoot['To'] = formataddr((receiver_.split("@")[0], receiver_))
        pic_data = open(pic_path, "rb").read()  # 讀取圖片資料
        """以附件的形式傳送圖片"""
        send_img_f = MIMEImage(pic_data)
        # 設定頭部資訊,第一個引數和第二個引數都表示以附件的形式傳送,最後一個表示檔案的檔名
        # 只要設定了這個頭部資訊,就是為傳送附件
        send_img_f.add_header('Content-Disposition', 'attachment', filename=('utf-8', '', os.path.basename(pic_path)))
        msgRoot.attach(send_img_f)  # 將圖片附件新增到容器中
        """將圖片新增到正文中"""
        send_img_c = MIMEImage(pic_data)
        # 設定圖片的唯一標識,即圖片的id為img1,通過`cid:img1`訪問
        send_img_c.add_header("Content-Id", "<img1>")
        msgRoot.attach(send_img_c)  # 要先將圖片資料上傳到容器中
        img_text = f"""
            <p>這是一張圖片:</p>
            <br><img src="cid:img1" width="300" alt={os.path.basename(pic_path)}></br>
        """  # 使用匯入的圖片資料
        msgRoot.attach(MIMEText(img_text, "html", "utf-8"))

        smtp.sendmail(username, receiver_, msgRoot.as_string())
        print(receiver_.split("@")[0], ':傳送完成')

if __name__ == '__main__':
    mail()

三、 附件

我們使用MIMEApplication來發送附件

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: A.L.Kun
# @file : mail.py
# @time : 2022/5/7 16:48
from smtplib import SMTP
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.application import MIMEApplication  # 傳送二進位制附件
from email.utils import formataddr
from functools import wraps
import os

receivers = ['[email protected]',]
subject = '測試郵件'
file_lis = ["./test2.pptx", "./test.jpeg"]


def decorate(fun_):
    username = '[email protected]'
    password_pass = 'mwdftrtycqjjciei'
    smtp = SMTP('smtp.qq.com')
    smtp.login(username, password_pass)

    @wraps(fun_)
    def func_mail(*args, **kwargs):
        fun_(smtp, username, *args, **kwargs)
        smtp.quit()
        smtp.close()

    return func_mail


@decorate
def mail(smtp, username):
    for receiver_ in receivers:
        msgRoot = MIMEMultipart("related")  # 建立一個容器,必須為related模式,可以往裡面新增文字、圖片、附件
        msgRoot["Subject"] = Header(subject, "utf-8")
        msgRoot['From'] = formataddr(("A.L.Kun", username))
        msgRoot['To'] = formataddr((receiver_.split("@")[0], receiver_))

        for file in file_lis:
            # 建立二進位制檔案資料
            msgFile = MIMEApplication(open(file, "rb").read())
            # 設定標頭
            msgFile.add_header('Content-Disposition', 'attachment', filename=('utf-8', '', os.path.basename(file)))
            # 將資料新增到容器中
            msgRoot.attach(msgFile)

        smtp.sendmail(username, receiver_, msgRoot.as_string())
        print(receiver_.split("@")[0], ':傳送完成')


if __name__ == '__main__':
    mail()