python使用smtplib和MIMEText發送郵件

本章以qq爲例,使用前先在郵箱-設置-賬戶-開通POP3/SMTP服務,需要發送手機驗證碼,返回一個授權碼

代碼

import smtplib
from email.mime.text import MIMEText
def sendmail(subject, content):
    email_host = 'smtp.qq.com'     # 發送者是qq郵箱
    email_user = '你填寫授權碼的qq郵箱@qq.com'  # 發送者賬號
    email_pwd = '你的授權碼'       # 發送者密碼
    maillist ='你的接受者賬號@qq.com'    # 接收者賬號,本來想寫成[]list的,但是報錯,還沒解決!
    me = email_user

    msg = MIMEText(content, 'html', 'utf-8')    # 郵件內容,三個參數:第一個爲文本內容,第二個 html 設置文本格式,第三個 utf-8 設置編碼
    msg['Subject'] = subject    # 郵件主題
    msg['From'] = me    # 發送者賬號
    msg['To'] = maillist    # 接收者賬號列表(列表沒實現)

    smtp = smtplib.SMTP(email_host) # 如上變量定義的,是qq郵箱
    smtp.login(email_user, email_pwd)   # 發送者的郵箱賬號,密碼
    smtp.sendmail(me, maillist, msg.as_string())    # 參數分別是發送者,接收者,第三個不知道
    smtp.quit() # 發送完畢後退出smtp
    print ('email send success.')

sendmail('主題', '內容')    # 調用發送郵箱的函數

demo1.py

# smtp =>simple mail transfer protocol  簡單郵件傳輸協議
import smtplib
import email  # 文件名不可以和引入的庫同名
from email.mime.image import MIMEImage  # 圖片類型郵件
from email.mime.text import MIMEText  # MIME 多用於郵件擴充協議
from email.mime.multipart import MIMEMultipart  # 創建附件類型

HOST = 'smtp.qq.com'  # 調用的郵箱藉藉口
SUBJECT = '發送了一封測試郵件'  # 設置郵件標題
FROM = '你的授權碼郵箱@qq.com'  # 發件人的郵箱需先設置開啓smtp協議
TO = '發送者qq郵箱@qq.com'  # 設置收件人的郵箱(可以一次發給多個人,用逗號分隔)
message = MIMEMultipart('related')  # 郵件信息,內容爲空  #相當於信封##related表示使用內嵌資源的形式,將郵件發送給對方

def sendmail(HOST, SUBJECT,FROM,TO,message):
    """
    發送郵件主體到對方郵箱
    :發送信息參數說明:
    1.內容必須是字符串
    2.內容形式,文本類型默認爲plain
    3.內容編碼使用utf-8
    :其他:
    圖片和excel文件需要和本腳本一個目錄下
    """

    # ===========發送信息內容=============
    # message_html = MIMEText('shuai123 消滅不開行', 'plain', 'utf-8')
    message_html = MIMEText('<h1 style="color:red;font-size:100px">測試信息已收到</h1><img src="cid:small">', 'html', 'utf-8')
    message.attach(message_html)

    # ===========發送圖片-=============
    #發送圖片-預覽信息
    image_data = open('email_demo.jpg', 'rb')
    message_image = MIMEImage(image_data.read())
    image_data.close()# 關閉剛纔打開的文件
    message_image.add_header('Content-ID', 'small')
    message.attach(message_image)# 添加圖片文件到郵件信息中去
    #發送圖片-附件
    message_image = MIMEText(open('email_demo.jpg', 'rb').read(), 'base64', 'utf-8')
    message_image['Content-disposition'] = 'attachment;filename="email_demo_change.jpg"'# 設置圖片在附件當中的名字
    message.attach(message_image)# 添加圖片文件到郵件-附件中去
    # ===========發送excel-附件=============
    message_xlsx = MIMEText(open('email_demo.xlsx', 'rb').read(), 'base64', 'utf-8')# 將xlsx文件作爲內容發送到對方的郵箱讀取excel,rb形式讀取,對於MIMEText()來說默認的編碼形式是base64 對於二進制文件來說沒有設置base64,會出現亂碼
    message_xlsx['Content-Disposition'] = 'attachment;filename="email_demo_change.xlsx"'# 設置文件在附件當中的名字
    message.attach(message_xlsx)# 添加excel文件到郵件-附件中去

    # ===========配置相關-=============
    message['From'] = FROM # 設置郵件發件人
    message['TO'] = TO # 設置郵件收件人
    message['Subject'] = SUBJECT # 設置郵件標題
    email_client = smtplib.SMTP_SSL()# 獲取江建有獎傳輸協議證書
    email_client.connect(HOST, '465')# 設置發送域名,端口465
    result = email_client.login(FROM, '你的QQ授權碼')  # qq授權碼
    print('登錄結果', result)

    # ===========操作=============
    email_client.sendmail(from_addr=FROM, to_addrs=TO.split(','), msg=message.as_string()) #發送郵件指令
    email_client.close()# 關閉郵件發送客戶端

if __name__ == '__main__':
    sendmail(HOST=HOST, SUBJECT=SUBJECT,FROM=FROM,TO=TO,message=message)

demo2.py

參考文檔

1.使用Python來操作郵箱:https://blog.csdn.net/qq_38059635/article/details/81569081

2.python3 發郵件 smtplib & email 庫:https://www.cnblogs.com/vivivi/p/5952093.html

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