from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
 
#函数作用是返回重新编码过的邮箱用户名及相应地址
def _format_addr(s):
    name, addr = parseaddr(s)
    return formataddr((Header(name, 'utf-8').encode(), addr))
 
from_addr = input('From: ')#发件地址
password = input('Password: ')#SMTP服务授权码
to_addr = input('To: ')#收件地址
smtp_server = input('SMTP server: ')#SMTP服务地址
 
msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')
#创建MIMEText对象,(第一个参数就是邮件正文,第二个参数是MIME的subtype,传入'plain'表示纯文本,
#最终的MIME就是'text/plain',最后一定要用utf-8编码保证多语言兼容性。)
msg['From'] = _format_addr('Python爱好者 <%s>' % from_addr)#消息(发件人,发件地址)
msg['To'] = _format_addr('管理员 <%s>' % to_addr)#消息(收件人,收件地址)
#msg['To']接收的是字符串而不是list,如果有多个邮件地址,用,分隔即可。
msg['Subject'] = Header('来自SMTP的问候……', 'utf-8').encode()#消息(邮件标题),#如果包含中文,需要通过Header对象进行编码
 
server = smtplib.SMTP(smtp_server, 25)#SMTP服务地址,端口
server.set_debuglevel(1)#打印出和SMTP服务器交互的所有信息
server.login(from_addr, password)#登录SMTP服务器(发件地址,SMTP服务授权码)
server.sendmail(from_addr, [to_addr], msg.as_string())
#发送邮件(发件地址,list列表形式的收件地址,把MIMEText对象变成str)
server.quit()