我的服务器上有电子邮件被传送到我的Zend Framework 2索引(跟随MVC)并被发送到我的控制器。
public function incomingMailAction()
{
$message ='';
$stdin = fopen('php://stdin', 'r');
while($line = fgets($stdin)) {
$message .= $line;
}
fclose($stdin);
// Parse e-mail here and store in database (including attachments)
}
我可以处理数据库部分的存储,我只是不知道如何获取该原始消息然后将其转换为有用的东西(To,From,ReplyTo,CC,BCC,Headers,attachments等等) )。
答案 0 :(得分:3)
您可以使用Zend\Mail\Message::fromString($rawMessage);
但它不会解码MIME正文。
答案 1 :(得分:1)
我也尝试用ZF2解析电子邮件,但实际上我在Zend Mail组件的源代码中发现了一条注释,解码邮件的内容在todo列表中尚未实现。目前似乎没有简单的方法。
相反,我建议使用php-mime-mail-parser - 我最终使用该库。它使用pecl扩展名mailparse(您可能需要安装)的功能,并且非常简单。一些可以帮助您入门的例子:
$message = new \PhpMimeMailParser\Parser();
$message->setText($rawMail); // Other functions to set a filename exists too
// All headers are retrieved in lowercase, "To" becomes "to"
// and "X-Mailer" becomes "x-mailer"
$recipient = $message->getHeader('to');
$date = $message->getHeader('date');
$xmailer = $message->getHeader('x-mailer');
// All headers can be retrieved at once as a simple array
$headers = $message->getHeaders();
$recipient = $headers['to'];
// Attachments can be retrieved all at once as "Attachment" objects
$attachments = $message->getAttachments();
foreach($attachments as $attachment) {
$attachment_as_array = array(
'type' => $attachment->getContentType(),
'name' => $attachment->getFilename(),
'content' => (string)$attachment->getContent(),
);
}
因为库使用PHP的现有扩展并且在内存管理方面似乎非常有效,所以它可能比ZF更好地解析电子邮件 - 而且它也非常容易使用。我唯一的缺点是在每台服务器上额外安装了mailparse pecl扩展。
答案 2 :(得分:-1)
public function incomingMailAction()
{
$message ='';
$stdin = fopen('php://stdin', 'r');
while($line = fgets($stdin)) {
$email .= $line;
}
fclose($stdin);
$to1 = explode ("\nTo: ", $email);
$to2 = explode ("\n", $to1[1]);
$to = str_replace ('>', '', str_replace('<', '', $to2[0]));
list($toa, $tob) = explode('@', $to);
}