zoukankan      html  css  js  c++  java
  • Python发送SMTP邮件指南

     
    SMTP(Simple Mail Transfer Protocol)简单邮件传输协议,Python内置对SMTP的支持,可以发送纯文本文件,HTML邮件以及附带文件。
     

    一、两个模块

    Python使用SMTP发送邮件的两个模块:smtplib模块email模块
    smtplib:负责发送邮件
    email:负责构建邮件
     

    二、SMTP端口

    1)未加密端口,smtplib.SMTP接口,端口:25
    2)使用SSL加密,smtplib.SMTP_SSL接口,端口:465
    3)使用TLS加密,端口:587
     

    三、四大步骤

    1、构造邮件内容
     
    # 纯文本
    msg = MIMEText(content)
     
    # 附件
    msg = MIMEMultipart()
    2、连接邮件服务器
     
    s = smtplib.SMTP("smtp.qq.com", 25)
    3、登陆邮件服务器
     
    s.login(msg_from, passwd) 

    msg_from:指发送者的邮箱

    passwd:指发送者的密码,这个密码不是你的QQ登陆密码,而是你在QQ邮箱设置开启SMTP之后的一个授权码
     
    4、发送邮件
     
    s.sendmail(msg_from, msg_to, msg.as_string())

    msg_from:发送方
    msg_to:收件方
    msg.as_string():要发送的消息
     

    四、常用场景

    1、纯文本邮件
     
    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
     
     
    # 发送者
    msg_from = "xxxxx@qq.com"
     
    # 这里的密码不是QQ邮箱的密码,而是在设置里开启SMTP服务器后的授权码
    passwd = "xxxxx"
     
    # 接受者
    msg_to = "xxxx@qq.com"
     
    # 邮件文本
    content = 'Python 邮件发送测试...'
     
    # 邮件主题
    subject = "test"
     
    # 生成一个MIMEText对象(还有一些其它参数)
    msg = MIMEText(content)
     
    # 放入邮件主题
    msg['Subject'] = Header(subject, 'utf-8')
     
    # 放入发件人
    msg['From'] = msg_from
     
    try:
        # 连接邮件服务器
        s = smtplib.SMTP("smtp.qq.com", 25)
     
        # 登录到邮箱
        s.login(msg_from, passwd)
     
        # 发送邮件:发送方,收件方,要发送的消息
        s.sendmail(msg_from, msg_to, msg.as_string())
        print('成功')
    except s.SMTPException as e:
        print(e)
    finally:
        s.quit()
    2、发送html文本
     
    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
     
     
    # 发送者
    msg_from = "xxxx@qq.com"
     
    # 这里的密码不是QQ邮箱的密码,而是在设置里开启SMTP服务器后的授权码
    passwd = "xxxx"
     
    # 接受者
    msg_to = "xxxx@qq.com"
     
    # 邮件文本
    content = """
    <p>Python 邮件发送测试...</p>
    <p><a href="http://www.baidu.com">这是一个链接</a></p>
    """
     
    # 邮件主题
    subject = "test"
     
    # 生成一个MIMEText对象(
    msg = MIMEText(content, 'html', 'utf-8')
     
    # 放入邮件主题
    msg['Subject'] = Header(subject, 'utf-8')
     
    # 放入发件人
    msg['From'] = msg_from
     
    try:
        # 连接邮件服务器
        s = smtplib.SMTP("smtp.qq.com", 25)
     
        # 登录到邮箱
        s.login(msg_from, passwd)
     
        # 发送邮件:发送方,收件方,要发送的消息
        s.sendmail(msg_from, msg_to, msg.as_string())
        print('成功')
    except s.SMTPException as e:
        print(e)
    finally:
        s.quit()
    3、发送附件
     
    import smtplib
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from email.header import Header
     
     
    # 发送者
    msg_from = "xxxx@qq.com"
     
    # 这里的密码不是QQ邮箱的密码,而是在设置里开启SMTP服务器后的授权码
    passwd = "xxxx"
     
    # 接受者
    msg_to = "xxxx@qq.com"
     
    # 邮件主题
    subject = "test"
     
    # 生成一个MIMEMultipart对象(
    msg = message = MIMEMultipart()
     
    # 邮件文本
    message.attach(MIMEText('这是菜鸟教程Python 邮件发送测试……', 'plain', 'utf-8'))
     
    # 放入邮件主题
    msg['Subject'] = Header(subject, 'utf-8')
     
    # 放入发件人
    msg['From'] = msg_from
     
    # 添加附件
    att1 = MIMEText(open('./wordcloud_singer.py', 'rb').read(), 'base64', 'utf-8')
    att1["Content-Type"] = 'application/octet-stream'
    att1["Content-Disposition"] = 'attachment; filename="test.txt"'
    msg.attach(att1)
     
    try:
        # 连接邮件服务器
        s = smtplib.SMTP("smtp.qq.com", 25)
     
        # 登录到邮箱
        s.login(msg_from, passwd)
     
        # 发送邮件:发送方,收件方,要发送的消息
        s.sendmail(msg_from, msg_to, msg.as_string())
        print('成功')
    except s.SMTPException as e:
        print(e)
    finally:
        s.quit()

    五、写在最后

    李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷。喜欢钻研底层技术,认为底层基础才是王道。一切新技术都离不开操作系统(CPU、内存、磁盘)、网络等。坚持输入输出,记录自己学习的点滴,在平凡中坚持前行,总有一天会遇见不一样的自己。公众号:运维汪(ID:Leeeee_Li)。

    作者:李先生

    -------------------------------------------

    个性签名:在平凡中坚持前行,总有一天会遇见不一样的自己!

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

    万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!

    微信公众号 微信打赏 微信打赏

       微信公众号        微信打赏       支付宝打赏

  • 相关阅读:
    python 语言打印直角三角形的几种方法
    python基础练习,循环、列表、字典、数组
    python命令行运行django项目, can't open file 'manage.py' 问题解决
    python数组列表、字典、拷贝、字符串
    Python输入与循环
    Python实现制度转换(货币,温度,长度)
    Matlab中图论工具箱的应用
    eclipse环境下日志打印输出
    mxGraph上下级节点与连线高亮显示代码
    mxgraph菜单配置及读取菜单节点名称方法
  • 原文地址:https://www.cnblogs.com/lemon-le/p/14858267.html
Copyright © 2011-2022 走看看