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函数式编程指南(二):从函数开始
Jun 24 Python
详解如何用OpenCV + Python 实现人脸识别
Oct 20 Python
Python探索之爬取电商售卖信息代码示例
Oct 27 Python
解决python3中自定义wsgi函数,make_server函数报错的问题
Nov 21 Python
Python实现PS图像调整颜色梯度效果示例
Jan 25 Python
pandas series序列转化为星期几的实例
Apr 11 Python
python线程中同步锁详解
Apr 27 Python
PyQt5中多线程模块QThread使用方法的实现
Jan 31 Python
python 生成任意形状的凸包图代码
Apr 16 Python
最简单的matplotlib安装教程(小白)
Jul 28 Python
Python+Xlwings 删除Excel的行和列
Dec 19 Python
Python jiaba库的使用详解
Nov 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
php中的Base62类(适用于数值转字符串)
2013/08/12 PHP
在PHP中运行Linux命令并启动SSH服务的例子
2014/06/12 PHP
PHP中file_exists函数不支持中文名的解决方法
2014/07/26 PHP
PHP+MYSQL会员系统的开发实例教程
2014/08/23 PHP
php结合安卓客户端实现查询交互实例
2015/05/05 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
2015/07/02 PHP
PHP计算加权平均数的方法
2015/07/16 PHP
php实现当前页面点击下载文件的实例代码
2016/11/16 PHP
php实现留言板功能(代码详解)
2017/03/28 PHP
PHP使用文件锁解决高并发问题示例
2018/03/29 PHP
无闪烁更新网页内容JS实现
2013/12/19 Javascript
jQuery中的Deferred和promise 的区别
2016/04/03 Javascript
React快速入门教程
2017/01/17 Javascript
js实现下拉菜单效果
2017/03/01 Javascript
JavaScript实现一个简易的计算器实例代码
2018/05/10 Javascript
JS实现获取进今年第几天是周几的方法分析
2018/06/27 Javascript
[40:03]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#1EHOME VS Archon
2016/03/02 DOTA
[04:54]DOTA2 2017国际邀请赛:上届冠军WINGS采访短片
2017/08/09 DOTA
[02:50]【扭转乾坤,只此一招】DOTA2全新版本永雾林渊开启新篇章
2020/12/24 DOTA
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
2018/02/23 Python
python3监控CentOS磁盘空间脚本
2018/06/21 Python
centos6.8安装python3.7无法import _ssl的解决方法
2018/09/17 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
python爬虫 urllib模块反爬虫机制UA详解
2019/08/20 Python
删除pycharm鼠标右键快捷键打开项目的操作
2021/01/16 Python
html5配合css3实现带提示文字的输入框(摆脱js)
2013/03/08 HTML / CSS
微软台湾官方网站:Microsoft台湾
2018/08/15 全球购物
Oracle的内存结构(Memory structures)
2015/06/10 面试题
《海底世界》教学反思
2014/04/16 职场文书
周年庆典答谢词
2015/01/20 职场文书
车间主任岗位职责范本
2015/04/08 职场文书
党支部意见范文
2015/06/02 职场文书
新教师教学工作总结
2015/08/14 职场文书
创业计划书之健康营养产业
2019/10/15 职场文书
django项目、vue项目部署云服务器的详细过程
2022/07/23 Servers
Redis配置外网可访问(redis远程连接不上)的方法
2022/12/24 Redis