本文实例讲述了PHP处理postfix邮件内容的方法。分享给大家供大家参考。具体如下:
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
|
<?php
//从输入读取到所有的邮件内容
$email = "" ;
$fd = fopen ( "php://stdin" , "r" );
while (! feof ( $fd )) {
$email .= fread ( $fd , 1024);
}
fclose( $fd );
//记录所有的内容,测试
file_put_contents ( "/tmp/mail/" .time(), $email );
//处理邮件
$lines = explode ( "\n" , $email );
// empty vars
$from = "" ;
$date = "" ;
$subject = "" ;
$message = "" ;
$splittingheaders = true;
for ( $i =0; $i < count ( $lines ); $i ++) {
if ( $splittingheaders ) {
// look out for special headers
if (preg_match( "/^Subject: (.*)/" , $lines [ $i ], $matches )) {
$subject = $matches [1];
}
if (preg_match( "/^From: (.*)/" , $lines [ $i ], $matches )) {
if ( strpos ( $lines [ $i ], "<" )){
//the name exist too in from header
$data = explode ( '<' , $lines [ $i ]);
$from = substr (trim( $data [1]),0,-1);
} else {
//only the mail
$from = $matches [1];
}
}
if (preg_match( "/^Date: (.*)/" , $lines [ $i ], $matches )) {
$date = $matches [1];
}
} else {
// not a header, but message
$message .= $lines [ $i ]. "\n" ;
}
if (trim( $lines [ $i ])== "" ) {
// empty line, header section has ended
$splittingheaders = false;
}
}
$when = date ( "Y-m-d G:i:s" );
$data = explode ( '@' , $from );
$username = $data [0];
//记录到数据库
$sql = "insert into mails ( `username`, `from`, `subject`, `date`, `message`) values ( '$username', '$from', '$subject', '$when', '$message')" ;
//测试
file_put_contents ( "/tmp/mail2.log" , $sql );
?>
|
希望本文所述对大家的php程序设计有所帮助。