转自:http://phinecos.cnblogs.com/

 #!/usr/bin/python
#coding=utf-8 #@author:dengyike
#@date:2010-09-28
#@version:1.0
#@description: auto sending email with attachment file import email
import mimetypes
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEImage import MIMEImage
import smtplib
import logging
import sys reload(sys)
sys.setdefaultencoding('utf8') mailDict = {} #邮件配置信息 ###################
#日志辅助类
#################
class Logger:
LOG_RELEASE= "releae"
LOG_RELEASE_FILE = "/tmp/pyMail.log" def __init__(self, log_type):
self._logger = logging.getLogger(log_type)
if log_type == Logger.LOG_RELEASE:
self._logFile = Logger.LOG_RELEASE_FILE
handler = logging.FileHandler(self._logFile)
if log_type == Logger.LOG_RELEASE:
formatter = logging.Formatter('%(asctime)s ********* %(message)s')
else:
formatter = logging.Formatter('%(message)s')
handler.setFormatter(formatter)
self._logger.addHandler(handler)
self._logger.setLevel(logging.INFO) def log(self, msg):
if self._logger is not None:
self._logger.info(msg) MyLogger = Logger(Logger.LOG_RELEASE) #Logger def initMailConf():#初始化邮件配置信息
global mailDict
mailDict['server'] = "smtp.google.com"
mailDict['user'] = "dengyike"
mailDict['password'] = "dengyike"
mailDict["from"] = "dengyike@google.com"
mailDict["cc"] = "dengyike@google.com,phinecos@google.com"
mailDict["to"] = "dengyike@google.com"
mailDict["subject"] = "python邮件脚本测试"
mailDict["text"] = "这里是普通文本信息"
mailDict["html"] = '<font color = red ><b>这里是HTML文本信息</b></font>' def sendMail(paramMap):#发送邮件
smtp = smtplib.SMTP()
msgRoot = MIMEMultipart('related')
msgAlternative = MIMEMultipart('alternative')
if paramMap.has_key("server") and paramMap.has_key("user") and paramMap.has_key("password"):
try:
smtp.set_debuglevel(1)
smtp.connect(paramMap["server"])
smtp.login(paramMap["user"], paramMap["password"])
except Exception, e:
MyLogger.log("smtp login exception!")
return False
else:
MyLogger.log("Parameters incomplete!")
return False if paramMap.has_key("subject") == False or paramMap.has_key("from")== False or paramMap.has_key("to") == False:
MyLogger.log("Parameters incomplete!")
return False
msgRoot['subject'] = paramMap["subject"]
msgRoot['from'] = paramMap["from"]
if paramMap.has_key("cc"):
msgRoot['cc'] = paramMap["cc"]
msgRoot['to'] = paramMap["to"]
msgRoot.preamble = 'This is a multi-part message in MIME format.'
msgRoot.attach(msgAlternative)
TempAddTo = paramMap["to"]
if paramMap.has_key("text"):
msgText = MIMEText(paramMap["text"], 'plain', 'utf-8')
msgAlternative.attach(msgText)
if paramMap.has_key("html"):
msgText = MIMEText(paramMap["html"], 'html', 'utf-8')
msgAlternative.attach(msgText)
if paramMap.has_key("image"):
fp = open(paramMap["image"], 'rb')
msgImage = MIMEImage(fp.read())
fp.close()
msgImage.add_header('Content-ID', '<image1>' )
msgRoot.attach(msgImage)
if paramMap.has_key("cc"):
TempAddTo = paramMap["to"] + "," + paramMap["cc"]
if TempAddTo.find(",") != -1:
FinallyAdd = TempAddTo.split(",")
else:
FinallyAdd = TempAddTo #构造附件
fileName = "/tmp/test.zip"
basename = os.path.basename(fileName)
if os.path.exists(fileName): #数据文件存在
data = open(fileName, 'rb')
att = MIMEText(data.read(), 'base64', 'gb2312')
att["Content-Type"] = 'application/octet-stream'
att["Content-Disposition"] = 'attachment; filename="%s"' % basename
msgRoot.attach(att)
smtp.sendmail(paramMap["from"], FinallyAdd, msgRoot.as_string())
smtp.quit()
return True def process():
global mailDict
initMailConf()
sendMail(mailDict) if __name__ == "__main__":
process()

最后把运行命令加入crontab中,就可以每天定时自动发送邮件了。

最新文章

  1. Hibernate 分组查询 子查询 原生SQL
  2. Spark入门实战系列--8.Spark MLlib(上)--机器学习及SparkMLlib简介
  3. Oracle CASE WHEN 用法介绍
  4. c# 中get和post的方法
  5. springMVC学习笔记二
  6. IIS 7.0, ASP.NET, pipelines, modules, handlers, and preconditions
  7. Hibernate 一对多双向关联Demo
  8. 【safari挖的那些坑】iOS safari 浏览器 时间乱码(ios时间显示NaN) 问题解决
  9. BZOJ1634: [Usaco2007 Jan]Protecting the Flowers 护花
  10. perl 访问类方法的几种方式
  11. C/C++语言中NULL、&#39;\0’和0的区别
  12. vivo Xplay 5的Usb调试模式在哪里,打开vivo Xplay 5Usb调试模式的经验
  13. php设计模式-依赖注入模式(Dependency Injection)
  14. Codeforces 1136E - Nastya Hasn&#39;t Written a Legend - [线段树+二分]
  15. Redis实战 内存淘汰机制
  16. IAR编译器
  17. 安装apr-1.6.3报错[cannot remove `libtoolT’: No such file or directory]解决方法
  18. 《HTML5与CSS3基础教程(第8版)》
  19. 将之前的DotNetOpenAuth项目发布到IIS
  20. Oracle EBS 启用关于此页

热门文章

  1. 标准C编程-笔记全集
  2. 宏定义&amp;CodeBlocks&amp;Glib
  3. windbg 调试技巧
  4. Linux文件系统与结构
  5. Combotree,datebox 启用 禁用
  6. 数据仓库(七):Oracle Warehouse Builder(OWB)创建数据仓库
  7. alois
  8. IE9下报错,错误: “JSON”未定义
  9. [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(九)
  10. 历峰集团3.43亿美元收购Net-a-Porter剩余股权_财经_腾讯网