用Python发电子邮件

使用的库

这个程序涉及两个库:smtplibemail

这两个库都是Python自带的,所以不需要额外的下载安装,此外,这次使用的Python版本为2.7。

思路步骤

总体思路很简单,就像我们平常上网是通过HTTP协议一样,我们发送邮件是通过SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)来传输的,而现在我们需要做的就是

  1. 设置好SMTP服务器地址
  2. 告诉服务器我们的邮箱地址和密码
  3. 设置要发送的邮件内容,例如发送者地址,接收者地址,邮件主题,邮件正文,附件等
  4. 将设置好的邮件内容传给服务器,并发送

第一步和第二步就是需要使用smtplib ,这是一个帮助我们设置SMTP服务器的库,那么具体如何设置呢?实际上我们需要的就是一个SMTP服务器的地址,例如QQ邮箱的SMTP服务器的地址就是:smtp.qq.com,端口号是465587

qq邮箱的SMTP地址

server = smtplib.SMTP("smtp.qq.com", 587)

第三步就是使用 email ,这是一个帮助我们设置邮件内容的库,包括主题、正文等,然后用设置好的服务器发送设置好的邮件内容。

用赛克君的QQ邮箱发送:

另一个邮箱接收(outlook邮箱)

outlook邮箱内一个带PDF附件的邮件,可以看到附件被正确的附上了

程序源码

发送无附件的邮件

# 注意此处使用QQ邮箱作为发送邮箱,如果要用其他邮箱请更改 server 中的服务器地址

import smtplib
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart

fromaddr = "发送者的邮箱地址"
toaddr = "接收者的邮箱地址"
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
# 邮件主题
msg['Subject'] = "Hooah"
# 邮件正文
body = "HAHAHA!"

msg.attach(MIMEText(body, 'plain'))

server = smtplib.SMTP("smtp.qq.com")
server.starttls()
server.login(fromaddr , "发送者的邮箱密码")
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()

发送有附件的邮件

# 注意此处使用QQ邮箱作为发送邮箱,如果要用其他邮箱请更改 server 中的服务器地址

import smtplib
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email import encoders

fromaddr = "发送者的邮箱地址"
toaddr = "接收者的邮箱地址"
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
# 邮件主题
msg['Subject'] = "Hooah"
# 邮件正文
body = "HAHAHA!"

msg.attach(MIMEText(body, 'plain'))

# 附件
filename = "AttachmentTest/kaiti.pdf"
attachment = open(filename, 'rb')
part = MIMEBase('application', 'octet-stream')
# 这也可以: part = MIMEBase('application', 'pdf')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment', filename=filename)

msg.attach(part)

# 设置SMTP
server = smtplib.SMTP("smtp.qq.com")
server.starttls()
server.login(fromaddr , "发送者的邮箱密码")
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()

发送成功就可以看到如下的提示:

END

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏比原链

Bytomd 助记词恢复密钥体验指南

Gitee地址:https://gitee.com/BytomBlockchain/bytom

1252
来自专栏阮一峰的网络日志

HTTPS 升级指南

上一篇文章我介绍了 HTTP/2 协议 ,它只有在 HTTPS 环境才会生效。 为了升级到 HTTP/2 协议,必须先启用 HTTPS。如果你不了解 HTTPS...

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

如何使用CentOS 7上的Let's Encrypt来保护Nginx

Let's Encrypt是一个新的证书颁发机构(CA),它提供了一种获取和安装免费TLS / SSL证书的简便方法,从而在Web服务器上启用加密的HTTPS。...

890
来自专栏Laoqi's Linux运维专列

使用Python 3发邮件

1929
来自专栏Android先生

RxJava2 实战知识梳理(1) - 后台执行耗时操作,实时通知 UI 更新

接触RxJava2已经很久了,也看了网上的很多文章,发现基本都是在对RxJava的基本思想介绍之后,再去对各个操作符进行分析,但是看了之后感觉过了不久就...

932
来自专栏技术博文

ssh password and passphrase

ssh password and passphrase 1、ssh-keygen -t rsa     采用默认路径,输入passphrase。  2、scp ...

3806
来自专栏编程之旅

腾讯云上免费部署HTTPS

最近在写微信小程序的时候,微信小程序需要所有的请求接口都部署在https协议上,于是就研究了一下怎么在腾讯云上部署https环境,发现还是比较简单的,首先我的服...

4.4K5
来自专栏野路子程序员

给网站配置上HTTPS加密访问(Centos7+Apache+SSL证书)

6385
来自专栏编程

如何建立一个OpenVPN服务器在Ubuntu 14.04

当连接到不受信任的网络(例如酒店或咖啡店的WiFi)时,是否想从智能手机或笔记本电脑安全,安全地访问互联网?虚拟专用网络(VPN)允许您将不可信的网络私密安全地...

5981
来自专栏Python、Flask、Django

Python 编写自动发送邮件脚本

1464

扫码关注云+社区