SMTP发送邮件SMTP是发送邮件的协议,Python内置对SMTP的⽀持,可以发送纯⽂本邮件、HTML邮件以及带附件的邮件。Python对SMTP⽀持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。⾸先,我们来构造⼀个最简单的纯⽂本邮件:fromemail.mime.textimportMIMETextmsg=MIMEText('hello,sendbyPython...','plain','utf-8')注意到构造MIMEText对象时,第⼀个参数就是邮件正⽂,第⼆个参数是MIME的subtype,传⼊'plain'表示纯⽂本,最终的MIME就是'text/plain',最后⼀定要⽤utf-8编码保证多语⾔兼容性。然后,通过SMTP发出去:#输⼊Email地址和⼝令:from_addr=input('From:')password=input('Password:')#输⼊收件⼈地址:to_addr=input('To:')#输⼊SMTP服务器地址:smtp_server=input('SMTPserver:')importsmtplibserver=smtplib.SMTP(smtp_server,25)#SMTP协议默认端⼝是25server.set_debuglevel(1)server.login(from_addr,password)server.sendmail(from_addr,[to_addr],msg.as_string())server.quit()我们⽤set_debuglevel(1)就可以打印出和SMTP服务器交互的所有信息。SMTP协议就是简单的⽂本命令和响应。login()⽅法⽤来登录SMTP服务器,sendmail()⽅法就是发邮件,由于可以⼀次发给多个⼈,所以传⼊⼀个list,邮件正⽂是⼀个str,as_string()把MIMEText对象变成str。如果⼀切顺利,就可以在收件⼈信箱中收到我们刚发送的Email:仔细观察,发现如下问题:1.邮件没有主题;2.收件⼈的名字没有显示为友好的名字,⽐如MrGreen;3.明明收到了邮件,却提示不在收件⼈中。这是因为邮件主题、如何显示发件⼈、收件⼈等信息并不是通过SMTP协议发给MTA,⽽是包含在发给MTA的⽂本中的,所以,我们必须把From、To和Subject添加到MIMEText中,才是⼀封完整的邮件:fromemailimportencodersfromemail.headerimportHeaderfromemail.mime.textimportMIMETextfromemail.utilsimportparseaddr,formataddrimportsmtplibdef_format_addr(s):name,addr=parseaddr(s)returnformataddr((Header(name,'utf-8').encode(),addr))from_addr=input('From:')password=input('Password:')to_addr=input('To:')smtp_server=input('SMTPserver:')msg=MIMEText('hello,sendbyPython...','plain','utf-8')msg['From']=_format_addr('Python爱好者<%s>'%from_addr)msg['To']=_format_addr('管理员<%s>'%to_addr)msg['Subject']=Header('来⾃SMTP的...