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

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

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

功能:

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

2: 载入邮件header信息

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

so ,写个代码吧,

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

直接贴代码了

发送代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/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=["bright.jiang@infotm.com","sam.zhou@infotm.com"]

########smtp setting#############
mail_host="smtp.exmail.qq.com"
mail_user="xxx@xxx.com"
mail_pass="xxx"
mail_postfix="xxx.com"
######################
def send_mail(to_list,sub,content,type='html'):
'''
to_list:发给谁
sub:主题
content:内容
send_mail("aaa@126.com","sub","content")
'''
me=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 = "%s@infotm.com"%(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])

收件人列表:

1
2
3
4
5
6
7
8
9
10
11
12
13
#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

邮件主题:

1
Gerrit服务器升级通知

邮件内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

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

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