Python SMTP 发送纯文本邮件

来源:互联网 发布:淘宝怎么批量添加水印 编辑:程序博客网 时间:2024/05/16 05:03

利用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 serversmtp_server = "smtp.qq.com"# dmtp 端口号smtp_port = 465"""这里我们要注意几点:    1. QQ邮箱的smtp server为:smtp.qq.com     2. smtp端口号通常为25,但是qq要求为465"""# 发件人地址from_address = "xxxxxxxxx@qq.com"# 发件人密码(注意,这里的密码就是上面我们提到的 授权码 )password = "xxxxxxxx"# 收件人地址receiver_address = "xxxxxxxx@qq.com"# 普通的,我们使用SMTP即可,而QQ要求SMTP_SSLsmtpObject = 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对象变成strsmtpObject.quit()
  • 发送成功
    发送成功

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

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

# -*- coding: utf-8 -*-from email.mime.text import MIMETextfrom email.header import Headerimport smtplib# smtp基本信息smtp_server = "smtp.qq.com"smtp_port = 465# 邮件基本信息from_address = "xxxxxxxx@qq.com"password = "xxxxxxxx"receiver_address = "xxxxxx@qq.com"# 邮件构造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的要求以及端口号的不同都是我们需要注意的问题。