如何从Zend_Mail_Message获取发件人的电子邮件地址?

时间:2012-08-03 17:05:04

标签: php zend-framework email

我正在使用Zend_Mail_Message类来显示我的PHP应用程序内的电子邮件,并且能够输出主题,内容,日期甚至发件人的NAME(使用$ message-> from)但我可以'弄清楚如何获取发送邮件的人的电子邮件地址。该文档没有帮助,谷歌搜索找到了一百万个结果,如何使用Zend发送消息,但没有关于获取发送消息的地址。

3 个答案:

答案 0 :(得分:3)

编辑:

<德尔> 这就是我最终做到的方式。经过一番挖掘后,我在一个名为“返回路径”的字段中找到了发件人的电子邮件。不幸的是,这个字段名称中有一个破折号(WTF ??)所以要访问它,我必须这样做:     $ return_path ='return-path';     $ message-&gt; reply_to = $ zendMessage-&gt; $ return_path;


使用返回路径会导致某些电子邮件出现问题,特别是来自无回复帐户的邮件(mail-noreply @ gmail.com,member @ linkedin.com等)。这些地址最终会看起来像这样:

m-9xpfkzulthmad8z9lls0s6ehupvordjdcor30geppm12kbvyropj1zs5@bounce.linkedin.com

...显然无法在前端的“来自”字段中显示。 Apple Mail和Gmail等电子邮件客户端显示mail-noreply@gmail.com或member@linkedin.com,这也是我的目的。

无论如何,经过一些研究,我发现Zend Mail Message对象中的'from'字段看起来像这样:

"user account name" <user@email.com>

&lt;&lt; &GT;就是我所追求的,但只是从$ $ zend_message-&gt;来自$仅给了我用户的帐户名(因此我原来的问题)。经过更多的游戏,这就是我最终实现它的方式:

  $from   = $zendMessage->from;
  $start  = strpos($from, '<');
  $email  = substr($from, $start, -1);
  $result = str_replace('<', '', $email);

希望这会让某些人感到沮丧。如果有人知道更简单的方法,请告诉我。

答案 1 :(得分:2)

效果很好..

        $senderMailAddress = null;
        foreach ( $message->getHeader('from')->getAddressList() as $address ) {
            if ( $senderMailAddress === null) {

                $senderMailAddress = $address->getEmail();
            }
        }

答案 2 :(得分:1)

这里的主要问题是,许多电子邮件程序,中继代理和病毒扫描程序都会为实际上简单明了的电子邮件标准做有趣的事情。

Zend_Mail_Message扩展到Zend_Mail_Part,它有一个名为getHeaders()的方法。这将包含存储在头部与使用getContent()访问的正文的电子邮件中的所有数据以及实际的电子邮件消息。

使用此方法,您将获得标题中所有键/值对的数组,在开发过程中,您应该能够确定实际需要的标题字段。一旦您知道可以直接使用getHeader('field_name')或其实际名称获取实际字段。

但是,如果您有许多不同的电子邮件发件人,您可能希望坚持使用完整的标题数组,并评估多个字段以获得最佳结果,例如是否有“回复”地址。同样存在许多不确定因素,因为并不总是遵守标准。