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

  1 #!/usr/bin/python
  2 #coding=utf-8
  3
  4 #@author:dengyike
  5 #@date:2010-09-28
  6 #@version:1.0
  7 #@description: auto sending email with attachment file
  8
  9 import email
 10 import mimetypes
 11 from email.MIMEMultipart import MIMEMultipart
 12 from email.MIMEText import MIMEText
 13 from email.MIMEImage import MIMEImage
 14 import smtplib
 15 import logging
 16 import sys
 17
 18 reload(sys)
 19 sys.setdefaultencoding('utf8')
 20
 21 mailDict = {} #邮件配置信息
 22
 23 ###################
 24 #日志辅助类
 25 #################
 26 class Logger:
 27     LOG_RELEASE= "releae"
 28     LOG_RELEASE_FILE = "/tmp/pyMail.log"
 29
 30     def __init__(self, log_type):
 31         self._logger = logging.getLogger(log_type)
 32         if log_type == Logger.LOG_RELEASE:
 33             self._logFile = Logger.LOG_RELEASE_FILE
 34         handler = logging.FileHandler(self._logFile)
 35         if log_type == Logger.LOG_RELEASE:
 36             formatter = logging.Formatter('%(asctime)s ********* %(message)s')
 37         else:
 38             formatter = logging.Formatter('%(message)s')
 39         handler.setFormatter(formatter)
 40         self._logger.addHandler(handler)
 41         self._logger.setLevel(logging.INFO)
 42
 43     def log(self, msg):
 44         if self._logger is not None:
 45             self._logger.info(msg)
 46
 47 MyLogger = Logger(Logger.LOG_RELEASE) #Logger
 48
 49 def initMailConf():#初始化邮件配置信息
 50     global mailDict
 51     mailDict['server'] = "smtp.google.com"
 52     mailDict['user'] = "dengyike"
 53     mailDict['password'] = "dengyike"
 54     mailDict["from"] = "dengyike@google.com"
 55     mailDict["cc"] = "dengyike@google.com,phinecos@google.com"
 56     mailDict["to"] = "dengyike@google.com"
 57     mailDict["subject"]  = "python邮件脚本测试"
 58     mailDict["text"] = "这里是普通文本信息"
 59     mailDict["html"] = '<font color = red ><b>这里是HTML文本信息</b></font>'
 60
 61 def sendMail(paramMap):#发送邮件
 62     smtp = smtplib.SMTP()
 63     msgRoot = MIMEMultipart('related')
 64     msgAlternative = MIMEMultipart('alternative')
 65     if paramMap.has_key("server") and paramMap.has_key("user") and paramMap.has_key("password"):
 66         try:
 67             smtp.set_debuglevel(1)
 68             smtp.connect(paramMap["server"])
 69             smtp.login(paramMap["user"], paramMap["password"])
 70         except Exception, e:
 71             MyLogger.log("smtp login exception!")
 72             return False
 73     else:
 74         MyLogger.log("Parameters incomplete!")
 75         return False
 76
 77     if paramMap.has_key("subject") == False or  paramMap.has_key("from")== False or paramMap.has_key("to") == False:
 78         MyLogger.log("Parameters incomplete!")
 79         return False
 80     msgRoot['subject'] = paramMap["subject"]
 81     msgRoot['from'] = paramMap["from"]
 82     if paramMap.has_key("cc"):
 83         msgRoot['cc'] = paramMap["cc"]
 84     msgRoot['to'] = paramMap["to"]
 85     msgRoot.preamble = 'This is a multi-part message in MIME format.'
 86     msgRoot.attach(msgAlternative)
 87     TempAddTo = paramMap["to"]
 88     if paramMap.has_key("text"):
 89         msgText = MIMEText(paramMap["text"], 'plain', 'utf-8')
 90         msgAlternative.attach(msgText)
 91     if paramMap.has_key("html"):
 92         msgText = MIMEText(paramMap["html"], 'html', 'utf-8')
 93         msgAlternative.attach(msgText)
 94     if paramMap.has_key("image"):
 95         fp = open(paramMap["image"], 'rb')
 96         msgImage = MIMEImage(fp.read())
 97         fp.close()
 98         msgImage.add_header('Content-ID', '<image1>' )
 99         msgRoot.attach(msgImage)
100     if paramMap.has_key("cc"):
101         TempAddTo = paramMap["to"] + "," + paramMap["cc"]
102     if TempAddTo.find(",") != -1:
103         FinallyAdd = TempAddTo.split(",")
104     else:
105         FinallyAdd = TempAddTo
106
107     #构造附件
108     fileName = "/tmp/test.zip"
109     basename = os.path.basename(fileName)
110     if os.path.exists(fileName): #数据文件存在
111         data = open(fileName, 'rb')
112         att = MIMEText(data.read(), 'base64', 'gb2312')
113         att["Content-Type"] = 'application/octet-stream'
114         att["Content-Disposition"] = 'attachment; filename="%s"' % basename
115         msgRoot.attach(att)
116         smtp.sendmail(paramMap["from"], FinallyAdd, msgRoot.as_string())
117         smtp.quit()
118     return True
119
120 def process():
121     global mailDict
122     initMailConf()
123     sendMail(mailDict)
124
125 if __name__ == "__main__":
126     process()

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

