#!/usr/bin/python3
#!-*- coding: utf-8-*-
import smtplib
import time
import sys
import os
import logging
import logging.handlers
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
#time_out
CONN_TIME_OUT=10
MAIL_LOG_LEVEL=0
ENCODING="UTF-8"
KB=1024
MB=1024*KB
LEVELS = {'debug': logging.DEBUG,
'info': logging.INFO,
'warning': logging.WARNING,
'error': logging.ERROR,
'critical': logging.CRITICAL}
LOG_FILENAME = 'mail_helper_log.out'
#logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG,)
#logger=logging.getLogger('MyLogger')
#handler = logging.handlers.RotatingFileHandler(LOG_FILENAME, maxBytes=5*MB, backupCount=15, encoding=ENCODING)
#logger.addHandler(handler)
class MailHelper:
"""
create an mailUtil instance and pass some vars.
Usage:
mailUtil=mail.MailHelper("mexcn01.nhncorp.cn", "CN90056", "CN90056", smtp_port=25)
mailUtil.setFrom("noreply@nhn.com")
mailUtil.setLogLevel("info")
mailUtil.send("A3mao.zzg@nhn.com", "subject", "body message")
"""
def __init__(self, smtp_host, smtp_user, smtp_password, smtp_port=25,
time_out=CONN_TIME_OUT):
self.smtp_host=smtp_host
self.smtp_port=smtp_port
self.smtp_user=smtp_user
self.smtp_password=smtp_password
self.time_out=time_out
self.mail=MIMEMultipart('related')
self.alter=MIMEMultipart('alternative')
self.mail.attach(self.alter)
self.debug_level=MAIL_LOG_LEVEL
self.logger=logging.getLogger('MyLogger')
logFile=os.path.join(os.getenv("HOME"), LOG_FILENAME)
self.handler = logging.handlers.RotatingFileHandler(logFile,
maxBytes=5*MB, backupCount=15, encoding=ENCODING)
self.logger.addHandler(self.handler)
def setLogLevel(self, level_name):
"""
set debug level, when 1 on else off
"""
level = LEVELS.get(level_name, logging.NOTSET)
self.logger.setLevel(level)
#logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG,)
# only debug can display the log message
if(int(level)== 10):
self.debug_level=1
else:
self.debug_level=MAIL_LOG_LEVEL
def setFrom(self, mail_from):
"""
set mail from
"""
self._from=mail_from
self.mail["From"]=mail_from
def send(self, toAddr, subject, msg_body, msg_body_type='html', encoding=ENCODING):
"""
send email
"""
currentTime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
self.logger.info("send messgae \n[\n\t Subject : {0:>5} \n\t From : {1} \n\t To : {2} \n\t Time : {3}\n\t Message : {4:>5} \n] ".format(subject, self.mail["From"], toAddr, currentTime, msg_body))
if (type(toAddr) == list):
self.mail['To'] = ','.join(toAddr)
elif (type(toAddr) == str):
self.mail['To'] = toAddr
else:
raise Exception('invalid mail to')
if(msg_body_type == 'html'):
self.alter.attach(MIMEText(msg_body, 'html', encoding))
else:
self.alter.attach(MIMEText(msg_body, 'plain', encoding))
self.mail['Subject'] = subject
self.mail['Date'] = currentTime
server = False
try:
server = smtplib.SMTP(self.smtp_host, self.smtp_port, self.time_out)
server.set_debuglevel(self.debug_level)
server.login(self.smtp_user, self.smtp_password)
server.sendmail(self.mail["From"], self.mail['To'], self.mail.as_string())
return True
except Exception as e:
logging.error(sys.exc_info())
return False
finally:
server and server.quit()
self.logger.info("********************* send mail finished and quit ********************* ")
调用
上面为文件 mail_helper.py
mailhelper=mail.MailHelper(smtp_host, smtp_user, smtp_password, smtp_port=25)
mailhelper.setFrom(smtp_from)
mailhelper.setLogLevel("info")
currentTime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
mailhelper.send(smtp_to, "Warning!! monitor mail : " + currentTime, content)
分享到:
相关推荐
本课程设计的目标是利用Python实现多进程发送邮件的功能。 首先,我们需要了解Python中的`multiprocessing`模块,它是Python提供的一个标准库,用于实现多进程。通过创建子进程,每个进程可以独立地执行任务,互不...
使用python3自带的库实现邮件发送,包括主题、附件等,可直接使用
Python发邮件代码
在Python3中,多账户发邮件的实现主要依赖于`smtplib`库和`email.mime`模块。`smtplib`库提供了与SMTP(简单邮件传输协议)服务器交互的功能,而`email.mime`则用于创建符合邮件标准的邮件对象。下面我们将详细探讨...
python GUI实现简易发送邮件程序。
Python实现下载pop3邮件保存到本地的知识点涉及到使用Python进行网络编程,利用poplib模块与邮件服务器交互,以及使用正则表达式处理邮件内容。以下是详细介绍: 1. poplib模块介绍: poplib是Python标准库的一部分...
本篇将深入讲解如何利用Python的requests库发送钉钉消息以及如何使用email和smtplib库发送邮件,特别是与163邮箱服务的集成。 首先,我们来探讨如何使用requests库发送钉钉消息。钉钉提供了Webhook接口,通过...
基于Python的电子邮件自动发送程序设计涉及多个知识点,包括Python编程、邮件发送协议、电子邮件格式构造、文件操作以及程序的时间控制等。以下是详细的知识点说明。 首先,Python编程是整个项目的核心。Python由于...
这里是目前最有效的实现Python发送Google邮件,不仅仅提供了发送纯文本的Google邮件,以及发送HTML、图片附件、Word附件的邮件。另外提供了在服务器端不使用Python而是使用Shell脚本的方式实现。我保证你看了之后...
在这个“python爬虫发邮件示例demo”中,我们将探讨如何结合Python的爬虫技术和邮件发送功能,实现自动抓取数据并将其通过电子邮件发送出去。 首先,我们需要了解Python中的两个关键库:`requests` 和 `...
使用python代码自动发送邮件,运行前请先将邮箱地址及密码改成自己的
Python作为一种强大且易学的编程语言,广泛应用于各种自动化场景,包括电子邮件的自动发送。本教程将基于提供的"Python自动发送邮件并添加附件的源代码V2.1"进行深入解析,帮助你理解和实现类似的功能。 首先,我们...
Python发送邮件是编程中常见的需求,特别是在自动化任务和通知系统中。本文档主要介绍了两种使用Python发送邮件的方法,涉及到了smtplib和email模块。 首先,smtplib是Python的标准库,它提供了一种与SMTP(简单...
python发送邮件代码,服务器配置请自行修改,脚本中的地址是内网搭建的邮件服务器。可以结合系统定时任务配置邮件定时发送。希望帮到你
这里我们关注的主题是“Python发邮件源码”,这通常涉及到使用SMTP(Simple Mail Transfer Protocol)来实现邮件的发送。下面我们将深入探讨这个话题,并提供一个实际的Python代码示例。 首先,你需要了解Python中...
Python 邮件发附件方法是指使用 Python 语言发送带附件的电子邮件。该方法使用了 Python 的 email 模块,通过该模块可以创建一个带附件的邮件实例,并将其发送到指定的收件人邮箱中。 email 模块是 Python 的一个...
python3自动发邮件脚本,以QQ邮箱为例,自己配置发送邮箱和授权码
可发送图片,附件,包括多个收件人和抄送人以及匿名发送