新浪博客

python:自动压缩指定文件夹作为附件发送邮件到指定邮箱

2016-07-05 14:02阅读:
为了项目方便和代码备份,简单写了一个自动压缩指定文件夹并且作为附件发送邮件到指定邮箱的脚本。
需求:
1、目标文件夹:D:\mydev\python
2、取第1步中的目标文件夹,自动压缩生成压缩文件zip
3、将第2步中生成的zip文件自动以附件的形式发送到指定邮箱,如762193719@qq.com
项目代码:
我把项目命名为codeManager,主要包含两个module:
1、emailManager,作为发送邮件的handler
2、zipManager,作为压缩文件的handler
项目目录结构如下:
1、emailManager
[1] __init__.py,作为module import的必要文件
[2] email_manager.py,发送邮件的必要算法
2、zipManager
[1] __init__.py,作为module import的必要文件
[2] zip_manager.py,压缩文件的必要算法
3、run.py,总入口文件
python:自动压缩指定文件夹作为附件发送邮件到指定邮箱</</a>
r>以下是各文件的源代码:
email_manager.py
  1. # -*- coding: utf-8 -*-
  2. '''
  3. 发送邮件
  4. '''
  5. import smtplib
  6. import email.MIMEMultipart
  7. import email.MIMEText
  8. import email.MIMEBase
  9. import os.path
  10. import mimetypes
  11. import os
  12. from os.path import join, getsize
  13. import traceback
  14. # 解决乱码问题
  15. import sys
  16. reload(sys)
  17. SYS_ENCODING = 'cp936' # 定义系统编码
  18. sys.setdefaultencoding(SYS_ENCODING) # 设置默认编码
  19. class EmailManager:
  20. '''
  21. send email to the given email address automatically
  22. '''
  23. def __init__(self, **kw):
  24. ' 构造函数 '
  25. self.kw = kw
  26. self.smtp_server = 'smtp.163.com'
  27. self.MAX_FILE_SIZE = 10 * 1024 * 1024 # 10M
  28. def run(self):
  29. # 总入口
  30. try:
  31. # 初始化
  32. self.__my_init()
  33. # 登录SMTP服务器,验证授权
  34. server = self.get_login_server()
  35. # 生成邮件主体内容
  36. main_msg = self.get_main_msg()
  37. # 生成邮件附件内容
  38. file_msg = self.get_attach_file_msg()
  39. if file_msg is not None:
  40. main_msg.attach(file_msg)
  41. # 得到格式化后的完整文本
  42. fullText = main_msg.as_string()
  43. # 发送邮件
  44. server.sendmail(self.msg_from, self.receiver, fullText)
  45. except Exception, e:
  46. print e
  47. exstr = traceback.format_exc()
  48. print exstr
  49. server.quit()
  50. exit()
  51. def get_main_msg(self):
  52. ' 生成邮件主体内容 '
  53. # 构造MIMEMultipart对象做为根容器
  54. main_msg = email.MIMEMultipart.MIMEMultipart()
  55. # 构造MIMEText对象做为邮件显示内容并附加到根容器
  56. text_msg = email.MIMEText.MIMEText(self.msg_content, _charset='utf-8')
  57. main_msg.attach(text_msg)
  58. # 设置根容器属性
  59. main_msg['From'] = self.msg_from
  60. main_msg['To'] = self.msg_to
  61. main_msg['Subject'] = self.msg_subject
  62. main_msg['Date'] = self.msg_date
  63. return main_msg
  64. def get_attach_file_msg(self):
  65. ' 生成邮件附件内容 '
  66. if self.attach_file is not None and self.attach_file != '':
  67. try:
  68. self.validate_file_size()
  69. data = open(self.attach_file, 'rb')
  70. ctype,encoding = mimetypes.guess_type(self.attach_file)
  71. if ctype is None or encoding is not None:
  72. ctype = 'application/octet-stream'
  73. maintype,subtype = ctype.split('/',1)
  74. file_msg = email.MIMEBase.MIMEBase(maintype, subtype)
  75. file_msg.set_payload(data.read())
  76. data.close()
  77. email.Encoders.encode_base64(file_msg) #把附件编码
  78. ## 设置附件头
  79. basename = os.path.basename(self.attach_file)
  80. file_msg.add_header('Content-Disposition','attachment', filename = basename) #修改邮件头
  81. return file_msg
  82. except Exception, e:
  83. print e
  84. return None
  85. else:
  86. return None
  87. def get_login_server(self):
  88. ' 登录SMTP服务器,验证授权信息 '
  89. server = smtplib.SMTP(s

我的更多文章

下载客户端阅读体验更佳

APP专享