`

python发送邮件

 
阅读更多

首先安装sendmail

 

yum install sendmail

service sendmail start

 

安装完成后,sendmail默认可以用localhost来向外面发送邮件。

 

 

用python发送邮件:

参考

email : Creating email and MIME objects from scratch

 

实例代码如下:

(send_mail.py)

 

import smtplib
import email
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import datetime
import logging

import config

LOG = logging.getLogger("email")

def _send_mail(to_list,sub,content):
    """
    to_list: email to who?
    sub: email subject
    content: email content
    send_mail("aaa@126.com","sub","content")
    """
    me=config.mail_user+"<"+config.mail_user+"@"+config.mail_postfix+">"
    #msg = MIMEText(content)
    msgRoot = MIMEMultipart('related')
    msgRoot['Subject'] = sub
    msgRoot['From'] = me
    msgRoot['To'] = ";".join(to_list)
    msgRoot['Date'] = email.Utils.formatdate()
    msgRoot.preamble = 'This is a message from ***'
    
    msgAlt = MIMEMultipart('alternative')
    msgRoot.attach(msgAlt)

    html = content
    html_part = MIMEText(html, 'html', 'utf-8')
    msgAlt.attach(html_part)
    
    try:
        s = smtplib.SMTP()
        s.connect(config.mail_host)
        #s.login(config.mail_user,config.mail_pass)
        s.sendmail(me, to_list, msgRoot.as_string())
        s.close()
        return True
    except Exception, e:
        LOG.exception(str(e))
        print str(e)
        return False

def fill_table(content):
    text =""" <p>Hi,</p>
    <p>The following messages are from inconsistency check :</p>
    <p></p>
    """
    
    head = """<table border=1 style="font-size:10.0pt;border-collapse:collapse;"
    bordercolor="black"  cellpadding=4>"""
    end = "</table>"
    
    sub = """<tr>
    <th>Time</th>
    <th>Inconsistency Item</th>
    <th>Database Value</th>
    <th>Actual Check Result</th>
    </tr>"""

    return text + head + sub + content + end 

def send_email(content):
    t = str(datetime.datetime.now())
    subject = "check result: %s" % t
    
    content = fill_table(content)
    
    if _send_mail(config.mailto_list,subject,content):
        print "send email success."
        LOG.info("send email:%s success." % subject)
    else:
        print "send email fail."
        LOG.error("send email:%s fail" % subject)
    return

 

其中config.py的配置如下:

 

 

# mail to, multi destinations must split with ',' 
mailto_list = ["aaa@126.com, bbb@126.com"]

# mail from
mail_host="localhost"
mail_user="root"
mail_postfix="bbb.com" #域名

 

 

发送email的content的格式如下:

直接调用send_email(self.email_content)即可发送。

 

def _add_email_content(self, output):
    t = str(datetime.datetime.now())
    content = """<tr>
    <td>%s</td>
    <td>%s</td>
    <td>%s</td>
    <td>%s</td>
    </tr>""" % (t, str(output[0]), str(output[1]), str(output[2]))
    self.email_content = self.email_content + content 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics