python3收发email
imaplib查收邮件
import imaplib
import emaildef print_email(mail,emails,num):# 获取邮件内容tpy1,msg_data = mail.fetch((num), "(RFC822)")msg = email.message_from_bytes(msg_data[0][1])recv_date = (email.header.decode_header(msg.get('Date')))# 打印主题msgCharset = email.header.decode_header(msg.get('Subject'))[0][1]subject = email.header.decode_header(msg.get('Subject'))[0][0].decode(msgCharset)mail_to = email.header.decode_header(msg.get('To'))[0][0]#print("Subject:", msg["Subject"])print("Subject:",subject,recv_date)# 输入账号和密码
username = "user@163.com"
password = "youpassword"# 连接 IMAP 服务器
mail = imaplib.IMAP4_SSL(host="imap.163.com",port=993)
mail.login(username, password)# 上传客户端身份信息
imaplib.Commands['ID'] = ('AUTH')
args = ("name","user","contact","user@163.com","version","1.0.0","vendor","myclient")
typ, dat = mail._simple_command('ID', '("' + '" "'.join(args) + '")')
print(mail._untagged_response(typ, dat, 'ID'))# 选择邮箱
mail.select("inbox")# 搜索所有未读邮件
#status, emails = mail.search(None, "UNSEEN") #返回未读的邮件列表
status, emails = mail.search(None, 'ALL') #返回一个元组,data为此邮箱的所有邮件数据
latest_email_id = (emails[0].split()[-1])
# 获取最新邮件内容
print(latest_email_id)
# 获取邮件编号
emails = emails[0].split(b" ")
print_email(mail,emails,latest_email_id)
for num in emails:if int(num) > 10:# 超过20,退出循环,不输出breakprint_email(mail,emails,num)# 关闭邮箱连接
mail.close()
mail.logout()
使用pop3协议收取邮件
import poplib
import email# 输入账号和密码
username = "user@chinalin.com"
password = "password."# 连接 POP3 服务器
mail = poplib.POP3_SSL("mail.chinalin.com",port=995)
mail.user(username)
mail.pass_(password)# 获取邮箱信息
num_messages = len(mail.list()[1])
print(num_messages)
latest_email_id = num_messages# 获取最新邮件内容
raw_email = mail.retr(latest_email_id)[1]
msg_data = b"\n".join(raw_email).decode("utf-8", errors="ignore")
msg = email.message_from_string(msg_data)
recv_date = (email.header.decode_header(msg.get('Date')))
# 打印主题
msgCharset = email.header.decode_header(msg.get('Subject'))[0][1]
subject = email.header.decode_header(msg.get('Subject'))[0][0].decode(msgCharset)print("Subject:", subject,recv_date)# 关闭邮箱连接
mail.quit()
使用廖雪峰的代码,暂时运行没问题,以此demo修改。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
#=============================下面是收邮件需要的头
from email.parser import Parser
from email.header import decode_header
import poplibdef _format_addr(s):name, addr = parseaddr(s)return formataddr((Header(name, 'utf-8').encode(), addr))
def send_mail():from_addr = input('From: ')password = input('Password: ')to_addr = input('To: ')smtp_server = input('SMTP server: ')msg = MIMEText('内容:今天申购情况。...', 'plain', 'utf-8')msg['From'] = _format_addr('Python自动消息 <%s>' % from_addr)msg['To'] = _format_addr('管理员 <%s>' % to_addr)msg['Subject'] = Header('验证码:123456', 'utf-8').encode()server = smtplib.SMTP(smtp_server, 25)server.set_debuglevel(1)server.login(from_addr, password)server.sendmail(from_addr, [to_addr], msg.as_string())server.quit()return 1def guess_charset(msg):charset = msg.get_charset()if charset is None:content_type = msg.get('Content-Type', '').lower()pos = content_type.find('charset=')if pos >= 0:charset = content_type[pos + 8:].strip()return charsetdef decode_str(s):value, charset = decode_header(s)[0]if charset:value = value.decode(charset)return valuedef print_info(msg, indent=0):if indent == 0:for header in ['From', 'To', 'Subject','Cc','Date']:value = msg.get(header, '')if value:if header=='Subject':value = decode_str(value)elif header == 'Date':value = msg.get('date', '')else:hdr, addr = parseaddr(value)name = decode_str(hdr)value = u'%s <%s>' % (name, addr)print('%s%s: %s' % (' ' * indent, header, value))if (msg.is_multipart()):parts = msg.get_payload()for n, part in enumerate(parts):print('%spart %s' % (' ' * indent, n))print('%s--------------------' % (' ' * indent))print_info(part, indent + 1)else:content_type = msg.get_content_type()if content_type=='text/plain' or content_type=='text/html':content = msg.get_payload(decode=True)charset = guess_charset(msg)if charset:content = content.decode(charset)print('%sText: %s' % (' ' * indent, content + '...'))else:print('%sAttachment: %s' % (' ' * indent, content_type))def re_mail():email = input ('email:')password = input('163的Password: ')pop3_server = 'pop.163.com'#input('POP3 SERVER: ')#pop.163.comserver = poplib.POP3(pop3_server)#选择是否打开调试信息server.set_debuglevel(0)print(server.getwelcome().decode('utf-8'))server.user(email)server.pass_(password)print("message: %s. Size:%s" %server.stat())resp,mails,octets = server.list()#看到上面list()返回的列表[b'1 82923',b'2 2184',....]print(mails)#获取最新的一封信index = len (mails)resp,lines,octets = server.retr(index)try:msg_content = b'\r\n'.join(lines).decode('utf-8')except:msg_content = b'\r\n'.join(lines).decode('gb2312')msg = Parser().parsestr(msg_content)print_info(msg)#print(msg)server.quit()return 1def test():#send_mail()re_mail()
if __name__=='__main__':test()
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
