python 发送邮件,支持邮件内容定义

很久很久以前的事情了,今天整理发现一团代码,扔生来吧


花了很多搞了gerrit 服务docker化, 账户添加完毕,老大说你给他们每个人发个邮件通知,另外把邮件内容写的漂亮点,格式化一下,顺便把使用向导镐一下,使用向导中直接使用目标的用户名密码.....---囧.....几十号人,挨个发邮件,顺便把用户名密码更新一进去,死人的会.

功能:

1:从邮件用户名列表读取用户名和密码

2: 载入邮件header信息

3: 载入email内容信息,并替换其中的关键字为对应的用户名和密码

so ,写个代码吧, 


载入一个邮件模板,然后替换其中的用户名密码标志,按照用户名挨个发呗..

直接贴代码了

发送代码:


#!/usr/bin/env python
# -*- coding: utf-8 -*-
#导入smtplib和MIMEText
import smtplib
from email.mime.text import MIMEText
import  base64
import sys
from optparse import OptionParser
import codecs
import time

mailto_list=["[email protected]","[email protected]"]

########smtp setting#############
mail_host="smtp.exmail.qq.com"
mail_user="[email protected]"
mail_pass="xxx"
mail_postfix="xxx.com"
######################
def send_mail(to_list,sub,content,type='html'):
    '''
    to_list:发给谁
    sub:主题
    content:内容
    send_mail("[email protected]","sub","content")
    '''
    me=mail_user+"<"+mail_user+">"
    msg = MIMEText(content,_subtype=type,_charset='UTF-8')
    msg['Subject'] = sub
    msg['From'] = me
    msg['To'] = ";".join(to_list)
    try:
        s = smtplib.SMTP()
        print("@@!@@")
        print s.connect(mail_host)
        print("@@!@@")
        print s.login(mail_user,mail_pass)
        print("@@!@@")
        s.sendmail(me, to_list, msg.as_string())

        s.close()
        return True
    except Exception, e:
        print("@@!@@")
        print str(e)
        return False
def get_email_title(file) :
    try :
        fd = codecs.open(file,'r','UTF-8')
        data =  fd.read()
        fd.close()
    except :
        print("read mail title error")
        sys.exit(0)
    return data
def get_email_content_template(file) :
    try :
        fd = open(file,'r')
        data =  fd.read()
        fd.close()
    except :
        print("read mail content error")
        sys.exit(0)
    return data
def get_user_list(file):
    try :
        fd = open(file,'r')
        data =  fd.readlines()
        fd.close()
        print(type(data) )
    except :
        print("read user list error")
        sys.exit(0)
    userPass = []
    for line in data :  
        if len(line) == 0 :
            break
        if line[0] in ['#',' ','\n'] :
            continue
        userPass.append(line.split() )
    return userPass
def update_email_from_template(template,userPass):
    print(type(userPass[0]))
    temp= userPass[0].split(".")
    big_name = "".join([temp[0][0:1].upper(),temp[0][1:]," ",temp[1][0:1].upper(),temp[1][1:] ] )
    print(big_name)
    template = template.replace("##USER_NAME",userPass[0]).replace("##USER_PASS",userPass[1]).replace("##USER_FULL",big_name)
    return template
if __name__ == '__main__':
    parser = OptionParser(usage="usage:%prog [optinos] filepath")
    parser.add_option("-u", "--userfile",
                    action = "store",
                    type = 'str',
                    dest = "userFile",
                    default = "user.lst",
                    help="user list file ,will delete all users not include in the file and update the password in the file"
                    )

    parser.add_option("-t", "--title",
                    action = "store",
                    type = 'str',
                    dest = "title",
                    default = "title.t",
                    help = "email tile template"
                    )
    parser.add_option("-c", "--content",
                    action = "store",
                    type = 'str',
                    dest = "content",
                    default = "mail.t",
                    help = "mail content template"
                    )
    (options, args) = parser.parse_args()
    userList = get_user_list(options.userFile)
    print (userList)

    mail_title =  get_email_title(options.title)
    mail_content = get_email_content_template(options.content)
    for user in userList :
        print user
        send_user =  "%[email protected]"%(user[0])
        content = update_email_from_template(mail_content,user)
##        break
        print('begin send')
        if send_mail([send_user ],mail_title,content):
            print "send to %s  ok" %(user[0])
        else:
            print "send to %s  fail" %(user[0])

收件人列表:

#user password file ,just edit it ,will update new password to the passwd file
#format :user  password  ,no space in the start char
#left password empty ,will generate randon password
#tools developed by Bright.Jiang
#
#BSP leader
#
warits.wang           236890 
#
#BSP
#
bright.jiang          098765 
#sam.zhou 			 099032

邮件主题:

Gerrit服务器升级通知


邮件内容:

Dear All :     

       为提升Gerrit服务器稳定性以及满足空间的需求,我们将从11月16日(下周一)开始统一切换到新服务器。新服务器的代码为旧服务器11/14日最新的版本。为保证代码统一,原服务器将同时停用。届时请大家花几分钟时间重新配置自已的Gerrit环境。

     

       1. 使用以下用户名和密码登录新的Gerrit服务器: http://gerrit.in.infotm.com .

           新的用户名密码为:  ##USER_NAME             ##USER_PASS      

       2. 点击右上角Anonymous Coward -> Settings -> Contact  Information,添写自己的个人信息,如##USER_FULL,(统一格式:英文名空格姓,首字母大写)。点击Register New Email,添写自己的邮箱:##USER_NAME@infotm.com  (注意,请使用公司新邮箱),最后点击Save Changes

       3.  添加SSH Public Key,左边选则SSH Public Keys,执行命令 

            $cat ~/.ssh/id_rsa.pub 

            复制全部内容到gerrit ssh key文本框中,点击Add。 如果没有id_rsa.pub,使用以下命令生成: 

            $ ssh-keygen -t rsa  -C "##USER_NAME@infotm.com"

       4.  修改本地git配置:

             $ git config --global user.name   "##USER_NAME"

             $ git config --global user.email  "##USER_NAME@infotm.com"      

       5.  更新本地repo,需要使用新的repo地址重新repo init , 常用的repo地址可以从Wiki上检索:常用Repo地址

 

       6.  常见的repo使用的错误,也会在wiki上不定期更新,欢迎各位参阅和修订,也欢迎 大家把工作中的经验总结更新到Wiki页面


Enjoy It!

Gerrit Admin




仅作参考,仅作收藏,不惜勿喷



你可能感兴趣的:(python)