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 20 Python
Python AES加密模块用法分析
May 22 Python
浅谈numpy库的常用基本操作方法
Jan 09 Python
python调用系统ffmpeg实现视频截图、http发送
Mar 06 Python
numpy matrix和array的乘和加实例
Jun 28 Python
Python+pandas计算数据相关系数的实例
Jul 03 Python
python实现维吉尼亚算法
Mar 20 Python
python3 requests库文件上传与下载实现详解
Aug 22 Python
TensorFlow实现从txt文件读取数据
Feb 05 Python
python matplotlib:plt.scatter() 大小和颜色参数详解
Apr 14 Python
Python3实现个位数字和十位数字对调, 其乘积不变
May 03 Python
PyCharm中配置PySide2的图文教程
Jun 18 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 获取百度的热词数据的代码
2012/02/18 PHP
PHP中运用jQuery的Ajax跨域调用实现代码
2012/02/21 PHP
php excel reader读取excel内容存入数据库实现代码
2012/12/06 PHP
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
2014/10/27 PHP
PHP批量生成图片缩略图的方法
2015/06/18 PHP
Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解
2019/10/11 PHP
js判断变量是否空值的代码
2008/10/26 Javascript
Javascript 面向对象(三)接口代码
2012/05/23 Javascript
倒记时60刷新网页的js代码
2014/02/18 Javascript
在jquery中的ajax方法怎样通过JSONP进行远程调用
2014/04/04 Javascript
JavaScript编程中window的location与history对象详解
2015/10/26 Javascript
js仿百度登录页实现拖动窗口效果
2016/03/11 Javascript
Sort()函数的多种用法
2016/03/20 Javascript
JSONP跨域请求
2017/03/02 Javascript
使用vue官方提供的模板vue-cli搭建一个helloWorld案例分析
2018/01/16 Javascript
微信小程序-可移动菜单的实现过程详解
2019/06/24 Javascript
Javascript模块化机制实现原理详解
2020/04/02 Javascript
Angular+ionic实现折叠展开效果的示例代码
2020/07/29 Javascript
闭包在python中的应用之translate和maketrans用法详解
2014/08/27 Python
Python3如何解决字符编码问题详解
2017/04/23 Python
Python检查图片是否损坏及图片类型是否正确过程详解
2019/09/30 Python
python音频处理的示例详解
2020/12/23 Python
CSS3实现鼠标悬停显示扩展内容
2016/08/24 HTML / CSS
浅谈css3中的渐进增强和优雅降级
2017/12/01 HTML / CSS
蜜蜂引路教学反思
2014/02/04 职场文书
大学生村官考核材料
2014/05/23 职场文书
优秀电子工程系毕业生求职信
2014/05/24 职场文书
孝老爱亲模范事迹材料
2014/05/25 职场文书
二手房购房协议书范本
2014/10/05 职场文书
护理实习生带教计划
2015/01/16 职场文书
出纳岗位职责范本
2015/03/31 职场文书
2015年超市收银员工作总结
2015/04/25 职场文书
目标责任书格式范文
2015/05/11 职场文书
教师听课学习心得体会
2016/01/15 职场文书
2016教师党员学习心得体会
2016/01/21 职场文书
mysql联合索引的使用规则
2021/06/23 MySQL