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 26 Python
利用Python命令行传递实例化对象的方法
Nov 02 Python
微信跳一跳小游戏python脚本
Jan 05 Python
Django基础知识与基本应用入门教程
Jul 20 Python
python实现周期方波信号频谱图
Jul 21 Python
selenium在执行phantomjs的API并获取执行结果的方法
Dec 17 Python
Python 如何优雅的将数字转化为时间格式的方法
Sep 26 Python
Python编写一个验证码图片数据标注GUI程序附源码
Dec 09 Python
pytorch逐元素比较tensor大小实例
Jan 03 Python
Python递归调用实现数字累加的代码
Feb 25 Python
python的pip有什么用
Jun 17 Python
Python wordcloud库安装方法总结
Dec 31 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函数
2006/10/09 PHP
php adodb连接带密码access数据库实例,测试成功
2008/05/14 PHP
Youku 视频绝对地址获取的方法详解
2013/06/26 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
2016/11/14 PHP
详解php curl带有csrf-token验证模拟提交方法
2018/04/18 PHP
tp5框架的增删改查操作示例
2019/10/31 PHP
Laravel框架Eloquent ORM修改数据操作示例
2019/12/03 PHP
js 强制弹出窗口代码研究-又一款代码
2010/03/20 Javascript
使用js对select动态添加和删除OPTION示例代码
2013/08/12 Javascript
Jquery.Form 异步提交表单的简单实例
2014/03/03 Javascript
jQuery支持动态参数将函数绑定到事件上的方法
2015/03/17 Javascript
js漂浮广告实现代码
2015/08/15 Javascript
深入浅析JavaScript中的3DES
2016/08/24 Javascript
JavaScript中ES6字符串扩展方法
2016/08/26 Javascript
JavaScript与JQUERY获取元素的宽、高和位置
2017/02/26 Javascript
基于vue2.0+vuex+localStorage开发的本地记事本示例
2017/02/28 Javascript
js中toString()和String()区别详解
2017/03/23 Javascript
jQuery实现checkbox即点即改批量删除及中间遇到的坑
2017/11/11 jQuery
微信小程序当前时间时段选择器插件使用方法详解
2018/12/28 Javascript
jQuery实现高级检索功能
2019/05/28 jQuery
Vue父子传递实例讲解
2020/02/14 Javascript
基于Python实现通过微信搜索功能查看谁把你删除了
2016/01/27 Python
Python3.6.0+opencv3.3.0人脸检测示例
2018/05/25 Python
使用pip发布Python程序的方法步骤
2018/10/11 Python
对Python中Iterator和Iterable的区别详解
2018/10/18 Python
详解python中sort排序使用
2019/03/23 Python
tensorflow如何批量读取图片
2019/08/29 Python
python使用openCV遍历文件夹里所有视频文件并保存成图片
2020/01/14 Python
python常量折叠基础知识点讲解
2021/02/28 Python
Vans英国官方网站:美国南加州的原创极限运动潮牌
2017/01/20 全球购物
美国价格实惠的在线眼镜网站:Zeelool
2020/12/25 全球购物
德国的各种媒体在线商店:Thalia.de(书籍、电子书、玩具等)
2020/10/08 全球购物
产品促销活动策划书
2014/01/15 职场文书
廉洁自律个人总结
2015/02/14 职场文书
主题班会开场白
2015/06/01 职场文书
22句经典语录:送给优柔寡断和胡思乱想的朋友们
2019/12/13 职场文书