PHP处理postfix的邮件内容
程序员文章站
2022-06-14 22:50:20
...
- 01
- 02
- 03 #从输入读取到所有的邮件内容
- 04 $email = "";
- 05 $fd = fopen("php://stdin", "r");
- 06 while (!feof($fd)) {
- 07 $email .= fread($fd, 1024);
- 08 }
- 09 fclose($fd);
- 10
- 11 #记录所有的内容,测试
- 12 file_put_contents("/tmp/mail/".time(), $email);
- 13
- 14 #处理邮件
- 15 $lines = explode("\n", $email);
- 16
- 17 // empty vars
- 18 $from = "";
- 19 $date = "";
- 20 $subject = "";
- 21 $message = "";
- 22 $splittingheaders = true;
- 23
- 24 for ($i=0; $icount($lines); $i++) {
- 25 if ($splittingheaders) {
- 26
- 27 // look out for special headers
- 28 if (preg_match("/^Subject: (.*)/", $lines[$i], $matches)) {
- 29 $subject = $matches[1];
- 30 }
- 31 if (preg_match("/^From: (.*)/", $lines[$i], $matches)) {
- 32 if(strpos($lines[$i],")){
- 33 //the name exist too in from header
- 34 $data = explode(',$lines[$i]);
- 35 $from = substr(trim($data[1]),0,-1);
- 36 }else{
- 37 //only the mail
- 38 $from = $matches[1];
- 39 }
- 40 }
- 41 if (preg_match("/^Date: (.*)/", $lines[$i], $matches)) {
- 42 $date = $matches[1];
- 43 }
- 44 } else {
- 45 // not a header, but message
- 46 $message .= $lines[$i]."\n";
- 47 }
- 48
- 49 if (trim($lines[$i])=="") {
- 50 // empty line, header section has ended
- 51 $splittingheaders = false;
- 52 }
- 53 }
- 54
- 55 $when = date("Y-m-d G:i:s");
- 56 $data = explode('@',$from);
- 57 $username = $data[0];
- 58
- 59 #记录到数据库
- 60 $sql = "insert into mails ( `username`, `from`, `subject`, `date`, `message`) values ( '$username', '$from', '$subject', '$when', '$message')";
- 61
- 62 #测试
- 63 file_put_contents("/tmp/mail2.log", $sql);
- 64 ?>
推荐阅读
-
用php处理百万级以下的数据提高查询速度的方法
-
jQuery向下滚动即时加载内容实现的瀑布流效果_PHP
-
php可以自动读取数据库内容然后判断用户的注册时间,大于多久的自动发送一封邮件吗?该怎么解决
-
参考discuz的passpor写的php加密解密处理类
-
php简单浏览目录内容的实现代码_php技巧
-
PHP处理JSON字符串key缺少双引号的解决方法_PHP
-
为什么数据分析一般用到java,而不是使用hadoop,flume,hive的api使用php来处理相关业务?
-
PHP处理二进制数据的实现方法,php处理二进制数据
-
图片处理 - PHP图片拼接如何高效的实现
-
推荐个功能齐全的发送PHP邮件类