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获取任意xml节点值的方法
May 05 Python
使用rpclib进行Python网络编程时的注释问题
May 06 Python
详解Python的Flask框架中的signals信号机制
Jun 13 Python
python的dataframe转换为多维矩阵的方法
Apr 11 Python
Python实用技巧之利用元组代替字典并为元组元素命名
Jul 11 Python
详解Numpy数组转置的三种方法T、transpose、swapaxes
May 27 Python
Pyinstaller 打包exe教程及问题解决
Aug 16 Python
Python3视频转字符动画的实例代码
Aug 29 Python
python应用Axes3D绘图(批量梯度下降算法)
Mar 25 Python
学python需要去培训机构吗
Jul 01 Python
python中的装饰器该如何使用
Jun 18 Python
一篇文章弄懂Python中的内建函数
Aug 07 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
虫族 Zerg 热键控制
2020/03/14 星际争霸
php&amp;java(二)
2006/10/09 PHP
php实现复制移动文件的方法
2015/07/29 PHP
javascript 异步页面查询实现代码(asp.net)
2010/05/26 Javascript
js控制页面控件隐藏显示的两种方法介绍
2013/10/09 Javascript
javascript:void(0)是什么意思示例介绍
2013/11/17 Javascript
js动态改变select选择变更option的index值示例
2014/07/10 Javascript
jquery制作漂亮的弹出层提示消息特效
2014/12/23 Javascript
简介JavaScript中search()方法的使用
2015/06/06 Javascript
JavaScript中Array的实用操作技巧分享
2016/09/11 Javascript
Javascript 闭包详解及实例代码
2016/11/30 Javascript
Angular2生命周期钩子函数的详细介绍
2017/07/10 Javascript
如何在Vue.JS中使用图标组件
2020/08/04 Javascript
python 示例分享---逻辑推理编程解决八皇后
2014/07/20 Python
Python处理RSS、ATOM模块FEEDPARSER介绍
2015/02/18 Python
尝试使用Python多线程抓取代理服务器IP地址的示例
2015/11/09 Python
Python的Flask开发框架简单上手笔记
2015/11/16 Python
Python selenium 三种等待方式解读
2016/09/15 Python
详解Python if-elif-else知识点
2018/06/11 Python
Python中如何导入类示例详解
2019/04/17 Python
python-django中的APPEND_SLASH实现方法
2019/06/21 Python
Python 中判断列表是否为空的方法
2019/11/24 Python
python同义词替换的实现(jieba分词)
2020/01/21 Python
CSS3不透明度实例讲解
2016/04/26 HTML / CSS
意大利买卖二手奢侈品网站:LAMPOO
2020/06/03 全球购物
高分子材料与工程专业推荐信
2013/12/01 职场文书
勤俭节约演讲稿
2014/05/08 职场文书
乡镇爱国卫生月活动总结
2014/06/25 职场文书
党的作风建设心得体会
2014/10/22 职场文书
入股协议书范本
2014/11/01 职场文书
门面房租房协议书
2014/12/01 职场文书
2014年高校辅导员工作总结
2014/12/09 职场文书
餐饮食品安全责任书
2015/01/29 职场文书
努力学习保证书
2015/02/26 职场文书
2015初中团委工作总结
2015/07/28 职场文书
Python中的 No Module named ***问题及解决
2022/07/23 Python