python2 群发 html 或文本邮件

from email import MIMEMultipart
from email import MIMEText
from email import MIMEImage
from email.utils import COMMASPACE, formatdate

def sendmailFunc(htmlContent, userMailList, title):
    try:
        if (len(htmlContent) < 1):
            print "htmlContent is None!"
            userMailList = defaultEmailList
        #必须引用MIMEMultipart.MIMEMultipart,否则'LazyImporter' object is not callable
        msg = MIMEMultipart.MIMEMultipart('alternative')
        msg['Subject'] = (title).decode('utf-8')
        #From 必须与login、sendmail一致,否则qq邮箱会判断为垃圾邮件。
        msg['From'] = 'test@163.com'
        msg['To'] = COMMASPACE.join(userMailList)
        msg['Date'] = formatdate(localtime=True)

        msg.attach(MIMEText.MIMEText(htmlContent, 'html', 'utf-8'))
        smtp = smtplib.SMTP()
        smtp.connect("smtp.exmail.qq.com", "25")
        # 此处为公司web邮箱安全授权码,而非 oa 登录密码。
        smtp.login('test@163.com', '安全授权码')
        if len(msg.as_string()) > 0:
            smtp.sendmail('test@163.com', userMailList, msg.as_string())
        smtp.close()
        print getNowTime() + " ------------>> mail send success..."
    except Exception, e:
        print getNowTime() + " -------- " + str(e)

————————————————————————————————————————————

#coding:utf-8
from writeLog import *
import urllib2
import smtplib
import datetime
import re, sys

from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEImage import MIMEImage
from email.Utils import COMMASPACE, formatdate

reload(sys)
sys.setdefaultencoding('utf-8')

def sendMailHtml(title, date, logData, receviers):
    msg = MIMEMultipart('alternative')
    msg['Subject'] = (title + '【%s】' % date).decode('utf-8')

    msg['From'] = 'noreply@ooxx.com'
    msg['To'] = COMMASPACE.join(receviers)
    msg['Date'] = formatdate(localtime=True)

    msg.attach(MIMEText(logData, 'html', 'utf-8'))

    smtp = smtplib.SMTP()
    smtp.connect("smtp.exmail.qq.com", "25")
    smtp.login('noreply@ooxx.com', 'passwd')
    if (len(msg.as_string()) > 0):
        smtp.sendmail('noreply@ooxx.com', receviers, msg.as_string())
    smtp.close()


def sendMailAtt(title, date, logData, receviers):
    #创建一个带附件的实例
    msg = MIMEMultipart()

    #构造附件
    att = MIMEText(logData, 'base64', 'utf-8')
    att["Content-Type"] = 'application/octet-stream'
    att["Content-Disposition"] = 'attachment; filename=' + infoLogName.split("/")[-1]
    msg.attach(att)

    #加邮件头
    msg['Subject'] = (title + '【%s】' % date).decode('utf-8')
    msg['From'] = 'noreply@ooxx.com'
    msg['To'] = COMMASPACE.join(receviers)
    msg['Date'] = formatdate(localtime=True)

    #发送邮件
    smtp = smtplib.SMTP()
    smtp.connect("smtp.exmail.qq.com", "25")
    smtp.login('noreply@ooxx.com', 'passwd')
    if (len(msg.as_string()) > 0):
        smtp.sendmail('noreply@ooxx.com', receviers, msg.as_string())
    smtp.close()


if __name__ == '__main__':
    dateTime = datetime.date.today() - datetime.timedelta(days=0)
    strDate = str(dateTime.strftime('%Y-%m-%d'))
    print strDate
    try:
        receivers = ['username@ooxx.com']
        logData = os.popen("sort -t$'\t' -k2n " + infoLogName).read()
        sendMailAtt('你的邮件名 - ', strDate, logData, receivers)
        errorLogger.info("------------>> send success...")
    except Exception, e:
        errorLogger.info("--------" + str(e))

Refer:

[1] Python 发送邮件可以添加附件

http://www.oschina.net/code/snippet_221343_49994

[2] TypeError: 'LazyImporter' object is not callable

http://stackoverflow.com/questions/34348069/typeerror-lazyimporter-object-is-not-callable

[3] LazyImporter not callable

http://blog.gmane.org/gmane.comp.python.mime.devel/month=20061201

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python中文社区

Python多进程并行编程实践-mpi4py的使用

專 欄 ❈PytLab,Python 中文社区专栏作者。主要从事科学计算与高性能计算领域的应用,主要语言为Python,C,C++。熟悉数值算法(最优化方法,...

1K70
来自专栏Python中文社区

Python写TCP端口扫描工具之IP协议的讲解

專 欄 ❈exploit,Python中文社区专栏作者,入坑Python一年。希望与作者交流或者对文章有任何疑问的可以与作者联系: QQ:1585173691...

47960
来自专栏Python中文社区

一篇文章完全理解virtualenv

專 欄 ❈ 夏轩,Python中文社区专栏作者。 博客:http://blog.csdn.net/u012734441 ❈ 1.virtualenv介绍 2...

29960
来自专栏Python中文社区

Python运用蒙特卡洛算法模拟植物生长

專 欄 ❈ Toby,微信号:drug666123,Python数据科学爱好者,擅长医药统计。国内最大药品数据中心任职,二十多个数据库负责人。 ❈ ? (细胞...

64460
来自专栏Python中文社区

Python爬虫一步步抓取房产信息

專 欄 ❈ Garfield_Liang,Python中文社区专栏作者。 简书地址:http://www.jianshu.com/u/cac1d39abfa9...

47660
来自专栏Python中文社区

那些年在win下填过的Django坑

專 欄 ❈ JacobYRJ,Python中文社区专栏作者 Python语言爱好者,目前在做Django项目。 Github博客:https://JacobY...

21570
来自专栏Python中文社区

真正的 Tornado 异步非阻塞

專 欄 ❈正小歪,Python 工程师,主要负责 Web 开发和日志数据处理。博客文章《真正的 Tornado 异步非阻塞》、《使用 JWT 让你的 REST...

1.4K50
来自专栏Python中文社区

Python一键上传旅途照片生成展示网页

專 欄 ❈ treelake Python中文社区专栏作者 博客地址: http://www.jianshu.com/p/1d75addcbb2c ❈ 作为一...

340100
来自专栏编程

python自学笔记——糗事百科段子爬取

# -*- coding: utf-8 -*- """ Created on Thu Dec 21 14:27:16 2017 @author: Andrew ...

21590
来自专栏Python中文社区

Python标准库(1) — itertools模块

專 欄 ❈Jerry,Python中文社区专栏作者。 blog:https://my.oschina.net/jhao104/blog github:ht...

21790

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励