python邮件发送脚本

简介:
复制代码代码
#!/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中,就可以每天定时自动发送邮件了。


本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2010/09/28/1837578.html,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
安全 网络安全 文件存储
思科设备巡检命令Python脚本大集合
【10月更文挑战第18天】
98 1
思科设备巡检命令Python脚本大集合
|
1月前
|
数据采集 监控 数据挖掘
Python自动化脚本:高效办公新助手###
本文将带你走进Python自动化脚本的奇妙世界,探索其在提升办公效率中的强大潜力。随着信息技术的飞速发展,重复性工作逐渐被自动化工具取代。Python作为一门简洁而强大的编程语言,凭借其丰富的库支持和易学易用的特点,成为编写自动化脚本的首选。无论是数据处理、文件管理还是网页爬虫,Python都能游刃有余地完成任务,极大地减轻了人工操作的负担。接下来,让我们一起领略Python自动化脚本的魅力,开启高效办公的新篇章。 ###
|
18天前
|
数据采集 存储 监控
21个Python脚本自动执行日常任务(2)
21个Python脚本自动执行日常任务(2)
63 7
21个Python脚本自动执行日常任务(2)
|
1月前
|
关系型数据库 MySQL 数据库连接
python脚本:连接数据库,检查直播流是否可用
【10月更文挑战第13天】本脚本使用 `mysql-connector-python` 连接MySQL数据库,检查 `live_streams` 表中每个直播流URL的可用性。通过 `requests` 库发送HTTP请求,输出每个URL的检查结果。需安装 `mysql-connector-python` 和 `requests` 库,并配置数据库连接参数。
132 68
|
7天前
|
数据挖掘 vr&ar C++
让UE自动运行Python脚本:实现与实例解析
本文介绍如何配置Unreal Engine(UE)以自动运行Python脚本,提高开发效率。通过安装Python、配置UE环境及使用第三方插件,实现Python与UE的集成。结合蓝图和C++示例,展示自动化任务处理、关卡生成及数据分析等应用场景。
58 5
|
25天前
|
Android开发 开发者 Python
通过标签清理微信好友:Python自动化脚本解析
微信已成为日常生活中的重要社交工具,但随着使用时间增长,好友列表可能变得臃肿。本文介绍了一个基于 Python 的自动化脚本,利用 `uiautomator2` 库,通过模拟用户操作实现根据标签批量清理微信好友的功能。脚本包括环境准备、类定义、方法实现等部分,详细解析了如何通过标签筛选并删除好友,适合需要批量管理微信好友的用户。
34 7
|
24天前
|
安全 API 文件存储
Yagmail邮件发送库:如何用Python实现自动化邮件营销?
本文详细介绍了如何使用Yagmail库实现自动化邮件营销。Yagmail是一个简洁强大的Python库,能简化邮件发送流程,支持文本、HTML邮件及附件发送,适用于数字营销场景。文章涵盖了Yagmail的基本使用、高级功能、案例分析及最佳实践,帮助读者轻松上手。
34 4
|
1月前
|
开发者 Python
使用Python实现自动化邮件通知:当长时程序运行结束时
本文介绍了如何使用Python实现自动化邮件通知功能,当长时间运行的程序完成后自动发送邮件通知。主要内容包括:项目背景、设置SMTP服务、编写邮件发送函数、连接SMTP服务器、发送邮件及异常处理等步骤。通过这些步骤,可以有效提高工作效率,避免长时间等待程序结果。
66 9
|
1月前
|
监控 数据挖掘 数据安全/隐私保护
Python脚本:自动化下载视频的日志记录
Python脚本:自动化下载视频的日志记录
|
1月前
|
运维 监控 网络安全
自动化运维的崛起:如何利用Python脚本简化日常任务
【10月更文挑战第43天】在数字化时代的浪潮中,运维工作已从繁琐的手工操作转变为高效的自动化流程。本文将引导您了解如何运用Python编写脚本,以实现日常运维任务的自动化,从而提升工作效率和准确性。我们将通过一个实际案例,展示如何使用Python来自动部署应用、监控服务器状态并生成报告。文章不仅适合运维新手入门,也能为有经验的运维工程师提供新的视角和灵感。