本章以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