博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python分析postfix邮件日志的状态
阅读量:6297 次
发布时间:2019-06-22

本文共 6803 字,大约阅读时间需要 22 分钟。

公司需求:客服通过WEB想查询 某一时间他发送的邮件的 状态,如果是拒绝是什么原因导致的。

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
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import 
re
import 
threading
import 
MySQLdb
import 
datetime,time
 
 
###########################################################################################
def 
Gainid(log):
    
#mail id re
    
mailid 
= 
re.
compile
(r
'\w{11}\:'
)
    
list_id 
= 
[]
    
for 
line 
in 
log:
        
m  
= 
mailid.search(line)
        
if 
is 
not 
None
:
            
list_id.append(m.group().strip(
':'
))
        
else
:
            
continue
    
return 
list
(
set
(list_id))
 
def 
HandleLog(log,mailid):
    
tomail 
= 
''
    
fmail 
= 
''
    
status 
= 
'other'
    
sdict
=
{
'status\=sent'
:
'ok'
,
'Sender address rejected'
:
'Sender address rejected'
,
'Recipient address rejected'
:
'Recipient address rejected'
,
'said\: 550 [Mm]ailbox'
:
'Mailbox not found'
,
'said\: 550 Domain frequency limited'
:
'Domainfrequenc limited'
,
'said\: 55[3-4]'
:
'junk mail'
,
'[uU]ser not exist'
:
'user not exist'
,
'said\: 550 User suspended'
:
'User suspended'
,
'said\: 550 User not found'
:
'User not found'
,
'Message rejected as spam by Content Filterin'
:
'Message rejected as spam by Content Filterin'
,
'said\: 550 No such user'
:
'user not exist'
,
'[Uu]ser unknown'
:
'user unknown'
}
    
for 
line 
in 
log:
        
= 
re.search(mailid,line)
        
if 
is 
not 
None
:
            
mailre 
= 
re.
compile
(r
'[^\._-][\w\.-]+@(?:[A-Za-z0-9]+\.)+[A-Za-z]+'
)
            
timere 
= 
re.
compile
(r
'^\w+\s+\d+\s\d{2}\:\d{2}:\d{2}'
)
            
nt 
= 
timere.search(line)
            
mtime 
= 
nt.group()
            
= 
mailre.search(line)
            
if 
is 
not 
None
:
                
= 
re.search(r
'from\='
,line)
                
= 
re.search(r
'to\='
,line)
                
if 
is 
not 
None
:
                    
fmail 
= 
n.group().strip(
'<'
)
                
if 
is 
not 
None
:
                    
tmail 
= 
n.group().strip(
'<'
)
                    
for  
key 
in 
sdict:
                        
statre 
= 
re.search(key,line)
                        
if 
statre 
is 
not 
None
:
                            
status 
= 
sdict [key]
                        
else
:
                            
pass
                    
print 
(
"id: %s date :%s  |frdr: %s |  todr: %s | status: %s" 
% 
(mailid,mtime ,fmail,tmail,status))
                    
ttime 
= 
fromttime(mtime)    
                    
sql 
= 
"insert into mailtest values('%s','%s','%s','%s','%s')" 
% 
(mailid,ttime ,fmail,tmail,status)            
                    
insertmail(sql)
#                    if tomail:
#                        tomail = tomail+"(%s|%s)" % (tmail,status)
#                    else:
#                        tomail = "(%s|%s)" % (tmail,status)
        
else
:
            
continue
def 
fromttime(mtime):
    
today 
= 
datetime.date.today()
     
    
yer   
=     
today.strftime(
"%Y"
)      
    
mtime 
=  
yer 
+ 
mtime
    
ntime 
=  
time.strptime(mtime,
"%Y%b  %d %H:%M:%S"
)
    
ttime 
=  
time.strftime(
'%Y-%m-%d %H:%M:%S'
,ntime)
    
return 
ttime
def 
insertmail(sql):
    
try
:
        
