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使用django获取用户IP地址的方法
May 11 Python
tensorflow中next_batch的具体使用
Feb 02 Python
详解Python if-elif-else知识点
Jun 11 Python
Python根据已知邻接矩阵绘制无向图操作示例
Jun 23 Python
两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法
Mar 05 Python
Python opencv实现人眼/人脸识别以及实时打码处理
Apr 29 Python
python numpy 矩阵堆叠实例
Jan 17 Python
python实现批量修改文件名
Mar 23 Python
Python Dict找出value大于某值或key大于某值的所有项方式
Jun 05 Python
详解python中GPU版本的opencv常用方法介绍
Jul 24 Python
浅谈Python 钉钉报警必备知识系统讲解
Aug 17 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配合jquery实现增删操作具体实例
2013/12/12 PHP
yii框架表单模型使用及以数组形式提交表单数据示例
2014/04/30 PHP
php正则替换处理HTML页面的方法
2015/06/17 PHP
中高级PHP程序员应该掌握哪些技术?
2016/09/23 PHP
thinkphp3.2.0 setInc方法 源码全面解析
2018/01/29 PHP
js验证表单第二部分
2006/11/25 Javascript
面向对象的编程思想在javascript中的运用上部
2009/11/20 Javascript
jquery的相对父元素和相对文档定位示例代码
2013/08/02 Javascript
json数据的列循环示例
2013/09/06 Javascript
js中判断对象是否为空的三种实现方法
2013/12/23 Javascript
JavaScript实现可拖拽的拖动层Div实例
2015/08/05 Javascript
不得不分享的JavaScript常用方法函数集(上)
2015/12/23 Javascript
基于Bootstrap的Metronic框架实现页面链接收藏夹功能
2016/08/29 Javascript
vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理
2017/03/06 Javascript
详解JS数据类型的值拷贝函数(深拷贝)
2017/07/13 Javascript
简单谈谈React中的路由系统
2017/07/25 Javascript
two.js之实现动画效果示例
2017/11/06 Javascript
浅析微信扫码登录原理(小结)
2018/10/29 Javascript
简单了解vue.js数组的常用操作
2019/06/17 Javascript
使用JavaScript获取Django模板指定键值数据
2020/05/27 Javascript
Python的Bottle框架中实现最基本的get和post的方法的教程
2015/04/30 Python
python中的格式化输出用法总结
2016/07/28 Python
浅谈python中的占位符
2017/11/09 Python
python实现对csv文件的列的内容读取
2018/07/04 Python
python3去掉string中的标点符号方法
2019/01/22 Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
2019/04/16 Python
使用python快速实现不同机器间文件夹共享方式
2019/12/22 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
2020/04/20 Python
python logging通过json文件配置的步骤
2020/04/27 Python
HTML5 拖放(Drag 和 Drop)详解与实例代码
2017/09/14 HTML / CSS
阿玛尼美妆加拿大官方商城:Giorgio Armani Beauty加拿大
2017/10/24 全球购物
企业治理工作自我评价
2013/09/26 职场文书
电力安全事故反思
2014/04/27 职场文书
表彰大会策划方案
2014/05/13 职场文书
2014群众路线学习笔记
2014/11/06 职场文书
社会主义核心价值观主题教育活动总结
2015/05/07 职场文书