使用php从/ usr / bin / mail读取电子邮件

时间:2014-04-25 09:11:44

标签: php linux email

出于简单的测试目的,我在Linux机器上本地发送邮件。我只需在命令行输入mail即可看到收到的邮件。我现在想从php中获取一些收到的电子邮件。有人知道我该怎么做吗?

欢迎所有提示!

[编辑] 解释。当我从php发送电子邮件到'kramer65 @ localhost'时,我可以通过运行引用/ usr / bin / mail的mail来查看该电子邮件。输出是这样的:

Mail version 8.1.2 01/15/2001.  Type ? for help.
"/var/mail/kramer65": 1 message 1 new
>N  1 kramer65@php0        Fri Apr 25 11:49   16/501   THIS IS THE SUBJECT
& 
Message 1:
From kramer65@php0  Fri Apr 25 11:49:25 2014
X-Original-To: kramer65@localhost
To: kramer65@localhost
Subject: THIS IS THE SUBJECT
X-PHP-Originating-Script: 1007:php shell code
Date: Fri, 25 Apr 2014 11:49:25 +0200 (CEST)
From: kramer65@php0 (kramer65)

THIS IS THE BODY OF THE MESSAGE

我现在想在php中以数组的形式获取这些电子邮件的输出。任何想法如何做到这一点?

2 个答案:

答案 0 :(得分:0)

您可以使用file_get_contents('filename')将收到的电子邮件文件加载到字符串中; 如果你想创建一个多维数组,那么在receive-email文件中必须有一个特定的结构来分隔你的php代码中的电子邮件发件人,标题,文本等。

如果您不能(或不想)将发件人,标题,文本等分开,您仍然可以制作完整邮件的数组。

如果您将每封电子邮件保存在单独的文件中,它将如下所示:

$directory = 'path/to/your/mails/';
$files = glob($directory.'*.txt');
$filescount = count($files);
$mailArray = array();
for ($i = 0; $i < $filescount; $i++)
{
  $mailString = file_get_contents('mail'.$i);
  $mailArray[] = $mailString;
}

在此示例中,我假设您的邮件的文件类型是.txt 邮件的文件名也必须是mail0,mail1,mail2等。

如果我完全误解了这个问题,我很抱歉;)

答案 1 :(得分:0)

Unix系统上的邮件假脱机是一个简单的平面文本文件,名为Berkeley mbox格式。

要修改它,您需要使用与mail程序相同的锁定机制(以便在您修改文件时不会被其他程序更改)但只是阅读它,它就是很好打开,一次读一行,当你看到序列(start of file, or newline)From时开始一条新消息,并在你完成时关闭。

(我不熟悉PHP,但我想你应该能够找到一个能够做到这一点的图书馆。如果你很幸运,那么它是安全且没有错误的。)

Procmail套件包含一个名为formail的实用程序,它可以在mbox文件中的每条消息上生成一个新程序(例如你的PHP脚本)。还有另一个实用程序lockfile,它知道如何正确锁定邮箱文件。