Python发送以整个文件夹的内容为附件的邮件的教程


Posted in Python onMay 06, 2015

由于我经常需要备份文件夹下的内容到邮件里面,每个打开邮件,上传文件,发送,太过麻烦,其实每次发送的文件都是放在固定 置的,只是邮件标题不同而已,于是用 python 为自己写了个发送文件到邮箱的小工具,在任意目录下执行该脚本,并指定邮件标 ,就将指定文件夹下的文件发送到邮箱中备份起来 。

#!/usr/bin/env python
# coding: utf-8

from smtplib import SMTP, quotedata, CRLF, SMTPDataError
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email import Encoders
from sys import stderr, stdout
import os
import sys

class ExtendedSMTP(SMTP):
  def data(self, msg):
    self.putcmd("data")
    (code,repl)=self.getreply()
    if self.debuglevel > 0 : print >> stderr, "data:", (code, repl)
    if code != 354:
      raise SMTPDataError(code,repl)
    else:
      q = quotedata(msg)
      if q[-2:] != CRLF:
        q = q + CRLF
      q = q + "." + CRLF

      # begin modified send code
      chunk_size = 2048
      bytes_sent = 0

      while bytes_sent != len(q):
        chunk = q[bytes_sent:bytes_sent+chunk_size]
        self.send(chunk)
        bytes_sent += len(chunk)
        if hasattr(self, "callback"):
          self.callback(bytes_sent, len(q))
      # end modified send code

      (code,msg)=self.getreply()
      if self.debuglevel >0 : print>>stderr, "data:", (code,msg)
      return (code,msg)

def callback(progress, total):
  percent = 100. * progress / total
  stdout.write('\r')
  stdout.write("%s bytes sent of %s [%2.0f%%]" % (progress, total, percent))
  stdout.flush()
  if percent >= 100: stdout.write('\n')

def sendmail(subject):
  MAIL_FROM = 'mymail@qq.com'
  MAIL_TO = ['mymail@qq.com']
  BAK_DIR = '/path/to/bak/folder'

  msg = MIMEMultipart()
  msg['From'] = MAIL_FROM
  msg['Subject'] = subject

  msg.attach( MIMEText('test send attachment') )
  for filename in os.listdir(BAK_DIR):
    part = MIMEBase('application', "octet-stream")
    part.set_payload(open(os.path.join(BAK_DIR, filename),"rb").read() )
    Encoders.encode_base64(part)
    part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(filename))
    msg.attach(part)

  try:
    smtp = ExtendedSMTP()
    smtp.callback = callback
    smtp.connect('smtp.qq.com', 25)
    smtp.login('mymail', 'mypwd')
    smtp.sendmail(MAIL_FROM, MAIL_TO, msg.as_string())
    smtp.close()
    os.system('rm -f %s/*' % BAK_DIR)
  except Exception, e:
    print e

if __name__ == '__main__':
  if len(sys.argv) == 1:
    print 'Please specific a subject'
    print 'Usage: send_files <MAIL_SUBJECT>'
  else:
    sendmail(sys.argv[1])

安装:

配置好收件人,发件人,smtp地址,用户名,密码及要发送文件所在的路径。

将文件保存为 send_files,保存到 /usr/bin 下面。

然后设置文件权限为可执行:

$ chmod +x send_files

用法:

$ send_files '邮件标题'

还带有进度条哦~~

Python 相关文章推荐
python正则匹配抓取豆瓣电影链接和评论代码分享
Dec 27 Python
Python模块搜索概念介绍及模块安装方法介绍
Jun 03 Python
KMP算法精解及其Python版的代码示例
Jun 01 Python
Python简单生成8位随机密码的方法
May 24 Python
Python使用LDAP做用户认证的方法
Jun 20 Python
使用 Python 处理 JSON 格式的数据
Jul 22 Python
python模拟鼠标点击和键盘输入的操作
Aug 04 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
Apr 16 Python
python操作链表的示例代码
Sep 27 Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
Mar 03 Python
k-means & DBSCAN 总结
Apr 27 Python
Python常遇到的错误和异常
Nov 02 Python
在Linux中通过Python脚本访问mdb数据库的方法
May 06 #Python
python中黄金分割法实现方法
May 06 #Python
使用rpclib进行Python网络编程时的注释问题
May 06 #Python
pymongo给mongodb创建索引的简单实现方法
May 06 #Python
Python中用PIL库批量给图片加上序号的教程
May 06 #Python
python写入中英文字符串到文件的方法
May 06 #Python
python使用xlrd模块读写Excel文件的方法
May 06 #Python
You might like
全国FM电台频率大全 - 14 江西省
2020/03/11 无线电
调频问题解答
2021/03/01 无线电
PHP5.2下chunk_split()函数整数溢出漏洞 分析
2007/06/06 PHP
windows8.1下Apache+Php+MySQL配置步骤
2015/10/30 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
2016/03/07 PHP
利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
2017/06/27 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
JS实现单击输入框弹出选择框效果完整实例
2015/12/14 Javascript
JavaScript 程序错误Cannot use 'in' operator to search的解决方法
2017/07/10 Javascript
vue开发调试神器vue-devtools使用详解
2017/07/13 Javascript
vue 项目如何引入微信sdk接口的方法
2017/12/18 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
jQuery实现鼠标点击处心形漂浮的炫酷效果示例
2018/04/12 jQuery
vue-router之nuxt动态路由设置的两种方法小结
2018/09/26 Javascript
async/await优雅的错误处理方法总结
2019/01/30 Javascript
js模拟F11页面全屏显示
2019/09/17 Javascript
Vue3项目打包后部署到服务器 请求不到后台接口解决方法
2020/02/06 Javascript
[00:35]DOTA2上海特级锦标赛 Newbee战队宣传片
2016/03/03 DOTA
python正则表达式re模块详解
2014/06/25 Python
django rest framework 数据的查找、过滤、排序的示例
2018/06/25 Python
使用Python3内置文档高效学习以及官方中文文档
2019/05/19 Python
Django接收post前端返回的json格式数据代码实现
2019/07/31 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
2019/11/04 Python
Python实现线性插值和三次样条插值的示例代码
2019/11/13 Python
使用Django和Postgres进行全文搜索的实例代码
2020/02/13 Python
浅谈Python中os模块及shutil模块的常规操作
2020/04/03 Python
html5指南-2.如何操作document metadata
2013/01/07 HTML / CSS
C++面试题目
2013/06/25 面试题
公司营业员的工作总结自我评价
2013/10/05 职场文书
幼儿教师寄语集锦
2014/04/03 职场文书
化学工程专业求职信
2014/08/10 职场文书
2015上半年个人工作总结
2015/07/27 职场文书
html+css实现分层金字塔的实例
2021/06/02 HTML / CSS
MySQL中一条update语句是如何执行的
2022/03/16 MySQL
PYTHON InceptionV3模型的复现详解
2022/05/06 Python
Python中的 No Module named ***问题及解决
2022/07/23 Python