[快学Python3]SMTP发送邮件

概述

在本文中,主要介绍使用smtplib进行文本格式、HTML格式和带附件的邮件发送处理。

  • 导入smtplib模块
import smtplib
  • 关键函数说明
# 创建smtp对象
smtp = smtplib.SMTP([host [, port [, localhost]]] )

# 参数说明
# host: smtp服务地址,例如126邮箱的是:smtp.126.com
# port: smtp服务端口
# localhost: 如果你的smtp服务在本机,则只需指定localhost即可


# 发送邮件函数
SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])

# 参数说明
# from_addr: 邮件发送地址
# to_addrs: 邮件接收地址列表
# msg: 邮件内容
# mail_options, rcpt_options  可选参数,暂时不需要了解

文本邮件示例

下面演示如何通过126邮箱发送纯文本邮件。

# -*- coding:utf-8 -*-

__author__ = '苦叶子'
import smtplib
from email.mime.text import MIMEText
from email.header import Header

if __name__ == "__main__":
    print("发送文本邮件示例")

    # 邮件发送者
    sender = "deep_test@126.com"

    # 邮件接收地址列表
    # 请将xxx改为你的126邮箱名或整个改为你的目标接收邮箱地址
    receivers = "xxx@126.com"

    # 发送内容构建
    # text标识发送内容为文本格式
    msg = MIMEText("微信公众号号:开源优测", "plain", "utf-8")
    msg["From"] = "deep_test@126.com"
    msg["To"] = receivers

    # 构建邮件标题
    msg["Subject"] = Header("开源优测_DeepTest", "utf-8")

    # smtp服务
    smtpserver = "smtp.126.com"
    smtpport = 25

    # 发送人邮件用户名或专用于smtp账户用户名
    username = "deep_test"

    # 发送人邮件密码或专用于smtp账户的密码
    password = "123456a"

    # 构建smtp对象
    smtp = smtplib.SMTP()

    # 连接到smtp服务
    con = smtp.connect(smtpserver, smtpport)    
    print("连接结果: ", con)

    # 登录smtp服务
    log = smtp.login(username, password)    
    print("登录结果:", log)

    # 发送邮件
    print(receivers)
    res = smtp.sendmail(sender, receivers, msg.as_string())    
    print("邮件发送结果: ", res)

    # 退出
    smtp.quit()    
    print("send email finish")

运行上述代码,你的目标邮箱将收到一封测试邮件。

注:最好改为你的自己的邮箱smtp账户,过段时间我会将我的smtp账户启用服务关闭

HTML格式邮件

下面我们试着发送html格式的邮件。

将文本格式邮件代码中的以下部分替换如下:

# 发送内容构建

# html标识发送内容为文本格式
msg = MIMEText("<p>微信公众号号:开源优测</p><a href='http://www.testingunion.com'>开源优测社区</a>>",
         "html", 
         "utf-8")

完整的代码示例如下:

# -*- coding:utf-8 -*-

__author__ = '苦叶子'

import smtplib

from email.mime.text import MIMEText
from email.header import Header

if __name__ == "__main__":    
    print("发送HTML邮件示例")

    # 邮件发送者
    sender = "deep_test@126.com"

    # 邮件接收地址列表
    # 请将xxx改为你的126邮箱名或整个改为你的目标接收邮箱地址
    receivers = "xxx@126.com"

    # 发送内容构建
    # html标识发送内容为文本格式
    msg = MIMEText("<p>微信公众号号:开源优测</p><a href='http://www.testingunion.com'>开源优测社区</a>>", 
        "html", 
        "utf-8")
    msg["From"] = "deep_test@126.com"
    msg["To"] = receivers

    # 构建邮件标题
    msg["Subject"] = Header("开源优测_DeepTest", "utf-8")

    # smtp服务
    smtpserver = "smtp.126.com"
    smtpport = 25

    # 发送人邮件用户名或专用于smtp账户用户名
    username = "deep_test"

    # 发送人邮件密码或专用于smtp账户的密码
    password = "123456a"

    # 构建smtp对象
    smtp = smtplib.SMTP()

    # 连接到smtp服务
    con = smtp.connect(smtpserver, smtpport)    
    print("连接结果: ", con)

    # 登录smtp服务
    log = smtp.login(username, password)
    print("登录结果:", log)

    # 发送邮件
    print(receivers)
    res = smtp.sendmail(sender, receivers, msg.as_string())    
    print("邮件发送结果: ", res)

    # 退出
    smtp.quit()    print("send email finish")

注:

  • 将plain改为html标识邮件内容为html格式
  • 邮件内容采用html语言来格式化

附件格式邮件

下面看看如何发送带附件的邮件。 需要导入新的类,如下:

from email.mime.multipart import MIMEMultipart

需要使用MIMEMultipart构建内容结构,关键代码如下:

# 发送内容构建# html标识发送内容为文本格式
msg = MIMEMultipart()
msg["From"] = "deep_test@126.com"
msg["To"] = receivers

# 构建邮件标题
msg["Subject"] = Header("开源优测_DeepTest", "utf-8")

