使用电子邮件标题 - PHP

时间:2012-09-25 22:16:43

标签: php email-headers

我将传入的电子邮件发送到handler.php。我可以成功管道并且它正常工作,但是当它从邮件头中取出变量时,例如“主题”,“收件人”或“邮件正文”,我遇到了一些问题。这是我从here

获得的代码

这是代码:

 <?php
//Assumes $email contains the contents of the e-mail
//When the script is done, $subject, $to, $message, and $from all contain appropriate values

//Parse "subject"
$subject1 = explode ("\nSubject: ", $email);
$subject2 = explode ("\n", $subject1[1]);
$subject = $subject2[0];

//Parse "to"
$to1 = explode ("\nTo: ", $email);
$to2 = explode ("\n", $to1[1]);
$to = str_replace ('>', '', str_replace('<', '', $to2[0]));

$message1 = explode ("\n\n", $email);

$start = count ($message1) - 3;

if ($start < 1)
{
    $start = 1;
}

//Parse "message"
$message2 = explode ("\n\n", $message1[$start]);
$message = $message2[0];

//Parse "from"
$from1 = explode ("\nFrom: ", $email);
$from2 = explode ("\n", $from1[1]);

if(strpos ($from2[0], '<') !== false)
{
    $from3 = explode ('<', $from2[0]);
    $from4 = explode ('>', $from3[1]);
    $from = $from4[0];
}
else
{
    $from = $from2[0];
}
?> 

对于Gmail电子邮件,它可以获取主题,从,到,以及邮件正文,但它不适用于来自Yahoo的传入电子邮件。

是否有与所有着名电子邮件服务提供商兼容的通用php类?如果有人从RoundCube或其他电子邮件发件人发送电子邮件怎么办?我如何成功检测变量?

谢谢!

2 个答案:

答案 0 :(得分:1)

您在评论中描述的邮件格式为Multi-Part Mime编码。

有很多事情需要考虑 - 如果电子邮件是HTML 明文,嵌入图像,附件等等,该怎么办?

如果您使用的PHP版本是使用MailParse扩展构建的,那么它们应该为您提供一组相当简单的工具。

Google代码上还提供了Mime Email Parser,我之前没有使用过,但似乎相当简单。

答案 1 :(得分:1)

如果你需要一些非常简单的东西,这是一个起点:

list($headers, $message) = explode("\n\n", $email);

$header = imap_rfc822_parse_headers($headers);

// You can now access
$header->from;
$header->to;
$header->subject;

电子邮件部分(即使单独使用)也可以使用imap_rfc822_parse_adrlist()解析。