簡單郵件傳輸協議(smtp)是一種協議,用於在郵件伺服器之間傳送電子郵件和路由電子郵件。python提供smtplib模組,該模組定義了乙個smtp客戶端會話物件,可用於使用smtp或esmtp偵聽器守護程式向任何網際網路機器傳送郵件。
smtp通訊的基本流程可以概括為以下幾點:
1.連線smtp伺服器
2.登陸使用者名稱和密碼
3.傳送指定郵件內容
4.退出smtp連線
一、傳送純文字格式郵件
#coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
import smtplib
from smtplib import smtp
from email.mime.text import mimetext
from email.header import header
#構造純文字郵件內容
msg = mimetext('hello,send by python.....','plain','utf-8')
#傳送者郵箱
sender = '***xx@***xx.com.cn'
#傳送者的登陸使用者名稱和密碼
user = '***xx@***x.com.cn'
password = '******'
#傳送者郵箱的smtp伺服器位址
smtpserver = '***x'
#接收者的郵箱位址
receiver = ['******@qq.com','******@outlook.com'] #receiver 可以是乙個list
smtp = smtplib.smtp() #例項化smtp物件
smtp.connect(smtpserver,25) #(預設)預設埠是25 也可以根據伺服器進行設定
smtp.login(user,password) #登陸smtp伺服器
smtp.sendmail(sender,receiver,msg.as_string()) #傳送郵件 ,這裡有三個引數
'''login()方法用來登入smtp伺服器,sendmail()方法就是發郵件,由於可以一次發給多個人,所以傳入乙個list,郵件正文
是乙個str,as_string()把mimetext物件變成str。
'''smtp.quit()
執行之後就會收到郵件:
但是仔細觀察會發現:
1.郵件沒有主題
2.看不到收件人的資訊
這是因為郵件主題、如何顯示發件人、收件人等資訊並不是通過smtp協議發給mta,而是包含在發給mta的文字中的,所以,我們必須把from、to和subject新增到mimetext中,才是一封完整的郵件:
msg = mimetext('hello,send by python.....','plain','utf-8')
msg['from'] = header('python測試','utf-8')
msg['to'] = header('管理員','utf-8')
subject = 'python smtp 測試郵件'
msg['subject'] = header(subject,'utf-8')
二、傳送html格式的郵件
msg = mimetext('你好!','html','utf-8')
#傳送html格式郵件就只需要把對應的第二個引數改為html即可
三、傳送帶附件的郵件傳送帶附件的郵件,首先要建立mimemultipart()例項,然後構造附件,如果有多個附件,可依次構造,最後利用smtplib.smtp傳送
#coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
import smtplib
from email.mime.text import mimetext
from email.mime.multipart import mimemultipart
from email.header import header
#傳送郵件伺服器
smtpserver = '***xx'
#傳送郵箱使用者名稱和密碼
user = '******'
password = '******'
#傳送郵箱
sender = '***xx'
#接受郵箱
receiver = '******x'
#建立乙個帶附件的例項
message = mimemultipart()
message['from'] = header('python 測試','utf-8')
message['to'] = header('測試','utf-8')
subject = 'python smtp郵件測試'
message['subject'] = header(subject,'utf-8')
#郵件正文內容
message.attach(mimetext('這是測試python傳送附件功能....','plain','utf-8'))
#構造附件1,傳送當前目錄下的test.txt檔案
att1 = mimetext(open('123.txt','rb').read(),'base64','utf-8')
#這裡的filename可以任意寫,寫什麼名字 郵件中就顯示什麼名字
att1['content-disposition'] = 'attachment;filename:"123.txt"'
message.attach(att1)
smtp = smtplib.smtp()
smtp.connect(smtpserver,25)
smtp.login(user,password)
smtp.sendmail(sender,receiver,message.as_string())
smtp.quit()
小結使用python的smtplib傳送郵件十分簡單,只要掌握了各種郵件型別的構造方法,正確設定好郵件頭,就可以順利發出。
構造乙個郵件物件就是乙個messag物件,如果構造乙個mimetext物件,就表示乙個文字郵件物件,如果構造乙個mimeimage物件,就表示乙個作為附件的,要把多個物件組合起來,就用mimemultipart物件,而mimebase可以表示任何物件。它們的繼承關係如下:
message
+- mimebase
+- mimemultipart
+- mimenonmultipart
+- mimemessage
+- mimetext
+- mimeimage
這種巢狀關係就可以構造出任意複雜的郵件。你可以通過email.mime文件檢視它們所在的包以及詳細的用法。
python 自動傳送郵件
測試環境 python3.4 發件伺服器 網易yeah 收件伺服器 移動139郵箱 注意 一定要在發件的郵箱裡面設定pop3 smtp imap為開啟狀態,要不然會報錯 535 error authentication failed 通過本程式,可以自動給自己的手機郵箱傳送郵件,在手機郵箱中把發件位...
Python自動傳送郵件
本文主要介紹如何使用python實現郵件的自動傳送。首先這個功能要求使用的模組是stmplib,email。smtp message transport protocol 簡單資訊傳輸協議,只能由於傳送郵件。下面是簡要的程式 usr bin python coding utf 8 import sm...
Python 自動傳送郵件
可直接複製進行呼叫 修改main裡對應引數即可 usr bin env python coding utf 8 time 2022 2 11 11 05 author file myemail.py version 1.0 function import datetime import smtpli...