# 导读

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

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

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

# 纯文本邮件

```python
# -*- 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”模式发送!

# 内容为网页的邮件

```python
# -*- 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 = """

Python3 学习教程...

Python 编程技术目录

"""

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 代码。

# 邮件中嵌入附件

```python
# -*- 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 = """

Python3 学习教程...

Python 编程技术目录

"""

# 邮件正文部分
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("邮件发送失败!")
```

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

# 邮件内容嵌入图片

```python
# -*- 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 = """

Python3 学习教程...

Python 编程技术目录

图片演示:

"""

# 邮件正文处理部分
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', '')
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来区分即可!

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