1. 程式人生 > >python使用smtplib和MIMEText傳送郵件

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