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关闭windows进程的方法
Apr 18 Python
python模仿网页版微信发送消息功能
Feb 24 Python
python 将数据保存为excel的xls格式(实例讲解)
May 03 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
May 09 Python
Python中的asyncio代码详解
Jun 10 Python
python实现最小二乘法线性拟合
Jul 19 Python
Python利用scapy实现ARP欺骗的方法
Jul 23 Python
关于初始种子自动选取的区域生长实例(python+opencv)
Jan 16 Python
python中加背景音乐如何操作
Jul 19 Python
Python操作dict时避免出现KeyError的几种解决方法
Sep 20 Python
Python3+PyCharm+Django+Django REST framework配置与简单开发教程
Feb 16 Python
深入探讨opencv图像矫正算法实战
May 21 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读取mssql的ntext字段返回值为空的解决方法
2014/12/30 PHP
PHP统计当前在线用户数实例讲解
2015/10/21 PHP
PHP使用curl模拟post上传及接收文件的方法
2016/03/04 PHP
PHP编写的图片验证码类文件分享
2016/06/06 PHP
php实现文件上传及头像预览功能
2017/01/15 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
2019/02/15 PHP
经常用到的JavasScript事件的翻译
2007/04/09 Javascript
Underscore.js 的模板功能介绍与应用
2012/12/24 Javascript
jQuery实现仿腾讯视频列表分页效果的方法
2015/08/07 Javascript
详解Javascript模板引擎mustache.js
2016/01/20 Javascript
使用JS中的exec()方法构造正则表达式验证
2016/08/01 Javascript
又一款js时钟!transform实现时钟效果
2016/08/15 Javascript
vue.js将unix时间戳转换为自定义时间格式
2017/01/03 Javascript
Restify中接入Socket.io报Error:Can’t set headers的错误解决
2017/03/28 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
2017/08/19 Javascript
详解Vue项目在其他电脑npm run dev运行报错的解决方法
2018/10/29 Javascript
vue使用laydate时间插件的方法
2018/11/14 Javascript
Vue项目环境搭建详细总结
2019/09/26 Javascript
Python装饰器的函数式编程详解
2015/02/27 Python
python3使用urllib模块制作网络爬虫
2016/04/08 Python
python模拟登录并且保持cookie的方法详解
2017/04/04 Python
django允许外部访问的实例讲解
2018/05/14 Python
Python自动抢红包教程详解
2019/06/11 Python
简单介绍django提供的加密算法
2019/12/18 Python
详解Django3中直接添加Websockets方式
2020/02/12 Python
CSS3对图片照片进行边缘模糊处理的实现
2018/08/08 HTML / CSS
浅析HTML5:'data-'属性的作用
2018/01/23 HTML / CSS
美国韩国化妆品和护肤品购物网站:Beautytap
2018/07/29 全球购物
P D PAOLA意大利官网:西班牙著名的珠宝首饰品牌
2019/09/24 全球购物
国际贸易本科毕业生求职信
2014/09/26 职场文书
2014感恩节演讲稿大全
2014/10/11 职场文书
放假通知格式
2015/04/14 职场文书
离职信范本
2015/06/23 职场文书
初中数学教学反思范文
2016/02/17 职场文书
2016年“12.4”法制宣传日活动总结
2016/04/01 职场文书
python如何在word中存储本地图片
2021/04/07 Python