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中的from..import绝对导入语句
Jun 21 Python
Numpy数组的保存与读取方法
Apr 04 Python
pandas数据框,统计某列数据对应的个数方法
Apr 11 Python
python中的for循环
Sep 28 Python
python中的subprocess.Popen()使用详解
Dec 25 Python
简单了解django文件下载方式
Feb 10 Python
Django 5种类型Session使用方法解析
Apr 29 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
Sep 29 Python
Python 实现RSA加解密文本文件
Dec 30 Python
python pyhs2 的安装操作
Apr 07 Python
python基础之while循环语句的使用
Apr 20 Python
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
Jun 03 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连接数据库实现注册页面的增删改查操作
2016/03/27 PHP
php 截取GBK文档某个位置开始的n个字符方法
2017/03/08 PHP
laravel清除视图缓存的代码
2019/10/23 PHP
JS查看对象功能代码
2008/04/25 Javascript
javascript Onunload与Onbeforeunload使用小结
2009/12/31 Javascript
Javascript中获取出错代码所在文件及行数的代码
2010/09/23 Javascript
js关闭子窗体刷新父窗体实现方法
2012/12/04 Javascript
js解析与序列化json数据(三)json的解析探讨
2013/02/01 Javascript
原生js编写设为首页兼容ie、火狐和谷歌
2014/06/05 Javascript
JS实现倒计时和文字滚动的效果实例
2014/10/29 Javascript
JavaScript中的console.profile()函数详细介绍
2014/12/29 Javascript
js简单抽奖代码
2015/01/16 Javascript
JS实现支持多选的遍历下拉列表代码
2015/08/20 Javascript
简单理解vue中track-by属性
2016/10/26 Javascript
JS调用Android、Ios原生控件
2017/01/06 Javascript
Vue.js分页组件实现:diVuePagination的使用详解
2018/01/10 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
2018/08/14 Javascript
JS实现点击拉拽轮播图pc端移动端适配
2018/09/05 Javascript
vueScroll实现移动端下拉刷新、上拉加载
2019/03/22 Javascript
[04:12]第二届DOTA2亚洲邀请赛选手传记-Newbee.Sccc
2017/04/03 DOTA
python获取本机所有IP地址的方法
2018/12/26 Python
利用Python检测URL状态
2019/07/31 Python
python实现计算器简易版
2020/12/17 Python
python 列表推导和生成器表达式的使用
2021/02/01 Python
css3图片边框border-image的用法
2017/06/30 HTML / CSS
Martinelli官方商店:西班牙皮鞋和高跟鞋品牌
2019/07/30 全球购物
ZWILLING双立人法国网上商店:德国刀具锅具厨具品牌
2019/08/28 全球购物
alice McCALL官网:澳大利亚时尚品牌
2020/11/16 全球购物
药物学专业学生的自我评价
2013/10/27 职场文书
护理学中专毕业生求职信
2013/11/11 职场文书
八一演出活动方案
2014/02/03 职场文书
幼儿园毕业园长感言
2014/02/24 职场文书
大型演出策划方案
2014/05/28 职场文书
2015年安全月活动总结
2015/03/26 职场文书
基于Python绘制子图及子图刻度的变换等的问题
2021/05/23 Python
Arthas排查Kubernetes中应用频繁挂掉重启异常
2022/02/28 MySQL