Python基于smtplib协议实现发送邮件


Posted in Python onJune 03, 2020

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。

python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。

Python创建 SMTP 对象语法如下:

import smtplib

smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )

参数说明:

  • host: SMTP 服务器主机。 你可以指定主机的ip地址或者域名如: runoob.com,这个是可选参数。
  • port: 如果你提供了 host 参数, 你需要指定 SMTP 服务使用的端口号,一般情况下 SMTP 端口号为25。
  • local_hostname: 如果 SMTP 在你的本机上,你只需要指定服务器地址为 localhost 即可。

代码如下

#coding=utf-8
"""
===========================
Author:多测师_王sir
Time:2020/5/20 17:24
Wechat:15367499889
Company:上海多测师信息有限公司
===========================
"""

import os
import smtplib
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from common.handleconfig import conf


def send_email(filename, title):
  """
  发送邮件的功能函数
  :param filename: 文件的路径
  :param title:  邮件的主题
  :return:
  """
  # 第一步:连接邮箱的smtp服务器,并登录
  smtp = smtplib.SMTP_SSL(host=conf.get("email", "host"), port=conf.getint("email", "port"))
  smtp.login(user=conf.get("email", "user"), password=conf.get("email", "pwd"))

  # 第二步:构建一封邮件
  # 创建一封多组件的邮件
  msg = MIMEMultipart()

  with open(filename, "rb") as f:
    content = f.read()
  # 创建邮件文本内容
  text_msg = MIMEText(content, _subtype="html", _charset="utf8")
  # 添加到多组件的邮件中
  msg.attach(text_msg)
  # 创建邮件的附件
  report_file = MIMEApplication(content)
  report_file.add_header('content-disposition', 'attachment', filename=os.path.split(filename)[-1])
  # 将附件添加到多组件的邮件中
  msg.attach(report_file)

  # 主题
  msg["Subject"] = title
  # 发件人
  msg["From"] = conf.get("email", "from_addr")
  # 收件人
  msg["To"] = conf.get("email", "to_addr")

  # 第三步:发送邮箱
  smtp.send_message(msg, from_addr=conf.get("email", "from_addr"), to_addrs=conf.get("email", "to_addr"))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实例分享:快速查找出被挂马的文件
Jun 08 Python
Python缩进和冒号详解
Jun 01 Python
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
Oct 12 Python
Selenium定位元素操作示例
Aug 10 Python
django+xadmin+djcelery实现后台管理定时任务
Aug 14 Python
用Python将mysql数据导出成json的方法
Aug 21 Python
Django ManyToManyField 跨越中间表查询的方法
Dec 18 Python
使用Template格式化Python字符串的方法
Jan 22 Python
python binascii 进制转换实例
Jun 12 Python
使用python实现离散时间傅里叶变换的方法
Sep 02 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
Feb 14 Python
python 牛顿法实现逻辑回归(Logistic Regression)
Oct 15 Python
Pytorch环境搭建与基本语法
Jun 03 #Python
如何学习Python time模块
Jun 03 #Python
使用openCV去除文字中乱入的线条实例
Jun 02 #Python
Python能做什么
Jun 02 #Python
什么是Python中的匿名函数
Jun 02 #Python
学习python需要有编程基础吗
Jun 02 #Python
python中if及if-else如何使用
Jun 02 #Python
You might like
PHP 源代码压缩小工具
2009/12/22 PHP
如何用C语言编写PHP扩展的详解
2013/06/13 PHP
php递归创建目录的方法
2015/02/02 PHP
php中mysql连接方式PDO使用详解
2015/02/25 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
2017/02/15 PHP
js特殊字符转义介绍
2013/11/05 Javascript
javascript 拷贝节点cloneNode()使用介绍
2014/04/03 Javascript
IE6-8中Date不支持toISOString的修复方法
2014/05/04 Javascript
js去除输入框中所有的空格和禁止输入空格的方法
2014/06/09 Javascript
利用prop-types第三方库对组件的props中的变量进行类型检测
2017/05/02 Javascript
JavaScript实现三级联动菜单实例代码
2017/06/26 Javascript
使用jquery-easyui的布局layout写后台管理页面的代码详解
2019/06/19 jQuery
解决layui轮播图有数据不显示的情况
2019/09/16 Javascript
微信小程序如何获取用户头像和昵称
2019/09/23 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
2020/12/30 Vue.js
在Python中处理字符串之isdecimal()方法的使用
2015/05/20 Python
深入解析Python中的变量和赋值运算符
2015/10/12 Python
python itchat实现微信好友头像拼接图的示例代码
2017/08/14 Python
使用celery执行Django串行异步任务的方法步骤
2019/06/06 Python
Python 生成一个从0到n个数字的列表4种方法小结
2019/11/28 Python
给 TensorFlow 变量进行赋值的方式
2020/02/10 Python
python离线安装外部依赖包的实现
2020/02/13 Python
Java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用?
2015/08/04 面试题
python+selenium小米商城红米K40手机自动抢购的示例代码
2021/03/24 Python
数控技术专业推荐信
2013/11/01 职场文书
旅游与酒店管理的自我评价分享
2013/11/03 职场文书
表彰先进的通报
2014/01/31 职场文书
法制宣传口号
2014/06/16 职场文书
授权委托书格式范文
2014/08/02 职场文书
我的中国梦演讲稿500字
2014/08/19 职场文书
仲裁协议书
2014/09/26 职场文书
博士生专家推荐信
2014/09/26 职场文书
拉贝日记观后感
2015/06/05 职场文书
四年级作文之植物
2019/09/20 职场文书
斗罗大陆八大特殊魂兽,龙族始祖排榜首,第五最残忍(翠魔鸟)
2022/03/18 国漫
Zabbix对Kafka topic积压数据监控的问题(bug优化)
2022/07/07 Servers