2014-06-20 63 views
0

我正在使用ActionMailer,並且在測試中,我試圖驗證是否設置了正確的發件人地址。但是,當我使用發件人姓名的發件人地址時,我只會在致電#from時收到電子郵件地址,我需要檢查整件事情。我已經試過檢查#sender,但畢竟是零ActionMailer不從地址返回完整

例子:

msg1 = ActionMailer::Base::mail(:from => "sender name <[email protected]>").from 
=> ["[email protected]"] 

如果我to_s對象,它似乎使用完整的電子郵件,包括髮送者姓名:

msg1.to_s 
=> "Date: Fri, 20 Jun 2014 11:14:53 +0000\r\nFrom: sender name <[email protected]>\r\nMessage-ID: <XXXX>\r\nSubject: Mail\r\nMime-Version: 1.0\r\nContent-Type: text/plain;\r\n charset=UTF-8\r\nContent-Transfer-Encoding: 7bit\r\n\r\n" 

如何我確認發件人地址(包括髮件人名稱)是否設置正確?

+0

你可以在這種情況下使用正則表達式,檢查我的答案。 – shivam

回答

1

起初我用來作爲singhshivam描述的正則表達式。

但後一點研究一個同事建議你可以這樣做:

msg1.header[:from].to_s

我覺得這是一個更好的解決方案,因爲它允許我使用assert_equal而非assert_match這樣的意圖是清晰的。

1

我可能無法正確理解你的問題,但是如果我猜得不錯,你可以得到的相關信息如下:

msg1 = ActionMailer::Base::mail(:from => "sender name <[email protected]>") 

msg1.from 
=> ["[email protected]"] 

msg1.date 
=> Fri, 20 Jun 2014 18:58:38 +0530 

msg1.message_id 
=> "[email protected]" 

msg1.message_content_type 
=> "text/plain" 

msg1.main_type 
=> "text" 

msg1.subject 
=> "Mail" 

你也可以簡單地輸入msg1.和命中<tab>兩次。終端會詢問Display all 293 possibilities? (y or n)按y,您可以看到您可以從這個特定選項中提取的所有信息。

編輯

我想我明白這個問題現在好多了,並做了一些研究。您輸入發件人姓名的方式似乎無法直接檢索。但是,在這種情況下,我們可能會使用正則表達式。這裏的代碼,我知道它(非常)髒了,但它仍然工作:

pat = "(?<=From:)(.*)(?=<#{msg1.from.to_s})" 
/#{pat}/.match(msg1.inspect)[0].strip 
+0

你可以請驗證這@Ceri?謝謝 – shivam

+0

謝謝 - 最初我確實使用了正則表達式匹配,但是一位同事提出了一個更好的方法,最終使意圖更清晰。 – Ceri