# 构建邮件正文内容
msg.attach(MIMEText("微信公众号:开源优测", "plain", "utf-8"))
# 构造附件,多个附件同理
attach1 = MIMEText(open("发送附件邮件.py", 'rb').read(), "base64", "utf-8")
attach1["Content-Type"] = "application/octet-stream"

# 这里filename随意写,将会在邮件中显示
attach1["Content-Disposition"] = "attrachment;filename=code.py"

# 关联附件到邮件中msg.attach(attach1)

完整的代码示例如下:

# -*- coding:utf-8 -*-

__author__ = '苦叶子'

import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart

if __name__ == "__main__":    
    print("发送HTML邮件示例")    
    # 邮件发送者
    sender = "deep_test@126.com"

    # 邮件接收地址列表
    # 请将xxx改为你的126邮箱名或整个改为你的目标接收邮箱地址
    receivers = "xxx@126.com"

    # 发送内容构建
    # html标识发送内容为文本格式
    msg = MIMEMultipart()
    msg["From"] = "deep_test@126.com"
    msg["To"] = receivers    
    
    # 构建邮件标题
    msg["Subject"] = Header("开源优测_DeepTest", "utf-8")    
    
    # 构建邮件正文内容
    msg.attach(MIMEText("微信公众号:开源优测", "plain", "utf-8"))    

    # 构造附件,多个附件同理
    attach1 = MIMEText(open("发送附件邮件.py", 'rb').read(), "base64", "utf-8")
    attach1["Content-Type"] = "application/octet-stream"

    # 这里filename随意写,将会在邮件中显示
    attach1["Content-Disposition"] = "attrachment;filename=code.py"

    # 关联附件到邮件中
    msg.attach(attach1)    
    
    # smtp服务
    smtpserver = "smtp.126.com"
    smtpport = 25

    # 发送人邮件用户名或专用于smtp账户用户名
    username = "deep_test"

    # 发送人邮件密码或专用于smtp账户的密码
    password = "123456a"

    # 构建smtp对象
    smtp = smtplib.SMTP()    
    
    # 连接到smtp服务
    con = smtp.connect(smtpserver, smtpport)    
    print("连接结果: ", con)    
    
    # 登录smtp服务
    log = smtp.login(username, password)    
    
    print("登录结果:", log)    
    
    # 发送邮件
    print(receivers)
    res = smtp.sendmail(sender, receivers, msg.as_string())    
    
    print("邮件发送结果: ", res)    
    
    # 退出
    smtp.quit()    
    
    print("send email finish")

小结

上述各示例最终邮件收到如下所示:

  • 构建文本和html格式的邮件使用MIMEText构建,使用plain标识文本内容格式,使用html标识html内容格式
  • 对于附件格式则需使用MIMEMultipart

原文发布于微信公众号 - 开源优测(DeepTest)

原文发表时间:2017-07-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏zingpLiu

Nginx(一)安装及启停

    我发现很多博客排版杂乱,表达不清,读者看了往往云里雾里。我此前的博客也是如此,我自己很不满意。今起,每一篇博客都会用心写,此前的博客我也会尽力修改。至少...

25920
来自专栏张善友的专栏

Microsoft同步工具SyncToy

SyncToy是微软开发的一款同步工具,帮助你快速的拷贝,移动,重命名和删除不同文件夹或者不同电脑之间的文件。SyncToy是微软同步框架的一个实际应用例子. ...

1.3K70
来自专栏Danny的专栏

配置ODBC数据源

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

1.7K40
来自专栏面朝大海春暖花开

前端小零碎

当进行事件绑定的时候可以直接obj.onclick=function(){}进行操作。当是进行for循环进行事件绑定就会出现问题,只会监听到最后数组最后的数据。

12330
来自专栏逸鹏说道

【通用方法】CentOS7 安装 Mogodb3.4(在线 && 离线)

平台之大势何人能挡? 带着你的Net飞奔吧!http://www.cnblogs.com/dunitian/p/4822808.html 先说推荐安装:在线安装...

37560
来自专栏iOSDevLog

Action API目录

31890
来自专栏黑白安全

黑客专用XP系统-黑客渗透测试系统

宙斯是一种先进的侦察工具,旨在简化Web应用程序侦察。Zeus拥有强大的内置URL解析引擎,多种搜索引擎兼容性,能够从禁用和webcache URL中提取URL...

78720
来自专栏云计算教程系列

如何在CentOS 7上使用OTRS设置帮助台系统

OTRS是一个开源的票证请求系统。它为用户,客户,IT人员,IT服务和任何外部组织提供单点联系。该程序是用Perl编写的,支持各种数据库(MySQL,Postg...

1.1K40
来自专栏蓝天

LINUX系统性能调谐

邓延军 (deng.yanjun@163.com), 硕士研究生, 西安电子科技大学软件工程研究所

22720
来自专栏云计算教程系列

如何在Ubuntu上安装ownCloud

ownCloud是一个自由且开源的个人云存储解决方案,包括两个部分:服务器和客户端。ownCloud 最早由KDE开发者Frank Karlitschek于20...

36840

扫码关注云+社区

领取腾讯云代金券