python邮件发送脚本相关推荐

  1. Python邮件发送SMATP模块详细总结(含qq邮箱及163邮箱服务开启及授权码获取,多附件发送)

    Python实现电子邮件发送 在生活中或许我们多数都在用微信或者是QQ,但是工作中就会涉及邮件了,我也是最近在工作中用到了,所以找了些资料,有的较为完备有的就特别零散,所以自己也来整理分享一下.这里主 ...

  2. python邮件发送和正则表达式(1)

    python邮件发送和正则表达式 一. 邮件发送 1. 开通邮箱SMTP服务,并获取 授权码 这个账户是你要使用此邮箱发送邮件的账户,密码不是平时登录邮箱的密码,而是开通 POP3/SMTP 功能后设 ...

  3. Python 邮件发送之嵌套图片发送附件

    哎呀,马上就要五一小长假了,想想都有点小激动,嘿嘿~约那个妹子出去嗨? 人事:五一,4号,5号在公司加班,全体加班. 我:我TM,WTF?  怀着悲愤的心情,写下这个邮件发送,没事的时候给她发点垃圾邮 ...

  4. python邮件发送哪个好_最全总结!聊聊 Python 发送邮件的几种方式

    1. 前言 邮件,作为最正式规范的沟通方式,在日常办公过程中经常被用到 我们都知道 Python内置了对 SMTP 的支持,可以发送纯文本.富文本.HTML 等格式的邮件 本文将聊聊利用 Python ...

  5. [Python] [邮件发送] 用Python的smtplib和email库进行邮件发送

    目录 1.Intro 2.Details 3.Theory 4.Environment 5.Source 6.Conclusion 1.Intro 眼看就到了12月中旬,除了帮朋友码竞赛题,前半个月可 ...

  6. python邮件发送

    最近设计了一个小的应用程序,主要是根据文件中邮件地址发送一份excel中内容,并且在接受方收到邮件都是以网页的格式呈现的. 下面主要是对python发送邮件涉及到的部分知识点做个总结 一.先介绍一下S ...

  7. Python 邮件发送

    python发送各类邮件的主要方法 python中email模块使得处理邮件变得比较简单,今天着重学习了一下发送邮件的具体做法,这里写写自己的的心得,也请高手给些指点.     一.相关模块介绍 发送 ...

  8. python邮件发送csv附件_Python2.7 smtplib发送带附件邮件报错STARTTLS解决方法

    最近在SIOMP系统中添加一项功能时,即自动发送带附件邮件到指定邮箱时,发现在发送时报错:错误信息:STARTTLS extension not supported by server.很是奇怪,但发 ...

  9. python邮件发送和图片

    ​        上班时间干别的事情是不太好的,如果被别人看到的话会很大程度上影响个人的前进的步伐.但是如果工作做的差不多了,那么闲着也是闲着.反正cpu资源浪费一天就是一天的折旧,那还不如多学点东西 ...

最新文章

  1. 牛腩新闻发布系统——后台前台整合技术
  2. C++primer 9.2.1节练习
  3. 基于@Bean声明lazy-queue
  4. 如何在TypeScript代码里获得HTML元素的css属性
  5. 用until编写一段shell程序,计算1~10的平方和
  6. mysql如何添加用户_如何创建新用户和授予MySQL中的权限
  7. 绘制自己组合的k线图_短线投资者必备的四种双K线组合抄底技巧,次次选中黑马股,精准率超高...
  8. C#中面向对象编程中的函数式编程
  9. Redis学习总结(22)——Redis的主从复制是如何做的?复制过程中也会产生各种问题?
  10. Enterprise Library +Caliburn.Micro+WPF CM框架下使用企业库验证,验证某一个属性,整个页面的文本框都变红的原因...
  11. ​突破 1nm!台积电祭出“半金属”取代硅材料;搜狗发布手语 AI 合成主播;iOS 微信 8.0.6 版本更新|极客头条...
  12. fscapture下载收费吗?_听歌要收费,下载又要付费?国内的音乐app还想干什么?...
  13. python 字符串交集_集合 (Set) | 一山不容二虎的 Python 数据类型
  14. VMware VirtualBox共存时桥接注意
  15. 毕业论文概念界定要怎么写?
  16. 为什么红黑树的时间复杂度为lgn——渐进边界的证明
  17. python怎么写代码求年华收益率_如何计算年化收益率?
  18. 梁山伯与祝英台最动人的演绎
  19. U盘显示0字节怎么恢复完整解决教程
  20. 万年日历思路加完整代码

热门文章

  1. android 自定义窗口,Android studio如何自定义设置窗口布局?
  2. c语言 误差处理 编程,C语言误差处理(平均数残差).doc
  3. 20190805:两个队列实现栈
  4. 文件共享服务器灾备,搭建容灾性强、可管理的的文件共享服务器-windows server 2008 DFS续...
  5. java线程怎么用_Java多线程基本使用
  6. java中lock_Java中的锁
  7. Jedis问题解决方案大全:No more cluster attempts left
  8. 嬴彻首款L3自动驾驶样车发布:自研全栈系统,满足高速全场景工况
  9. 寒武纪讯飞京东等合搞AI芯片评测标准,作者包括陈云霁陈天石
  10. 刚被通用收编的这家创业公司,号称能把LiDAR成本降低近100%