python列出文件夹并邮件_Python发送以整个文件夹的内容为附件的邮件的教程

本文介绍如何使用Python编程实现将整个文件夹内容作为邮件附件发送,包括脚本解析和使用方法,适用于定期备份文件到邮箱的需求。
摘要由CSDN通过智能技术生成

Python发送以整个文件夹的内容为附件的邮件的教程

发布于 2015-11-22 21:26:15 | 349 次阅读 | 评论: 0 | 来源: 网友投递

Python编程语言Python 是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年。Python语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。

这篇文章主要介绍了Python发送以整个文件夹的内容为附件的邮件的教程,普通我们在运营商免费邮箱中发附件通常只能发文件而不能发文件夹,而该脚本则可以实现文件夹的发送(自己动手编程的强大之处:D),需要的朋友可以参考下

由于我经常需要备份文件夹下的内容到邮件里面,每个打开邮件,上传文件,发送,太过麻烦,其实每次发送的文件都是放在固定 置的,只是邮件标题不同而已,于是用 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 '

else:

sendmail(sys.argv[1])

安装:

配置好收件人,发件人,smtp地址,用户名,密码及要发送文件所在的路径。

将文件保存为 send_files,保存到 /usr/bin 下面。

然后设置文件权限为可执行:

$ chmod +x send_files

用法:

$ send_files '邮件标题'

还带有进度条哦~~

相关阅读:

Python发送以整个文件夹的内容为附件的邮件的教程

python实现下载FTP上的文件夹的代码

用Python编写一个每天都在系统下新建一个文件夹的脚本

Python遍历指定文件及文件夹的方法

Python简单删除目录下文件以及文件夹的方法

python创建临时文件夹的方法

Python打包文件夹的方法小结(zip,tar,tar.gz等)

Python 遍历子文件和所有子文件夹的代码实例

Python实现Windows和Linux之间互相传输文件(文件夹)的方法

python之文件的读写和文件目录以及文件夹的操作实现代码

Python模糊查询本地文件夹去除文件后缀的实例(7行代码)

Python高效计算大文件中的最长行的长度示例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值