欢迎来到山村网

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

2019-03-02 12:29:49浏览:540 来源:山村网   
核心摘要:  这篇文章主要介绍了Python发送以整个文件夹的内容为附件的邮件的教程,普通我们在运营商免费邮箱中发附件通常只能发文件而不

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

  由于我经常需要备份文件夹下的内容到邮件里面,每个打开邮件,上传文件,发送,太过麻烦,其实每次发送的文件都是放在固定 置的,只是邮件标题不同而已,于是用 python 为自己写了个发送文件到邮箱的小工具,在任意目录下执行该脚本,并指定邮件标 ,就将指定文件夹下的文件发送到邮箱中备份起来 。

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 #!/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 下面。

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

  ?

1 $ chmod +x send_files

  用法:

  ?

1 $ send_files '邮件标题'

  还带有进度条哦~~

注< >:更多精彩教程请关注山村编程

(责任编辑:豆豆)
下一篇:

使用wxPython获取系统剪贴板中的数据的教程

上一篇:

使用Python压缩和解压缩zip文件的教程

  • 信息二维码

    手机看新闻

  • 分享到
打赏
免责声明
• 
本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们 xfptx@outlook.com