其实问题主要集中的QQ企业邮箱中,特别坑爹。。。代码如下:

from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText # python 2.3.*: email.Utils email.Encoders
from email.utils import COMMASPACE,formatdate
from email import encoders import os
import datetime uploadlogPath = "/home/harklee/shell/data"
curDate = datetime.datetime.now()
curDateFormat = curDate.strftime("%Y-%m-%d")
lastDate = curDate + datetime.timedelta(days = -1)
lastDateFormat = lastDate.strftime("%Y-%m-%d")
server = {"name":"smtp.exmail.qq.com", "user":"xx@xx.com", "passwd":"password"} #注意,QQ企业邮箱中, user必须是全称的帐号,就是要带上@后缀,个人邮箱则不需要 name是smtp的地址
fro = "xx@xx.com" #发件人邮箱
to = ["xx@xx.com","xxx@qq.com"] #收件人邮箱
subject = "数据每日日报" #发送标题
text = "数据每日日报,目前因为数据体系还没有开始搭建,所以指标很简单,目前为两分部,第一部分是建议运营指标,第二部分是接口监测指标,压缩文件是以日志日期命名的:\n\n运营指标:\n1) 当天去重后的imei数据,格式是yyyy-MM-dd_imei.log \n2) 当天去重后的imei_app数据,格式是yyyy-MM-dd_app.log \n\napi接口监测指标 \n 1)每小时的数据流量行数 格式是yyyy-MM-dd_hour_line.log \n 2)监测每秒的最大并发数 格式是yyyy-MM-dd_second_max_line.log" #发送内容
files = [uploadlogPath+"/"+lastDateFormat+".tar.gz"] #要发送的附件啦
#print files #server['name'], server['user'], server['passwd']
def send_mail(server, fro, to, subject, text, files=[]):
assert type(server) == dict
assert type(to) == list
assert type(files) == list msg = MIMEMultipart(_charset='utf-8') #这里注意编码 msg['From'] = fro
msg['Subject'] = subject
msg['To'] = COMMASPACE.join(to) #COMMASPACE==', '
msg['Date'] = formatdate(localtime=True)
msg.attach(MIMEText(text,_charset='utf-8')) #这里也要注意编码 for file in files:
part = MIMEBase('application', 'octet-stream') #'octet-stream': binary data
part.set_payload(open(file,'rb').read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(file))
msg.attach(part) import smtplib
smtp = smtplib.SMTP(server['name'])
smtp.login(server['user'], server['passwd'])
smtp.sendmail(fro, to, msg.as_string())
smtp.close() send_mail(server,fro,to,subject,text,files)

  

最新文章

  1. CGAffineTransform
  2. dex文件格式二
  3. 浅谈Java中的hashcode方法
  4. MVP社区巡讲照片集
  5. Fake_AP模式下的Easy-Creds浅析
  6. ARM7+PROTEUS调试(转)
  7. 【JUnit】EasyMock用法总结
  8. Event Handling in Spring
  9. HttpURLConnection&HttpClient网络通信
  10. asp.net ajax 调用错误解决
  11. 在ASP.NET Core中使用Apworks开发数据服务:对HAL的支持
  12. openssl实现自签名证书
  13. Chapter 4 Invitations——16
  14. [HDU6146]Pokémon GO
  15. 关于c#的知识博客
  16. [翻译]:Artificial Intelligence for games 5.3 STATE MACHINES:状态机
  17. 利用阿里云如何开发一款直播app?
  18. 【大数据系列】在windows下连接linux 下的hadoop环境进行开发
  19. HTML5 Canvas ( 图片绘制 转化为base64 ) drawImage,toDataURL
  20. 【BZOJ4035】数组游戏(博弈论)

热门文章

  1. 动态规划:树形DP-景点中心(树的带权重心)
  2. Java 多线程实现
  3. Java并发编程原理与实战二十九:Exchanger
  4. HIIT训练第一波,值得收藏的训练计划
  5. [转载]PayPal为什么从Java迁移到Node.js,性能提高一倍,文件代码减少44%
  6. 悲催的IE6 七宗罪大吐槽(带解决方法)第一部分
  7. Flash数据的采集方法-搜房房价走势采集
  8. LintCode 204: Singleton
  9. 2016.5.19——Excel Sheet Column Title
  10. 使用solrJ管理索引——(十四)