2012-08-03 201 views
4

我正在使用Zend_Mail_Message類來顯示我的PHP應用程序內的電子郵件,並且能夠輸出發件人的主題,內容,日期甚至名稱(使用$ message-> from),但我無法確定瞭解如何獲取發送消息的人的電子郵件地址。這些文檔沒有任何幫助,谷歌搜索發現了100萬條關於如何使用Zend發送消息的結果,但沒有獲得發送消息的地址。如何從Zend_Mail_Message獲取發件人的電子郵件地址?

+0

我沒有使用組件,但看看代碼'$ message-> from'返回'From'標題,我希望包含發件人地址以及名稱? – 2012-08-03 17:15:42

+1

var_dump該對象並查找它,然後找出如何訪問它。 – 2012-08-03 17:16:24

+0

就像我說的,$ message-> from只返回發件人的名字...我正在尋找他們的電子郵件地址... – 2012-08-03 17:19:21

回答

3

編輯:

這是我怎麼會做這件事。經過一些挖掘,我發現發件人的電子郵件在一個名爲「返回路徑」的字段中。不幸的是,這個字段有一個破折號(WTF ??),所以要訪問它,我必須這樣做: $ return_path ='return-path'; $ message-> reply_to = $ zendMessage - > $ return_path;


使用返回路徑導致的一些問題,一些郵件,從沒有回覆賬戶([email protected][email protected]等)具體信息。這些地址最終會看起來像這樣:

[email protected]e.linkedin.com

...這顯然不顯示工作「從」字段的前端。像Apple Mail和Gmail這樣的電子郵件客戶端顯示[email protected][email protected],所以這也是我的目標。

不管怎麼說,經過一些調查研究,我發現,「從」在一個Zend郵件對象場總是看起來是這樣的:

"user account name" <[email protected]>

在<的部分>是什麼我是後,但只是做$ from = $ zend_message->只給了我用戶的帳戶名(因此我的原始問題)。經過一番更多的玩耍,這是我終於得到它的工作方式:

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

希望這可以節省一些人一些挫折。如果有人知道更簡單的方法,請告訴我。

1

這裏的主要問題是,很多電子郵件程序,中繼代理和病毒掃描沿途做有趣的東西,以實際簡單和明確的電子郵件標準。

Zend_Mail_Message延伸到Zend_Mail_Part具有稱爲getHeaders()方法。這將從電子郵件中存儲的所有數據與使用getContent()和實際電子郵件訪問的正文進行訪問。

使用這種方法,你會得到在頭的所有鍵/值對的數組,並同時開發,你應該能夠確定哪頭字段,你會真正想要的。一旦你知道你可以用getHeader('field_name')或直接得到實際名稱來獲得實際字段。

但是,如果你有許多不同的電子郵件發件人你可能想,雖然與完整的頭陣堅持和評估多個領域的最好的結果一樣,如果有一個「回覆」地址。再次,有很多不確定因素,因爲標準並不總是被遵守。

2

This works well .. ..

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

       $senderMailAddress = $address->getEmail(); 
      } 
     } 
相關問題