Python发送邮件功能示例【使用QQ邮箱】


Posted in Python onDecember 04, 2018

本文实例讲述了Python发送邮件功能。分享给大家供大家参考,具体如下:

这里以QQ邮箱为例说明

登录邮箱点账号

Python发送邮件功能示例【使用QQ邮箱】

开启smtp

Python发送邮件功能示例【使用QQ邮箱】

开启时会要求你发送一条短信,发送完成后点已发送。

就有授权码了

Python发送邮件功能示例【使用QQ邮箱】

代码如下,只需更改发件人、收件人等信息即可

# encoding: utf-8
import logging
import smtplib
from email.mime.text import MIMEText
import email.utils
from datetime import datetime
_logger = logging.getLogger('utils.mailclient')
class MailClient(object):
  def __init__(self, host, port, user, pwd=''):
    self._host = host
    self._port = port
    self._user = user
    self._pwd = pwd
    self._smtp_server = None
    self._debug = False
    self._keepalive = True
  def set_keepalive(self, keepalive):
    self._keepalive = keepalive
  def set_debug(self, debug):
    self._debug = debug
    if self._smtp_server is not None:
      self._smtp_server.set_debuglevel(self._debug)
  def _connect(self):
    if self._smtp_server is None:
      _smtp_server = smtplib.SMTP(self._host, self._port)
      _smtp_server.ehlo()
      _smtp_server.starttls()
      _smtp_server.set_debuglevel(self._debug)
      if self._pwd:
        _smtp_server.login(self._user, self._pwd)
      self._smtp_server = _smtp_server
    return self._smtp_server
  def _dispose(self):
    if self._smtp_server is not None:
      self._smtp_server.quit()
      self._smtp_server = None
  def send(self, to_addrs, subject, content, isdispose=True):
    _smtp_server = self._connect()
    if not isinstance(to_addrs, list):
      to_addrs = [to_addrs]
    _msg = MIMEText(content, 'html', 'utf-8')
    _msg['Subject'] = subject
    _msg['From'] = self._user
    _msg['To'] = '; '.join(to_addrs)
    _msg['Date'] = datetime.now().strftime('%Y-%d-%m %H:%M:%S')
    _smtp_server.sendmail(self._user, to_addrs, _msg.as_string())
    isdispose and (not self._keepalive) and self._dispose()
  def send_mails(self, mails):
    _smtp_server = self._connect()
    for mail in mails:
      self._send_mail(mail.get('to'), mail.get('subject'), mail.get('content'), False)
    (not self._keepalive) and self._dispose()
  def close(self):
    self._dispose()
if __name__ == '__main__':
  logging.basicConfig(level=logging.DEBUG,
            format='%(asctime)s %(name)s %(levelname)s:%(message)s',
            datefmt='%Y-%m-%d %H:%M:%S')
  import time
  s = MailClient('smtp.qq.com', 587, '10010@qq.com', '授权码') #  注意,此处端口要用587,465端口是ssl使用的。
  s.set_keepalive(False)
  s.set_debug(True)
  st = time.time()
  s.send('收信人邮箱地址', '测试', '测试邮件 From QQ') #要发送的账号、标题、内容
  print(time.time() - st)

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python实现遍历windows所有窗口并输出窗口标题的方法
Mar 13 Python
python中利用xml.dom模块解析xml的方法教程
May 24 Python
用Python进行简单图像识别(验证码)
Jan 19 Python
Java编程迭代地删除文件夹及其下的所有文件实例
Feb 10 Python
python psutil库安装教程
Mar 19 Python
python 查找文件名包含指定字符串的方法
Jun 05 Python
Python Pandas 获取列匹配特定值的行的索引问题
Jul 01 Python
对python 树状嵌套结构的实现思路详解
Aug 09 Python
wxpython布局的实现方法
Nov 01 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
Feb 14 Python
详解Pycharm安装及Django安装配置指南
Sep 15 Python
Python中如何处理常见报错
Jan 18 Python
python无限生成不重复(字母,数字,字符)组合的方法
Dec 04 #Python
uwsgi+nginx部署Django项目操作示例
Dec 04 #Python
解决python中无法自动补全代码的问题
Dec 04 #Python
Django框架实现的简单分页功能示例
Dec 04 #Python
Django开发的简易留言板案例详解
Dec 04 #Python
对python的bytes类型数据split分割切片方法
Dec 04 #Python
Python 从相对路径下import的方法
Dec 04 #Python
You might like
法压式咖啡之制作法
2021/03/03 冲泡冲煮
php 信息采集程序代码
2009/03/17 PHP
了解Joomla 这款来自国外的php网站管理系统
2010/03/11 PHP
php取整函数ceil,floo,round的用法及介绍
2013/08/31 PHP
PHP使用CURL获取302跳转后的地址实例
2014/05/04 PHP
PHP程序员常见的40个陋习,你中了几个?
2014/11/20 PHP
Laravel 5 框架入门(二)构建 Pages 的管理功能
2015/04/09 PHP
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
解决jquery1.9不支持browser对象的问题
2013/11/13 Javascript
jQuery中siblings()方法用法实例
2015/01/08 Javascript
简介JavaScript中的sub()方法的使用
2015/06/08 Javascript
javascript连续赋值问题
2015/07/08 Javascript
使用postMesssage()实现跨域iframe页面间的信息传递方法
2016/03/29 Javascript
vue2.0+webpack环境的构造过程
2016/11/08 Javascript
浅谈对Angular中的生命周期钩子的理解
2017/07/31 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
2017/09/22 Javascript
浅谈Vue网络请求之interceptors实际应用
2018/02/28 Javascript
在vue中使用Autoprefixed的方法
2018/07/27 Javascript
小程序如何定位所在城市及发起周边搜索
2020/02/11 Javascript
vue动态设置路由权限的主要思路
2021/01/13 Vue.js
Python实现简单状态框架的方法
2015/03/19 Python
用Python解决计数原理问题的方法
2016/08/04 Python
Python-接口开发入门解析
2019/08/01 Python
python中upper是做什么用的
2020/07/20 Python
python实现画图工具
2020/08/27 Python
使用CSS3创建动态菜单效果
2015/07/10 HTML / CSS
amaze ui 的使用详细教程
2020/08/19 HTML / CSS
Stuarts London美国/加拿大:世界领先的独立男装零售商之一
2019/03/18 全球购物
全球领先的在线cosplay服装商店:RoleCosplay
2020/01/18 全球购物
几个Shell Script面试题
2014/04/18 面试题
学校司机岗位职责
2013/11/14 职场文书
班级标语大全
2014/06/21 职场文书
个人股份转让协议书范本
2015/01/28 职场文书
详解CocosCreator项目结构机制
2021/04/14 Javascript
Python中的xlrd模块使用整理
2021/06/15 Python
二维码条形码生成的JavaScript脚本库
2022/07/07 Javascript