美文网首页
python利用smtp发送邮件

python利用smtp发送邮件

作者: 不懒狮Blaise | 来源:发表于2017-12-26 14:09 被阅读0次

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


    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 = "your@qq.com"
    password = "your 授权码"
    toemail = ['toemail@qq.com']
    
    
    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()
    
    

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


    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 = 'your@qq.com'
    password = '授权码'
    to_addr = 'toemail@qq.com'
    
    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发送邮件

          本文链接:https://www.haomeiwen.com/subject/ovndgxtx.html