python使用smtplib和MIMEText傳送郵件
阿新 • • 發佈:2018-11-25
本章以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