最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Python smtplib模块详解:发送邮件

    正文概述    2020-01-11   280

    Python smtplib模块详解:发送邮件

    使用 Python 的 smtplib 模块来发送邮件非常简单,大部分底层的处理都由 smtplib 进行了封装,开发者只需要按照如下 3 步来发送邮件即可:

    连接 SMTP 服务器,并使用用户名、密码登录服务器。

    创建 EmailMessage 对象,该对象代表邮件本身。

    调用代表与 SMTP 服务器连接的对象的 sendmail() 方法发送邮件。

    下面程序按照上面步骤示范了如何发送邮件:

    纯文本复制

    import smtplib
    from email.message import EmailMessage
    
    # 定义SMTP服务器地址:
    smtp_server = 'smtp.qq.com'
    # 定义发件人地址
    from_addr = 'kongyeeku@qq.com'
    # 定义登录邮箱的密码
    password = '123456'
    # 定义收件人地址:
    to_addr = 'kongyeeku@163.com'
    
    # 创建SMTP连接
    #conn = smtplib.SMTP(smtp_server, 25)
    conn = smtplib.SMTP_SSL(smtp_server,465)
    conn.set_debuglevel(1)
    conn.login(from_addr, password)            #①
    # 创建邮件对象
    msg = EmailMessage()
    # 设置邮件内容
    msg.set_content('您好,这是一封来自Python的邮件', 'plain', 'utf-8')
    # 发送邮件
    conn.sendmail(from_addr, [to_addr], msg.as_string())
    # 退出连接
    conn.quit()

    上面程序中,第 15 行、19 行和 23 行代码基本代表了使用 Python 的 smtp 模块发送邮件的 3 大核心步骤,其中 ① 号代码使用了发件人的地址和密码来登录邮箱。

    关于该程序有以下几点需要说明:

    程序中提供的邮箱密码是错误的,不用尝试。读者必须改为使用自己的邮箱地址和密码。

    早期SMTP 服务器都采用普通的网络连接,因此默认端口是 25。但现在绝大部分 SMTP 都是基于 SSL(Secure Socket Layer)的,这样保证网络上传输的信息都是加密过的,从而使得信息更加安全。这种基于 SSL 的 SMTP 服务器的默认端口是 465。上面程序中连接的是 QQ 邮箱的基于 SSL 的 SMTP 服务器,QQ 邮箱服务器不支持普通的 SMTP。

    国内有些公司的免费邮箱(比如 QQ 邮箱)默认是关闭了 SMTP 的,因此需要读者登录邮箱进行设置。

    由于该程序发送的邮件太简单,邮件没有主题,而且程序在测试过程中可能会发送很多邮件,因此有些邮箱服务商会将该程序发送的邮件当成垃圾邮件。

    早期 Python 2.x 提供了 email.mime、email.header、email.charset、email.encoders、email.iterators 等库来处理邮件,这些库设计得过于烦琐,用起来极为不便,因此读者应该尽快改为使用最新的 Python 库。本教程不会介绍这些过时的库。具体可参考 https://docs.python.org/3/library/email.html 页面的说明。

    由于程序打开了 smtplib 调试模式(将 debuglevel 设置为 1),因此在运行该程序时,可以看到 SMTP 发送邮件的详细过程。当程序运行结束后,将可以在收件人邮箱中看到一封新邮件(可能在垃圾邮件内),如下图所示Python smtplib模块详解:发送邮件

    上面这封邮件是最简单的,没有为该邮件设置主题、发件人名字和收件人名字,邮件内容也只是简单的文本。如果要为邮件设置主题、发件人名字和收件人名字,那么只需设置 EmailMessage 对象的相应属性即可。如果程序要将邮件内容改为 HTML 内容,那么只需将调用 EmailMessage的set_content() 方法的第二个参数设置为 html 即可。

    例如,如下程序只是对 EmailMessage 进行了修改:

    import smtplib
    from email.message import EmailMessage
    
    # 定义SMTP服务器地址:
    smtp_server = 'smtp.qq.com'
    # 定义发件人地址
    from_addr = 'kongyeeku@qq.com'
    # 定义登录邮箱的密码
    password = '123456'
    # 定义收件人地址:
    to_addr = 'kongyeeku@163.com'
    
    # 创建SMTP连接
    #conn = smtplib.SMTP(smtp_server, 25)
    conn = smtplib.SMTP_SSL(smtp_server,465)
    conn.set_debuglevel(1)
    conn.login(from_addr, password)            #①
    # 创建邮件对象
    msg = EmailMessage()
    # 设置邮件内容,指定邮件内容为HTML
    msg.set_content('<h2>邮件内容</h2>' +
        '<p>您好,这是一封来自Python的邮件<p>' +
        '来自<a href="http://c.biancheng.net">C语言中文网</a>', 'html', 'utf-8')
    msg['subject'] = '一封HTML邮件'
    msg['from'] = '李刚 <%s>' % from_addr
    msg['to'] = '新用户 <%s>' % to_addr
    # 发送邮件
    conn.sendmail(from_addr, [to_addr], msg.as_string())
    # 退出连接
    conn.quit()

    该程序与上一个程序基本相似,只是在调用 set_content() 方法时将第二个参数改为了“html”。


    下载网 » Python smtplib模块详解:发送邮件

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元