conn
=
MySQLdb.connect(host
=
'localhost'
,user
=
'root'
,passwd
=
'
',port=3306,db='
mailawst')
        
cur 
= 
conn.cursor()
    
cur.execute(sql)
        
cur.close()
    
conn.commit()
        
conn.close()
    
except 
MySQLdb.Error,e:
        
print 
"Mysql Error %d: %s" 
% 
(e.args[
0
],e.args[
1
])
          
         
def 
main(logfile):
    
#open file
    
= 
open
(logfile,
'r'
)
    
log 
= 
f.readlines()
    
f.close()
 
    
#mail id 
    
mailid 
= 
Gainid(log)
    
#HandleLog
    
for 
in 
range
(
len
(mailid)):
        
HandleLog(log,mailid[i])        
#    HandleLog(log,'850DA916966')        
 
 
if 
__name__ 
=
= 
"__main__"
:
    
today 
= 
datetime.date.today() 
    
oneday 
= 
datetime.timedelta(days
=
1
)
#    d1 = datetime.datetime.now()
#    d3 = d1 + datetime.timedelta(hours=10)
#    d3.ctime()   
    
yesterday 
= 
today 
- 
oneday
    
tommorrow 
= 
today 
+ 
oneday
    
#print yesterday 
    
zhi 
= 
yesterday.strftime(
"%Y%m%d"
)
    
logfile 
= 
"/data/maillog/mail.log.%s" 
% 
zhi
        
#logfile = "/data/maillog/mail.log.20140516"
    
main(logfile)

WEB 展现通过apahce+php:

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
<meta http-equiv=
"Content-Type" 
content=
"text/html; charset=UTF-8"
>
<?php
error_reporting
(E_ALL & ~E_NOTICE);
$mysql_server_name
=
'localhost'
;
$mysql_username
=
'root'
;
$mysql_password
=
'admin'
;
$mysql_database
=
'mailawst'
;
$conn
=mysql_connect(
$mysql_server_name
,
$mysql_username
,
$mysql_password
,
$mysql_database
);
$sql
=
'select * from mailtest where sendtime>curdate()-1 limit 5'
;
//mysql_query($sql);    
mysql_select_db(
$mysql_database
,
$conn
);
$result
=mysql_query(
$sql
,
$conn
);
$resultq
=mysql_query(
$query
,
$conn
);
//mysql_close($conn);   
echo 
"<table align=center><tr><td><font size=6>"
.
"邮件发送状态查询"
.
"</front></td></tr></table>" 
;
echo 
"&nbsp"
;
$acceptmail 
= trim(
$_POST
[
'acceptmail'
]);
$st 
$_POST
[
'st'
];
$et 
$_POST
[
'et'
];
$query 
'select * from mailtest where sendtime >='
.
'\''
.
$st
.
'\''
.
' and Date(sendtime)<='
.
'\''
.
$et
.
'\''
.
' and toaddress='
.
'\''
.
$acceptmail
.
'\''
;
$resultq
=mysql_query(
$query
,
$conn
);
//echo $query." ";
//echo $acceptmail.$st.$et;
//查询条件
echo 
"<script type='text/javascript' src='./showdate.js'></script>"
;
?>
<form action=
"<?php echo $_SERVER['PHP_SELF'];?>" 
method=
"post"
>
<table align=center>
<tr><td>接收者邮件地址:<input type=
'text' 
value=
'<?php echo $_POST['
acceptmail
'];?>'
name=
'acceptmail' 
style=
'width:180;' 
/></td></tr>
<tr><td>邮件发送时间段:<input type=
'text' 
id=
'st' 
name=
'st' 
onclick=
"return Calendar('st');" 
value=
'<?php echo $_POST['
st
'];?>' 
class
=
'text' 
style=
'width:85px;'
/>
-<input type=
'text' 
id=
'et' 
onclick=
"return Calendar('et');" 
value=
'<?php echo $_POST['
et
'];?>' 
name=
'et' 
class
=
'text' 
style=
'width:85px;'
/>
 
<input type=
"submit" 
name=
"submit" 
value=
"查询" 
style=
'width:50px;'
>
 
</td></tr>
</table></form>
<br>
<table align=center>
<?php
echo 
"<tr>"
;
while
(
$field 
= mysql_fetch_field(
$result
)){
//使用while输出表头
        
if 
(
$field
->name==
"mailid"
)
        
{
        
echo 
"<td>&nbsp;"
.
"邮件ID"
.
"&nbsp;</td>"
;  }
        
if 
(
$field
->name==
"sendtime"
)
        
{
        
echo 
"<td>&nbsp;"
.
"发送时间"
.
"&nbsp;</td>"
;  }
        
if 
(
$field
->name==
"fromaddress"
)
        
{
        
echo 
"<td>&nbsp;"
.
"邮件发送者"
.
"&nbsp;</td>"
;  }
        
if 
(
$field
->name==
"toaddress"
)
        
{
        
echo 
"<td>&nbsp;"
.
"邮件接收者"
.
"&nbsp;</td>"
;  }
        
if 
(
$field
->name==
"status"
)
        
{
        
echo 
"<td>&nbsp;"
.
"邮件发送结果"
.
"&nbsp;</td>"
;  }
 
}
echo 
"</tr>"
;
if
(isset(
$_POST
[
'submit'
]) && 
$_POST
[
'submit'
])
{
  
$flag 
= 0;
//按查询条件输出结果
        
while
(
$rows 
= mysql_fetch_row(
$resultq
))
        
{
//使用while遍历所有记录,并显示在表格的tr中
                
echo 
"<tr bgcolor=#CC9999>"
;
                
for
(
$i 
= 0; 
$i 
count
(
$rows
); 
$i
++)
                
echo 
"<td>&nbsp;"
.
$rows
[
$i
].
"</td>"
;
             
$flag
++;
        
}
        
echo 
"</tr></table>"
;
        
if 
(
$flag 
== 0)
        
echo 
"<table align=center bgcolor=#cc3366 >没有找到合适的记录</table>"
;
}
else
{
//默认输出结果
        
while
(
$rows 
= mysql_fetch_row(
$result
)){
        
//使用while遍历所有记录,并显示在表格的tr中  
                
echo 
"<tr bgcolor=#CC9999>"
;
                
for
(
$i 
= 0; 
$i 
count
(
$rows
); 
$i
++)
                
echo 
"<td>&nbsp;"
.
$rows
[
$i
].
"</td>"
;
        
}
        
echo 
"</tr></table>"
;
}
 
?>

showdate.js 时间那个 通用的JS!! 附件有!!

最终效果图!!

本文转自 houzaicunsky 51CTO博客,原文链接:http://blog.51cto.com/hzcsky/1417112

转载地址:http://hqmta.baihongyu.com/

你可能感兴趣的文章
类对象定义 二
查看>>
收费视频网站Netflix:用户到底想要“点”什么?
查看>>
MacOS High Sierra 12 13系统转dmg格式
查看>>
关于再次查看已做的多选题状态逻辑问题
查看>>
动态下拉菜单,非hover
查看>>
政府安全资讯精选 2017年第十六期 工信部发布关于规范互联网信息服务使用域名的通知;俄罗斯拟建立备用DNS;Google打击安卓应用在未经同意情况下收集个人信...
查看>>
简单易懂的谈谈 javascript 中的继承
查看>>
iOS汇编基础(四)指针和macho文件
查看>>
Laravel 技巧锦集
查看>>
Android 使用 ViewPager+RecyclerView+SmartRefreshLayout 实现顶部图片下拉视差效果
查看>>
Flutter之基础Widget
查看>>
写给0-3岁产品经理的12封信(第08篇)——产品运营能力
查看>>
ArcGIS Engine 符号自动化配置工具实现
查看>>
小程序 · 跳转带参数写法,兼容url的出错
查看>>
flutter error
查看>>
Flask框架从入门到精通之模型数据库配置(十一)
查看>>
10年重新出发
查看>>
2019年-年终总结
查看>>
聊聊elasticsearch的RoutingService
查看>>
让人抓头的Java并发(一) 轻松认识多线程
查看>>