出于简单的测试目的,我在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中以数组的形式获取这些电子邮件的输出。任何想法如何做到这一点?
答案 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
,它知道如何正确锁定邮箱文件。