python利用smtp发送邮件

因为邮件的服务器使用"smtp.qq.com",所以先去qq邮箱账号设置里开放服务。


python利用smtp发送邮件_第1张图片
image.png
from email.mime.text import MIMEText
import smtplib

# 注意构建MIMEText对象时,第一个参数就是邮件正文,第二个参数是MIME的subtype, 'plain'表示存文本,最后参数一定要用utf-8编码保证多语言兼容性。
msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')

fromAddr = "[email protected]"
password = "your 授权码"
toemail = ['[email protected]']


smtp_server = "smtp.qq.com"
server = smtplib.SMTP_SSL(smtp_server, 465) # 默认端口用465
# 我们用set_debuglevel(1)就可以打印出和SMTP服务器交互的所有信息。SMTP协议就是简单的文本命令和响应。
server.set_debuglevel(1)
# login()方法用来登录SMTP服务器。
server.login(fromAddr, password)
# sendmail()方法就是发邮件,由于可以一次发给多个人,所以传入一个list,邮件正文是一个str,as_string()把MIMEText对象变成str。
server.sendmail(fromAddr, your_email, msg.as_string())
server.quit()

上面代码执行后,会发现没有主题。


python利用smtp发送邮件_第2张图片
image.png

这是因为邮件主题、如何显示发件人、收件人等信息并不是通过SMTP协议发给MTA,而是包含在发给MTA的文本中的,所以,我们必须把From、To和Subject添加到MIMEText中,才是一封完整的邮件:

from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr

def _format_addr(s):
    name, addr = parseaddr(s)
    return formataddr(Header(name, 'utf-8').encode(), addr)

from_addr = '[email protected]'
password = '授权码'
to_addr = '[email protected]'

smtp_server = "smtp.qq.com"

msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')
msg['From'] = _format_addr('Python爱好者 <%s>' % from_addr)
msg['To'] = _format_addr('管理员 <%s>' % to_addr)
msg['Subject'] = Header('来自SMTP的问候……', 'utf-8').encode()
server = smtplib.SMTP_SSL(smtp_server, 465) # 默认端口用465
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()

参考链接:
https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832745198026a685614e7462fb57dbf733cc9f3ad000
如果带附件的邮件可以参考:
http://blog.csdn.net/zm2714/article/details/7993732

你可能感兴趣的:(python利用smtp发送邮件)