Python SMTP 发送纯文本邮件

利用Python的smtp和email模块发送邮件

最近,开始学习python,因为从未接触过python,所以这几天抽时间看了一下基础知识,然后就看到了python邮件这一块。

因为使用qq邮箱发送,所以也碰到了一些问题。所以,在此对使用python,利用qq邮箱发送邮件做一个总结,希望能够帮助到大家。

准备工作

  • 进入qq邮箱

  • 进入设置 - 账户
    进入设置

  • 开启POP3/SMTP (这里一步一步来就行了)
    开启SMTP
    在开启SMTP服务的时候,一定要记住系统所提供的授权码。如果忘记了可以点击 生成授权码 重新获取。
    具体我们可以查看:什么是授权码?

代码实现

Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。

  • 构件一封纯文本的邮件
# 导入email模块
from email.mime.text import MIMEText

# 创建邮件
message = MIMEText('hello, send by Python...', 'plain', 'utf-8')
"""
构建MIMEText时,我们要注意:
    1. 第一个参数就是邮件正文
    2. 第二个参数是MIME的subtype,传入'plain',最终的MIME就是'text/plain'。
    3. 最后一定要用utf-8编码保证多语言兼容性。
"""
  • 通过SMTP发送邮件
# 导入smtplib模块
import stmplib

# smtp server
smtp_server = "smtp.qq.com"

# dmtp 端口号
smtp_port = 465

"""
这里我们要注意几点:
    1. QQ邮箱的smtp server为:smtp.qq.com 
    2. smtp端口号通常为25,但是qq要求为465
"""

# 发件人地址
from_address = "[email protected]"

# 发件人密码(注意,这里的密码就是上面我们提到的 授权码 )
password = "xxxxxxxx"

# 收件人地址
receiver_address = "[email protected]"

# 普通的,我们使用SMTP即可,而QQ要求SMTP_SSL
smtpObject = smtplib.SMTP_SSL(smtp_server, smtp_port)

# set_debuglevel(1)打印出和SMTP服务器交互的所有信息
smtpObject.set_debuglevel(1)

# 登录到SMTP服务器
smtpObject.login(from_address, password)

# 发送邮件(一次可以发送给多个人,所以传入一个list)
smtpObject.sendmail(from_address, [receiver_address], message.as_string()) # as_string()把MIMEText对象变成str

smtpObject.quit()
  • 发送成功
    发送成功

  • 源码
    我们可以看到,发送邮件时对发件人、收件人、主题都 没有设置

因为邮件主题、如何显示发件人、收件人等信息并不是通过SMTP协议发给MTA,而是包含在发给MTA的文本中的,所以,我们必须把From、To和Subject添加到MIMEText中,才是一封完整的邮件。

# -*- coding: utf-8 -*-

from email.mime.text import MIMEText
from email.header import Header
import smtplib


# smtp基本信息
smtp_server = "smtp.qq.com"
smtp_port = 465

# 邮件基本信息
from_address = "[email protected]"
password = "xxxxxxxx"
receiver_address = "[email protected]"

# 邮件构造
message = MIMEText("Hello, I am sending email by python", "plain", "utf-8")
message["From"] = Header("Python小白", "utf-8")
message["To"] = Header(receiver_address, "utf-8")
message["Subject"] = Header("来自Python SMTP的问候...", "utf-8")

# 发送邮件
smtpObject = smtplib.SMTP_SSL(smtp_server, smtp_port)
smtpObject.set_debuglevel(1)
smtpObject.login(from_address, password)
smtpObject.sendmail(from_address, [receiver_address], message.as_string())
smtpObject.quit()

最后,通过以上部分,不出什么以外的话,我们就可以通过Python发送一封完整的邮件啦。

重点就是QQ邮箱的特殊性了,SSL的要求以及端口号的不同都是我们需要注意的问题。

猜你喜欢

转载自blog.csdn.net/RabitMountain/article/details/78348415