python接收郵件
❶ demo鍦╬ython涓鐨勭敤娉
demo鏄鎸囨紨紺虹▼搴忥紝閫氬父鐢ㄦ潵婕旂ず涓縐嶆妧鏈鎴栧伐鍏風殑浣跨敤鏂規硶銆傚湪python涓錛宒emo涔熸槸涓涓闈炲父閲嶈佺殑姒傚康銆備笅闈㈡垜灝嗕負澶у朵粙緇峆ython涓璬emo鐨勭敤娉曘
3銆乨emo紼嬪簭鐨勫垎鏋
浠ヤ笂紼嬪簭浣滀負Python涓婕旂ず閭浠跺彂閫佸姛鑳界殑涓涓猟emo紼嬪簭錛屾兜鐩栦簡閭浠跺彂閫佺殑鍏ㄨ繃紼嬶紝鍏朵腑錛岄氳繃email妯″潡鍒涘緩浜嗛偖浠跺疄渚嬶紝騫墮氳繃smtplib妯″潡鎻愪緵鐨凷MTP鍗忚榪涜屼簡閭浠剁殑鍙戦併
4銆乨emo紼嬪簭鐨勭敤閫
榪欎釜demo紼嬪簭鍙浠ュ府鍔╂柊鎵嬩簡瑙Python涓鐨勯偖浠跺彂閫佸姛鑳斤紝鏇村ソ鍦扮悊瑙e拰瀛︿範Python涓鐨勯偖浠舵ā鍧椼傚傛灉鎯寵佽嚜宸變嬌鐢≒ython鏉ュ彂閫侀偖浠訛紝鍙浠ラ氳繃淇鏀硅demo涓鐨勫彂浠朵漢銆佹敹浠朵漢銆佷富棰樸佹f枃銆丼MTP鏈嶅姟鍣ㄥ湴鍧銆佺鍙d互鍙婅處鎴蜂俊鎮絳夊弬鏁幫紝鏉ュ疄鐜拌嚜宸辯殑閭浠跺彂閫佸姛鑳姐
❷ python電子郵件系列(三)之POP接收郵件
由上篇文章我們已經得知郵件從發送到接收的過程:
發件人->MUA->MTA->若干MTA->MDA->MUA->收件人
本節接收郵件主要就是編寫一個 MUA 客戶端,從 MDA 將郵件取回本地。
收取郵件最常用的是 POP協議 ,目前版本是第三版,也稱 POP3 。python內置了 poplib 模塊,支持POP3協議。
回想上一節 SMTP ,我們對要發送的郵件內容進行了各種編碼,包括添加MIME header,編碼之後再進行發送。
因此,我們通過POP3協議接收的也不是原內容,而是經過一系列編碼等處理的文本。
所以,要想把POP3收取的文本變為可閱讀的郵件對象,就需要利用 email 模塊對原始郵件進行解析。
所以,郵件收取的流程就是:
由上一篇 文章 最後總結部分可知。郵件由字元到發送到網路經歷了如下的格式轉化:
純文本:
str->bytes->base64->str->bytes
二進制文件:
binary code->base64->str->bytes
我們解析郵件也是按這個思路,逆序解析出內容。
這里的 decode('utf-8') 先把位元組流轉化為字元串,再將字元串轉化為 message 結構的對象。這步與發送郵件的 as_string 函數相反。
先從上一節結構化的 msg 中取出信件頭,列印出來。
如果是 multipart 結構, get_payload 函數會返回一個包含不同part的list,然後對每一part遞歸調用 print_info ,列印子信件頭和子信件內容。
不是 multipart 時,之後再依據 Content-Type 作不同處理:
如果是 text :
利用 get_payload(decode = Ture) 取出子信件的內容, decode 為True,則按照 Content-Transfer-Type 將 base64 或 QP 解碼為 bytes 。
再 guess_charset 猜出編碼方式,之後將其解碼為字元顯示。
如果不是 Text 對象,則為附件:
列印出附件的 Content-Type 。
❸ python,使用smtp發送郵件,求實例
from smtplib import SMTP
from RuckusAutoTest.models import TestCase
from email.MIMEMultipart import MIMEMultipart
from email.mime.application import MIMEApplication
def sendFildByMail(config):
print 'Preparing...',
message = MIMEMultipart( )
message['from'] = config['from']
message['to'] = config['to']
message['Reply-To'] = config['from']
message['Subject'] = config['subject']
message['Date'] = time.ctime(time.time())
message['X-Priority'] = '3'
message['X-MSMail-Priority'] = 'Normal'
message['X-Mailer'] = 'Microsoft Outlook Express 6.00.2900.2180'
message['X-MimeOLE'] = 'Proced By Microsoft MimeOLE V6.00.2900.2180'
f=open(config['file'], 'rb')
file = MIMEApplication(f.read())
f.close()
file.add_header('Content-Disposition', 'attachment', filename= os.path.basename(config['file']))
message.attach(file)
print 'OK'
print 'Logging...',
smtp = SMTP(config['server'])#, config['port'])
smtp.ehlo()
smtp.starttls()
smtp.ehlo()
smtp.login(config['username'], config['password'])
print 'OK'
print 'Sending...',
smtp.sendmail (config['from'], [config['from'], config['to']], message.as_string())
print 'OK'
smtp.close()
time.sleep(1)
sendFildByMail({
'from': '[email protected]',
'to': '[email protected]',
'subject': ''This is an email test!',
'server': '123.125.50.132',
'username': 'username',
'password': 'password'})
可以注冊一個163郵箱試一下,是可以發郵件的。
在sendFildByMail這個函數里填上正確的參數,from是從哪個郵箱發送,也就是剛注冊的163郵箱,to是發送到哪個郵箱,可以填另一個郵箱來檢查是否能接收郵件,server不要改,這是163的地址;username和password那裡填寫163郵箱的用戶名和密碼。
希望能幫到你,有疑問請追問!