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计算回文数的方法
Mar 11 Python
Python编程中运用闭包时所需要注意的一些地方
May 02 Python
Python二叉搜索树与双向链表转换实现方法
Apr 29 Python
python中判断文件编码的chardet(实例讲解)
Dec 21 Python
浅谈配置OpenCV3 + Python3的简易方法(macOS)
Apr 02 Python
ubuntu17.4下为python和python3装上pip的方法
Jun 12 Python
Python爬虫包BeautifulSoup学习实例(五)
Jun 17 Python
python检测主机的连通性并记录到文件的实例
Jun 21 Python
PyQt5 在label显示的图片中绘制矩形的方法
Jun 17 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
Feb 26 Python
Python绘制组合图的示例
Sep 18 Python
python神经网络学习 使用Keras进行回归运算
May 04 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中PDO基础教程 入门级
2011/09/04 PHP
PHP中的gzcompress、gzdeflate、gzencode函数详解
2014/07/29 PHP
php实现webservice实例
2014/11/06 PHP
php合并数组中相同元素的方法
2014/11/13 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
2016/01/28 PHP
JavaScript DOM 学习第二章 编辑文本
2010/02/19 Javascript
在VS2008中使用jQuery智能感应的方法
2010/12/30 Javascript
javascript中encodeURI和decodeURI方法使用介绍
2013/05/06 Javascript
toggle一个div显示或隐藏且可扩展成自定义下拉框
2013/09/12 Javascript
JavaScript中for..in循环陷阱介绍
2013/11/12 Javascript
js光标定位文本框回车表单提交问题的解决方法
2015/05/11 Javascript
png在IE6 下无法透明的解决方法汇总
2015/05/21 Javascript
js+canvas绘制矩形的方法
2016/01/28 Javascript
理解javascript中的闭包
2017/01/11 Javascript
jQuery 全选 全不选 事件绑定的实现代码
2017/01/23 Javascript
Vue中定义全局变量与常量的各种方式详解
2017/08/23 Javascript
Angular学习教程之RouterLink花式跳转
2018/05/03 Javascript
video.js 一个页面同时播放多个视频的实例代码
2018/11/27 Javascript
微信小程序拍照和摄像功能实现方法示例
2019/02/01 Javascript
python实现简单tftp(基于udp协议)
2018/07/30 Python
Python的Lambda函数用法详解
2019/09/03 Python
np.dot()函数的用法详解
2020/01/17 Python
详解字符串在Python内部是如何省内存的
2020/02/03 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
2021/01/21 Python
Python 中 sorted 如何自定义比较逻辑
2021/02/02 Python
英国最大的网上药品商店:Chemist Direct
2017/12/16 全球购物
个人实用简单的自我评价
2013/10/19 职场文书
交通志愿者活动总结
2014/06/27 职场文书
新闻学专业求职信
2014/07/28 职场文书
小学标准化建设汇报材料
2014/08/16 职场文书
团员年度个人总结
2015/02/26 职场文书
致运动员加油稿
2015/07/21 职场文书
女人创业励志语录,句句蕴含能量,激发你的潜能
2019/08/20 职场文书
《卧薪尝胆》读后感3篇
2019/12/26 职场文书
idea搭建可运行Servlet的Web项目
2021/06/26 Java/Android
Redis Lua脚本实现ip限流示例
2022/07/15 Redis