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邮箱的用户名和密码。
希望能帮到你,有疑问请追问!