参考资料:
https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0013868325601402299d1e941914a21990ac7861ef4bc2d000
https://blog.csdn.net/Mark_LQ/article/details/51204081?locationNum=3&fps=1
1、电子邮件在网络上传输过程:发件人 -> MUA -> MTA -> MTA -> 若干个MTA -> MDA <- MUA <- 收件人
(1)MUA:Mail User Agent——邮件用户代理。客户端用于发送或接收邮件的软件,如Outlook、手机端的各类邮件管理APP等。
(2)MTA:Mail Transfer Agent——邮件传输代理。Email服务提供商,如新浪、搜狐、网易等。
(3)MDA:Mail Delivery Agent——邮件投递代理。邮件最终目标邮箱服务器。
2、收发电子邮件的程序是MUA的功能,使用SMTP(Simple Mail Transfer Protocol)协议发送邮件到MTA,使用POP(Post Office Protocol)协议或IMAP(Internet Message Access Protocol)协议从MDA收取邮件信息。IMAP协议不但能接收收件箱邮件,还可以操作邮箱其他目录,但POP协议只能从收件箱接收邮件。下面是我的学习代码:
发送邮件:
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.utils import parseaddr, formataddr
from email.mime.base import MIMEBase
import smtplib
import os
#邮件正文类型格式常量-HTML
MAILTYPE_HTML = 'html'
#邮件正文类型格式常量-文本
MAILTYPE_TEXT = 'plain'
#对复合邮件地址(发件人名称<邮箱地址>)进行编码
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr(( \
Header(name, 'utf-8').encode(), \
addr.encode('utf-8') if isinstance(addr, unicode) else addr))
#用于发送邮件的类
class EmailSender(object):
def __init__(self):
#邮件标题
self.mTitle = None
#发件人地址
self.mFrom = None
#收件人地址
self.mTo = None
#发件人名称
self.mFromName = None
#收件人名称
self.mToName = None
#正文
self.mText = None
#正文类型,默认为文本
self.mType = MAILTYPE_TEXT
#编码格式
self.mCode = 'utf-8'
#附件列表
self.attachs =