网站建设深圳哪里学,在线crm系统crm,韩国优秀电商网站,辽宁网站建设学校电子邮件是最古老的互联网服务之一#xff0c;发明于1969年#xff0c;它已经50岁了#xff01;它并不要求收信人发信人同时连接网络#xff0c;邮件存放于服务器#xff0c;所以至今在企业内部还在大量使用。而且它是开放协议#xff0c;没有被某大公司垄断。我们完全可…电子邮件是最古老的互联网服务之一发明于1969年它已经50岁了它并不要求收信人发信人同时连接网络邮件存放于服务器所以至今在企业内部还在大量使用。而且它是开放协议没有被某大公司垄断。我们完全可以拿来做一个可靠的消息来源。比如说我们在远程主机运行一个耗时较长的任务或者搭建某个自己写的后台服务当某些事件发生时就可以发送一个邮件手机任何一个邮件客户端都可以接收推送。国内较好的邮件服务器就是QQ邮件了它支持SMTP, ftjMAP, 默认都支持SSL的这点很重要。要知道SMTP, POP密码都是明文显示在TCP包里。要开启SMTP/IMAP 要在QQ邮件里做一下设置拿到授权码这个就是做为SMTP/IMAP的密码而不是QQ密码。用IMAP接收邮件python标准库里的imaplib就支持IMAP, 连接imap.qq.com即可with IMAP4_SSL(imap.qq.com) as M:M.noop()M.login(111111qq.com, gzoyimtltnqsbdba) #qq邮件地址和刚才拿到的授权码注意不是QQ号码和QQ密码M.select()typ, data M.search(None, ALL) #ALL为所有邮件可替换为想搜索的字符串count 10pcount 1for num in data[0].split():typ, data M.fetch(num, (RFC822)) #RFC822 为email标准for response_part in data:if isinstance(response_part, tuple):part response_part[1].decode(utf-8)msg email.message_from_string(part) #收到的邮件包parseHeader(msg)parseBody(msg)pcount 1if pcount count:break上面的msg包含了邮件本身的所有信息我们感兴趣的有from, to, cc, subject, body等分别代表了发件人收件人抄送列表标题和邮件主体。python提供了email库帮助从message里提取。 subject message.get(Subject)# subjectstr(message)# if subject is not None:h email.header.Header(subject, charsetutf-8)dh email.header.decode_header(h)subject str(dh[0][0], encodingutf-8)subject encoded_words_to_text(subject)# .encode(utf-8)# print(h)# # 发件人from_sb encoded_words_to_text(email.utils.parseaddr(message.get(from))[0])if len(from_sb) 0:from_sb encoded_words_to_text(email.utils.parseaddr(message.get(from))[1])# # 收件人to_sb email.utils.parseaddr(message.get(to))[1]# # 抄送人cc email.utils.parseaddr(message.get_all(cc))[1]# try:fmt ddd, D MMM YYYY HH:mm:ss Z# date arrow.get(message[Date], fmt)date arrow.get(message[Received].split(;)[1], fmt)print(f{from_sb:30} {subject:80} {date.humanize():20})arrow是python的一个第三方时间库humanize可以生成one month ago这样容易懂的格式。encoded_words_to_text方法是专门用来处理?utf-8?q?打头的字符串的因为电子邮件设计当初是只考虑ASCII码的因为unicode还没诞生为了支持unicode又兼容以前的邮件所以引入了这样的字符串格式。def encoded_words_to_text(encoded_words):if not encoded_words.startswith(?):return encoded_wordsencoded_word_regex r?{1}(.)?{1}([B|Q])?{1}(.)?{1}charset, encoding, encoded_text re.match(encoded_word_regex, encoded_words, flagsre.IGNORECASE).groups()if encoding.upper() B:byte_string base64.b64decode(encoded_text)elif encoding.upper() Q:byte_string quopri.decodestring(encoded_text)return byte_string.decode(charset)用smtplib发送邮件发送相对于接收就很简单了在用QQ授权码登录http://smtp.qq.com服务器后调用sendemail就可以了唯一要注意的一点是sendmail的msg参数是指email的所有内容并没有提供subject和body的专门参数。所以我们需要用换行符分开。def send_mail(fromaddr, toaddrs, subject, body):# Add the From: and To: headers at the start!msg (From: %srnTo: %srnSubject: %snn%s% (fromaddr, , .join(toaddrs), subject, body))while True: # 从命令行接收邮件内容直到连按两下回车try:line input()except EOFError:breakif not line:breakmsg msg lineprint(Message length is, len(msg))server SMTP_SSL(smtp.qq.com)server.set_debuglevel(1) #打开调试server.login(111111qq.com, gzoyimtltnqsbdba)server.sendmail(fromaddr, toaddrs, msg)server.quit()扫码关注公众号获取更多文章