美文网首页
使用python smtplib发送邮件

使用python smtplib发送邮件

作者: AibWang | 来源:发表于2020-01-08 20:48 被阅读0次
  • SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
    python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。
    用到的包和库:
# -*- coding: utf-8 -*-
import smtplib
from email.mime.text import MIMEText
from email.header import Header

下面展示一个简单的例子(来自https://www.runoob.com/python/python-email.html):

sender = 'sneder@163.com' # 发送者的邮箱
receivers = ['receiver@qq.com', ]  # 接收者的邮箱,这是一个列表,支持多个发送对象
 
# email.mime.text.MIMEText(text, subtype='plain', charset=None, *, policy=compat32)
# used to create MIME objects of major type text (https://docs.python.org/3/library/email.mime.html)
# text 为文本内容(str)
# subtype 为文本格式(str, e.g 'plain', 'base64')
# charset为编码格式(e..g 'utf-8')
message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8')
message['From'] = Header("菜鸟教程", 'utf-8')   # 设置发送者名称
message['To'] =  Header("测试", 'utf-8')        # 设置接收者名称
 
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')   # 设置邮件主题

try:
    smtpObj = smtplib.SMTP('localhost')
    smtpObj.sendmail(sender, receivers, message.as_string())
    print "邮件发送成功"
except smtplib.SMTPException:
    print "Error: 无法发送邮件"

上述发送方式是本机发送,必须是本机已安装了支持 SMTP 的服务,如:sendmail。

===================================================

  • 如果我们使用的计算机未安装SMTP服务,则可以使用邮件服务商的 提供的 SMTP (也叫做第三方邮件客户端第三方邮件服务器)进行发送。
    此时需要使用到smtplib.SMTP()对象
    首先,设置第三方邮件服务器
# 第三方 SMTP 服务器
mail_host="smtp.163.com"  #设置服务器域名

第三方服务器域名可以通过查看自己的邮箱设置找到

image.png

接下来,设置发送者邮箱(用户名),密码(口令)

mail_user="XXXX"    #用户名
mail_pass="XXXXXX"   #口令

注意:此处的口令并不是邮箱的密码,而是第三方邮件客户端授权码,需要开启客户端授权并设置口令(授权码,该授权码与邮箱登录密码不能相同)。开启客户端授权流程如下图所示:

image.png
sender = 'from@runoob.com'
receivers = ['429240967@qq.com']
 
message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8')
message['From'] = Header("菜鸟教程", 'utf-8')
message['To'] =  Header("测试", 'utf-8')
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')

try:
    smtpObj = smtplib.SMTP() 
    smtpObj.connect(mail_host, 25)    # SMTP 端口号为25,也可以使用SSL 安全链接端口,默认为465
    smtpObj.login(mail_user,mail_pass)  
    smtpObj.sendmail(sender, receivers, message.as_string())
    print "邮件发送成功"
except smtplib.SMTPException:
    print "Error: 无法发送邮件"
  • 如果需要发送的文本很长,不方便在python脚本中直接赋值,可以通过读取文件,再转换为字符串的方式。
inf = "./input.txt"
    # read input text
    with open(inf, 'r', encoding='utf-8') as fp:
        mystrs = fp.readlines()
    assert fp, "Input file error!! Check your inuput file {}".format(inf)
    # convert list to strings
    text = "".join(mystrs)
message = MIMEText(text, 'plain', 'utf-8')
  • smtplib当然也是支持发送附件的,关于如何发送附件,请参考:

https://www.runoob.com/python/python-email.html
https://blog.csdn.net/qq503690160/article/details/89916301

本文大部分内容参考上述两个博客,并成功测试了上述发送邮件过程

相关文章

网友评论

      本文标题:使用python smtplib发送邮件

      本文链接:https://www.haomeiwen.com/subject/mbzsactx.html