欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

利用python发送邮件

程序员文章站 2024-03-18 14:41:04
...

前言

本人编程基础很薄弱,单纯的学习语法的过程也让人觉都十分枯燥。所以试图利用python做一些实际的操作来激励自己往下深入学习。并且根据大多数人的经验,基于实际的项目来学习编程是最快最有效的方式。

正文

Python有两个内置库:smtplib和email,能够实现邮件功能,smtplib库负责发送邮件,email库负责构造邮件格式和内容。
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。

import smtplib
import email
# 负责构造文本
from email.mime.text import MIMEText
# 负责构造图片
from email.mime.image import MIMEImage
# 负责将多个对象集合起来
from email.mime.multipart import MIMEMultipart
from email.header import Header

# SMTP服务器,这里使用163邮箱
mail_host = "smtp.163.com"
# 发件人邮箱
mail_sender = "13161*****@163.com"
# 邮箱授权码,注意这里不是邮箱密码,如何获取邮箱授权码,请看本文最后教程
mail_license = "TQZJOEZ********"
# 收件人邮箱,可以为多个收件人
mail_receivers = ["32608****@qq.com"]
# 邮箱密码
mail_pass = "*********"


mm = MIMEMultipart('related')

# 邮件主题
subject_content = """Python邮件测试"""
# 设置发送者,注意严格遵守格式,里面邮箱为发件人邮箱
mm["From"] = "sender_name<aaa@qq.com>"
#mm["From"] = Header("菜鸟教程", 'utf-8')
# 设置接受者,注意严格遵守格式,里面邮箱为接受者邮箱
mm["To"] = "receiver_1_name<aaa@qq.com>"
#mm['To'] = Header("测试", 'utf-8')
# 设置邮件主题
mm["Subject"] = Header(subject_content,'utf-8')

msgAlternative = MIMEMultipart('alternative')
mm.attach(msgAlternative)

# 邮件正文内容
body_content = """
<p>Python 邮件发送测试...</p>
<p><a href="http://www.runoob.com">这是一个链接</a></p>
<p>图片演示:</p>
<p><img src="cid:image1"></p>
"""
# 构造文本,参数1:正文内容,参数2:文本格式,参数3:编码方式
message_text = MIMEText(body_content,"html","utf-8")
# 向MIMEMultipart对象中添加文本对象
msgAlternative.attach(message_text)

# 指定图片为当前目录
fp = open('D:\\deng\\6.jpg', 'rb')
msgImage = MIMEImage(fp.read())
fp.close()

# 定义图片 ID,在 HTML 文本中引用
msgImage.add_header('Content-ID', '<image1>')
mm.attach(msgImage)



# 构造附件1,传送当前目录下的 test.txt 文件
att1 = MIMEText(open('D:\\deng\\123.txt', 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
# 这里的filename可以任意写,写什么名字,邮件中显示什么名字
att1["Content-Disposition"] = 'attachment; filename="123.txt"'
mm.attach(att1)


try:
    smtpObj = smtplib.SMTP()
    smtpObj.connect(mail_host, 25)    # 25 为 SMTP 端口号
    smtpObj.set_debuglevel(1)
    smtpObj.login(mail_sender,mail_license)
    smtpObj.sendmail(mail_sender, mail_receivers, mm.as_string())
    print("邮件发送成功")
    smtpObj.quit()
except smtplib.SMTPException:
    print("Error: 无法发送邮件")


效果如下图
利用python发送邮件
如何获取邮箱授权码?
以163为例,点击设置->POP3/SMTP/IMAP。可以看到“开启服务”的状态。先点击关闭,然后再重新开启SMTP服务,就能获得邮箱授权码。

利用python发送邮件

参考

python菜鸟教程
干货 | 解放双手,用Python实现自动发送邮件