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基础教程之数字处理(math)模块详解
Mar 25 Python
Perl中著名的Schwartzian转换问题解决实现
Jun 02 Python
使用Kivy将python程序打包为apk文件
Jul 29 Python
使用python实现knn算法
Dec 20 Python
python使用turtle绘制分形树
Jun 22 Python
python 不同方式读取文件速度不同的实例
Nov 09 Python
Python面向对象基础入门之设置对象属性
Dec 11 Python
实例讲解Python中整数的最大值输出
Mar 17 Python
PyTorch 解决Dataset和Dataloader遇到的问题
Jan 08 Python
Python Merge函数原理及用法解析
Sep 16 Python
Python使用scapy模块发包收包
May 07 Python
Python编写nmap扫描工具
Jul 21 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
PHP入门
2006/10/09 PHP
php adodb介绍
2009/03/19 PHP
PHP var_dump遍历对象属性的函数与应用代码
2010/06/04 PHP
关于PHPDocument 代码注释规范的总结
2013/06/25 PHP
destoon安全设置中需要设置可写权限的目录及文件
2014/06/21 PHP
PHP中使用Imagick实现各种图片效果实例
2015/01/21 PHP
PHP实现返回JSON和XML的类分享
2015/01/28 PHP
PHP SESSION的增加、删除、修改、查看操作
2015/03/20 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
2016/03/17 PHP
php 使用mpdf实现指定字段配置字体样式的方法
2019/07/29 PHP
JQuery 国际象棋棋盘 实现代码
2009/06/26 Javascript
用 Javascript 验证表单(form)中多选框(checkbox)值
2009/09/08 Javascript
用js来获取上传的文件名纯粹是为了美化而用
2013/10/23 Javascript
js实现缓冲运动效果的方法
2015/04/10 Javascript
jQuery树形下拉菜单特效代码分享
2015/08/15 Javascript
js实现获取div坐标的方法
2015/11/16 Javascript
非常实用的vue导航钩子
2017/03/20 Javascript
jQuery表单设置值的方法
2017/06/30 jQuery
vue组件实现文字居中对齐的方法
2017/08/23 Javascript
使用FileReader API创建Vue文件阅读器组件
2018/04/03 Javascript
微信小程序调用微信支付接口的实现方法
2019/04/29 Javascript
webpack4之如何编写loader的方法步骤
2019/06/06 Javascript
初学vue出现空格警告的原因及其解决方案
2019/10/31 Javascript
vscode 使用Prettier插件格式化配置使用代码详解
2020/08/10 Javascript
微信小程序组件生命周期的踩坑记录
2021/03/03 Javascript
一篇不错的Python入门教程
2007/02/08 Python
Python中read()、readline()和readlines()三者间的区别和用法
2017/07/30 Python
Python使用 Beanstalkd 做异步任务处理的方法
2018/04/24 Python
flask框架蓝图和子域名配置详解
2020/01/25 Python
实例教程 利用html5和css3打造一款创意404页面
2014/10/20 HTML / CSS
行政人事专员岗位职责
2014/03/05 职场文书
纪律教育月活动总结
2014/08/26 职场文书
幼儿园老师个人总结
2015/02/28 职场文书
大学生简历自我评价2015
2015/03/03 职场文书
Django使用redis配置缓存的方法
2021/06/01 Redis
pandas数值排序的实现实例
2021/07/25 Python