用 Python 发电子邮件

更新

这里我会列出对本文的更新。

  • 2020-04-08:修改格式,保持风格统一。
  • 2021-04-26:升级到 Python 3,丰富细节。

使用的库

这个程序涉及两个库:smtplibemail

这两个库都是Python自带的,所以不需要额外的下载安装,Python版本为3.8(其他 3.x 应该也可以)。

思路步骤

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

  1. 开启邮箱 SMTP 服务
  2. 设置好 SMTP 服务器地址
  3. 告诉服务器我们的邮箱地址和密码(如果是 QQ 邮箱,那么则是授权码
  4. 设置要发送的邮件内容,例如发送者地址,接收者地址,邮件主题,邮件正文,附件等
  5. 将设置好的邮件内容传给服务器,并发送

以 QQ 邮箱为例,开启 SMTP 的路径是:邮箱首页 → 设置 → 账户 → POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 → 开启。
开启 QQ 邮箱 SMTP 服务
第一步和第二步就是需要使用 smtplib,这是一个帮助我们设置 SMTP 服务器的库,那么具体如何设置呢?实际上我们需要的就是一个 SMTP 服务器的地址,例如 QQ 邮箱的 SMTP 服务器的地址就是:smtp.qq.com,端口号是 465587
qq邮箱的SMTP地址
QQ 邮箱的 SMTP 地址

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

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

用赛克君的QQ邮箱发送:
这里写图片描述

另一个邮箱接收(outlook 邮箱)
这里写图片描述

outlook 邮箱内一个带 PDF 附件的邮件,可以看到附件被正确的附上了
这里写图片描述

程序源码

发送无附件的邮件

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

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart 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.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.base 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

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

secsilm

来一根火腿?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值