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命令行参数解析OptionParser类用法实例
Oct 09 Python
python中lambda与def用法对比实例分析
Apr 30 Python
浅谈Python黑帽子取代netcat
Feb 10 Python
使用TensorFlow实现二分类的方法示例
Feb 05 Python
matplotlib.pyplot画图并导出保存的实例
Dec 07 Python
解决TensorFlow模型恢复报错的问题
Feb 06 Python
Python类和实例的属性机制原理详解
Mar 21 Python
python datetime处理时间小结
Apr 16 Python
python相对企业语言优势在哪
Jun 12 Python
Python获取浏览器窗口句柄过程解析
Jul 25 Python
Pycharm及python安装详细教程(图解)
Jul 31 Python
在python中实现导入一个需要传参的模块
May 12 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
PHP.MVC的模板标签系统(二)
2006/09/05 PHP
php采用ajax数据提交post与post常见方法总结
2014/11/10 PHP
php使用PDO操作MySQL数据库实例
2014/12/30 PHP
php 修改上传文件大小限制实例详解
2016/10/23 PHP
列表内容的选择
2006/06/30 Javascript
js无刷新操作table的行和列
2014/03/27 Javascript
兼容主流浏览器的JS复制内容到剪贴板
2014/12/12 Javascript
javascript 动态创建表格
2015/01/08 Javascript
JS实现FLASH幻灯片图片切换效果的方法
2015/03/04 Javascript
javascript点击按钮实现隐藏显示切换效果
2016/02/03 Javascript
React快速入门教程
2017/01/17 Javascript
jQuery模拟下拉框选择对应菜单的内容
2017/03/07 Javascript
Bootstrap popover 实现鼠标移入移除显示隐藏功能方法
2018/01/24 Javascript
vue axios请求超时的正确处理方法
2018/04/02 Javascript
angular实现input输入监听的示例
2018/08/31 Javascript
JS使用Dijkstra算法求解最短路径
2019/01/17 Javascript
Vue实现商品飞入购物车效果(电商项目)
2019/11/26 Javascript
Vue 防止短时间内连续点击后多次触发请求的操作
2020/11/11 Javascript
使用python编写脚本获取手机当前应用apk的信息
2014/07/21 Python
python利用装饰器进行运算的实例分析
2015/08/04 Python
python实现接口并发测试脚本
2019/06/25 Python
linux环境下Django的安装配置详解
2019/07/22 Python
Python更新所有已安装包的操作
2020/02/13 Python
如何用Python提取10000份log中的产品信息
2021/01/14 Python
值得收藏的HTML5资源(学习html5的朋友可以收藏下)
2010/07/20 HTML / CSS
原生 JS+CSS+HTML 实现时序图的方法
2019/07/31 HTML / CSS
Theflamel意大利:女士奢华服装、鞋子和配件
2020/01/11 全球购物
面向对象概念面试题(.NET)
2016/11/04 面试题
Python文件操作的面试题
2013/06/22 面试题
个人应聘自我评价分享
2013/11/18 职场文书
公益活动邀请函
2014/02/05 职场文书
煤矿安全知识竞赛活动总结
2014/07/07 职场文书
2014机关干部学习“焦裕禄精神”思想汇报
2014/09/19 职场文书
党员转正党支部意见
2015/06/02 职场文书
使用GO语言实现Mysql数据库CURD的简单示例
2021/08/07 Golang
python中mongodb包操作数据库
2022/04/19 Python