导读

在编程中,时不时会遇到一些项目是需要反馈或监控一些消息(异常)的,这时候最方便的就是使用邮件来实现了,通过邮件将程序的消息反馈回来。那么Python如何发送邮件呢?

以下是泰泰结合QQ邮箱特性,编写的 Python发送邮件代码,这里只需稍作修改就可以使用了,该代码发送的邮件,是经过SSL加密处理的。

具体的参数,这里就不展开讲了,大家后面可以关注泰泰发布的Python3学习教程。

纯文本邮件

# -*- conding:UTF-8 -*-
import smtplib
from email.mime.text import MIMEText
from email.header import Header

mail_server = "smtp.qq.com"
port = "465"

sender = "********@qq.com"     # 发件人
password = "a**********a"       # 发件人smtp密码
receiver = ["*******@qq.com"]      # 收信人

# 正文内容
mail_msg = 'Python3 学习教程...'

massage = MIMEText(mail_msg, "plain", "utf-8")
massage['From'] = Header("发件人邮箱名称", "utf-8")
massage['To'] = Header("收件人邮箱名称", "utf-8")
massage['Subject'] = Header("Python 学习资料", "utf-8")

try:
    mail = smtplib.SMTP_SSL(mail_server, port)
    status = mail.login(sender, password)
    print(status)
    mail.sendmail(sender, receiver, massage.as_string())
    print("邮件发送成功!")
    mail.quit()
except:
    mail.quit()
    print("邮件发送失败!")

说明:这里只需修改 sender、password、receiver 程序就可以直接使用了,"From" 和 "To" 中的 邮件名称 可以自定义,不过一般是使用注册邮件时,发送方和接收方的注册名称,"Subject" 是邮件的主题(即标题),mail_msg 是邮件的内容。

邮件内容为 纯文本 时,使用“plain”模式发送!

内容为网页的邮件

# -*- conding:UTF-8 -*-
import smtplib
from email.mime.text import MIMEText
from email.header import Header

mail_server = "smtp.qq.com"
port = "465"

sender = "********@qq.com"     # 发件人
password = "************"       # 发件人smtp密码
receiver = ["*******@qq.com"]      # 收信人

# 正文内容
mail_msg = """
<p>Python3 学习教程...</p>
<p><a href="http://www.taitaiblog.com/43.html">Python 编程技术目录</a></p>
"""

massage = MIMEText(mail_msg, "html", "utf-8")
massage['From'] = Header("发件人邮箱名称", "utf-8")
massage['To'] = Header("收件人邮箱名称", "utf-8")
massage['Subject'] = Header("Python 学习资料", "utf-8")

try:
    mail = smtplib.SMTP_SSL(mail_server, port)
    status = mail.login(sender, password)
    print(status)
    mail.sendmail(sender, receiver, massage.as_string())
    print("邮件发送成功!")
    mail.quit()
except:
    mail.quit()
    print("邮件发送失败!")

说明:邮件内容为 网页格式 时,使用 “html” 模式发送;mail_msg 中的内容为 html 代码。

邮件中嵌入附件

# -*- conding:UTF-8 -*-
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart

mail_server = "smtp.qq.com"
port = "465"

sender = "********@qq.com"     # 发件人
password = "a**********a"       # 发件人smtp密码
receiver = ["*******@qq.com"]      # 收信人

# 创建一个"正文+附件"的实例
massage = MIMEMultipart()

massage['From'] = Header("发件人邮箱名称", "utf-8")
massage['To'] = Header(收件人邮箱名称", "utf-8")
massage['Subject'] = Header("Python 学习资料", "utf-8")

# 正文内容
mail_msg = """
<p>Python3 学习教程...</p>
<p><a href="http://www.taitaiblog.com/43.html">Python 编程技术目录</a></p>
"""

# 邮件正文部分
massage.attach(MIMEText(mail_msg, "html", "utf-8"))

# 邮件附件部分
att = MIMEText(open('./new.txt').read(), 'base64', 'utf-8')
att["Content-Type"] = 'application/octet-stream'
att["Content-Disposition"] = 'attachment; filename="my_file.txt"'    # filename 为邮件上显示的名称
massage.attach(att)

try:
    mail = smtplib.SMTP_SSL(mail_server, port)      # 连接邮箱服务器
    status = mail.login(sender, password)       # 登录
    print(status)
    mail.sendmail(sender, receiver, massage.as_string())    # 发送邮件
    print("邮件发送成功!")
    mail.quit()         # 登出
except:
    mail.quit()
    print("邮件发送失败!")

说明:发送多附件时,只需复制 “邮件附件部分” 的代码即可(新建另一个对象)!

邮件内容嵌入图片

# -*- conding:UTF-8 -*-
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage

mail_server = "smtp.qq.com"
port = "465"

sender = "********@qq.com"     # 发件人
password = "a**********a"       # 发件人smtp密码
receiver = ["*******@qq.com"]      # 收信人

# 创建一个"正文+附件"的实例
massage = MIMEMultipart()

massage['From'] = Header("发件人邮箱名称", "utf-8")
massage['To'] = Header("收件人邮箱名称", "utf-8")
massage['Subject'] = Header("Python 学习资料", "utf-8")

# 邮件正文内容
mail_msg = """
<p>Python3 学习教程...</p>
<p><a href="http://www.taitaiblog.com/43.html">Python 编程技术目录</a></p>
<p>图片演示:</p>
<p><img src="cid:image1"></p>
"""

# 邮件正文处理部分
massage.attach(MIMEText(mail_msg, "html", "utf-8"))

# 邮件附件部分
att = MIMEText(open('./new.txt').read(), 'base64', 'utf-8')
att["Content-Type"] = 'application/octet-stream'
att["Content-Disposition"] = 'attachment; filename="my_file.txt"'    # fileame 为邮件上显示的名称
massage.attach(att)

# 邮件正文嵌入图片
fp = open('./test.jpg', 'rb')
msgImage = MIMEImage(fp.read())
fp.close()
# 定义图片 ID,在 HTML 文本中引用
msgImage.add_header('Content-ID', '<image1>')
massage.attach(msgImage)

try:
    mail = smtplib.SMTP_SSL(mail_server, port)      # 连接邮件服务器
    status = mail.login(sender, password)       # 登录
    print(status)
    mail.sendmail(sender, receiver, massage.as_string())       # 发送邮件
    print("邮件发送成功!")
    mail.quit()     # 登出
except:
    mail.quit()
    print("邮件发送失败!")

说明:邮件中的图片是通过 ID 号来嵌入的,嵌入多个图片时,只需使用不同的ID来区分即可!

最后修改:2022 年 07 月 09 日
如果觉得我的文章对你有用,请随意赞赏