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 相关文章推荐
以一段代码为实例快速入门Python2.7
Mar 31 Python
python使用socket进行简单网络连接的方法
Apr 29 Python
分享一下Python 开发者节省时间的10个方法
Oct 02 Python
python各种语言间时间的转化实现代码
Mar 23 Python
Python中二维列表如何获取子区域元素的组成
Jan 19 Python
Python实现的直接插入排序算法示例
Apr 29 Python
Python tkinter label 更新方法
Oct 11 Python
解决Python3.5+OpenCV3.2读取图像的问题
Dec 05 Python
Python设计模式之建造者模式实例详解
Jan 17 Python
python实现的生成word文档功能示例
Aug 23 Python
PyCharm无法引用自身项目解决方式
Feb 12 Python
如何在Python对Excel进行读取
Jun 04 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将access数据库转换到mysql数据库的方法
2014/12/24 PHP
PHP折半(二分)查找算法实例分析
2018/05/12 PHP
Yii框架函数简单用法分析
2019/09/09 PHP
求得div 下 img的src地址的js代码
2007/02/28 Javascript
js word表格动态添加代码
2010/06/07 Javascript
javascript跨域刷新实现代码
2011/01/01 Javascript
jquery动态更换设置背景图的方法
2014/03/25 Javascript
node.js中的fs.ftruncate方法使用说明
2014/12/15 Javascript
js获取内联样式的方法
2015/01/27 Javascript
jQuery选择器源码解读(四):tokenize方法的Expr.preFilter
2015/03/31 Javascript
Underscore.js 1.3.3 中文注释翻译说明
2015/06/25 Javascript
Express URL跳转(重定向)的实现方法
2017/04/07 Javascript
Vue自定义事件(详解)
2017/08/19 Javascript
vue element-ui table表格滚动加载方法
2018/03/02 Javascript
微信小程序 WXML节点信息查询详解
2019/07/29 Javascript
javascript实现blob加密视频源地址的方法
2019/08/08 Javascript
javscript 数组扁平化的实现
2020/02/03 Javascript
js实现简单的贪吃蛇游戏
2020/04/23 Javascript
[02:41]DOTA2英雄基础教程 谜团
2013/12/10 DOTA
[06:23]2014DOTA2西雅图国际邀请赛 小组赛7月12日TOPPLAY
2014/07/12 DOTA
[54:57]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第二场 1月8日
2021/03/11 DOTA
python打开url并按指定块读取网页内容的方法
2015/04/29 Python
Python冒泡排序注意要点实例详解
2016/09/09 Python
Python中Django 后台自定义表单控件
2017/03/28 Python
Python书单 不将就
2017/07/11 Python
Python字符编码与函数的基本使用方法
2017/09/30 Python
浅谈python requests 的put, post 请求参数的问题
2019/01/02 Python
Python根据当前日期取去年同星期日期
2019/04/14 Python
Python实现FTP文件传输的实例
2019/07/07 Python
python opencv实现gif图片分解的示例代码
2019/12/13 Python
python匿名函数lambda原理及实例解析
2020/02/07 Python
python两种注释用法的示例
2020/10/09 Python
Columbia Sportswear法国官网:全球户外品牌
2020/09/25 全球购物
普通简短的个人自我评价
2014/02/15 职场文书
二手房购房协议书范本
2014/10/05 职场文书
初中班干部工作总结
2015/08/10 职场文书