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常用的文件及文件路径、目录操作方法汇总介绍
May 21 Python
Python实现FTP上传文件或文件夹实例(递归)
Jan 16 Python
python笔记:mysql、redis操作方法
Jun 28 Python
基于Python中单例模式的几种实现方式及优化详解
Jan 09 Python
面向初学者的Python编辑器Mu
Oct 08 Python
详解python Todo清单实战
Nov 01 Python
IntelliJ IDEA安装运行python插件方法
Dec 10 Python
python实现基于信息增益的决策树归纳
Dec 18 Python
对python 合并 累加两个dict的实例详解
Jan 21 Python
python经典趣味24点游戏程序设计
Jul 26 Python
如何使用python3获取当前路径及os.path.dirname的使用
Dec 13 Python
python合并多个excel文件的示例
Sep 23 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
在Windows系统上安装PHP运行环境文字教程
2010/07/19 PHP
php curl 伪造IP来源的实例代码
2012/11/01 PHP
PHP之预定义接口详解
2015/07/29 PHP
PHP实现动态web服务器方法
2015/07/29 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
2017/05/30 PHP
PHP中OpenSSL加密问题整理
2017/12/14 PHP
PHP注释语法规范与命名规范详解篇
2018/01/21 PHP
javaScript call 函数的用法说明
2010/04/09 Javascript
node.js中的socket.io入门实例
2014/04/26 Javascript
JavaScript重载函数实例剖析
2016/05/13 Javascript
异步加载JS、CSS代码(推荐)
2016/06/15 Javascript
AngularJs bootstrap搭载前台框架——基础页面
2016/09/01 Javascript
es6基础学习之解构赋值
2018/12/10 Javascript
Vue核心概念Action的总结
2019/01/18 Javascript
python实现k均值算法示例(k均值聚类算法)
2014/03/16 Python
Python实现CET查分的方法
2015/03/10 Python
浅谈Python数据类型之间的转换
2016/06/08 Python
Python使用matplotlib实现绘制自定义图形功能示例
2018/01/18 Python
python使用tensorflow深度学习识别验证码
2018/04/03 Python
520使用Python实现“我爱你”表白
2020/05/20 Python
在vscode中启动conda虚拟环境的思路详解
2020/12/25 Python
html5页面结构_动力节点Java学院整理
2017/07/10 HTML / CSS
美国男装连锁零售商:Men’s Wearhouse
2016/10/14 全球购物
迪斯尼假期(欧洲、中东及非洲):Disney Holidays EMEA
2021/02/15 全球购物
家居设计专业个人自荐信范文
2013/11/26 职场文书
《罗布泊,消逝的仙湖》教学反思
2014/03/01 职场文书
区域销售经理岗位职责
2015/04/02 职场文书
2015年税务稽查工作总结
2015/05/26 职场文书
仙境之桥观后感
2015/06/16 职场文书
工程进度款催款函
2015/06/24 职场文书
尊师重教主题班会
2015/08/14 职场文书
2016年119消防宣传日活动总结
2016/04/05 职场文书
Spring事务管理下synchronized锁失效问题的解决方法
2022/03/31 Java/Android
Golang map映射的用法
2022/04/22 Golang
Nginx静态压缩和代码压缩提高访问速度详解
2022/05/30 Servers
Java实现贪吃蛇游戏的示例代码
2022/09/23 Java/Android