本文实例讲述了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程序设计有所帮助。