2011-08-21 115 views
4

有人知道需要在Play Framework項目的application.conf文件中應用smtp設置以發送本地主機上的電子郵件嗎?從本地主機發送電子郵件 - 播放框架

在我的單元測試,我得到的錯誤:

A play.exceptions.MailException has been caught, Cannot send email

在遊戲開發者已經取得發送電子郵件很容易,我可以搞亂唯一的辦法就是用我在配置文件中的設置。

我曾嘗試只用:

mail.smtp=mock 

,我試圖註釋掉上面的行,並使用:

mail.smtp.host=127.0.0.1 

無論是這兩種方法的工作。我明白這可能是一個很小的問題,但我從未真正處理過設置電子郵件 - 所以我很感激任何可以提供幫助的幫助。

如果是由於Play無法作爲SMTP服務器發送郵件而導致無法發送郵件,有什麼方法可以使用mail.smtp=mock'模擬發送'電子郵件並允許我的測試通過?

有用的鏈接

This is a link to the Play documentation for sending emails

+0

我認爲你需要在本地機器上安裝郵件服務器才能接受郵件。你可以使用'@ example.com',這樣你的郵件就不會去任何地方。 –

+0

@Jared Farrish - 感謝您的建議。我會考慮在本地機器上設置一個郵件服務器(這無疑會派上用場)......但我想看看是否有可能爲測試目的「模擬發送」電子郵件。 –

+0

如果我確實知道這是不可能的,我會發佈一個答案;這只是我認爲它不是。我的猜測是有一種方法可以打破你的電子郵件,或使用其他攔截方法。我也想知道,但這就是爲什麼它是一個評論,而不是一個答案。 :) –

回答

9

爲了更好地診斷問題,您可以使用下面的設置(在application.conf)給郵件發送過程的更多細節。

mail.debug=true 

但是,出於測試目的,我發現使用GMail最簡單的方法發送電子郵件。 配置(再次application.conf)是...

mail.smtp.host=smtp.gmail.com 
mail.smtp.user=yourGmailLogin 
mail.smtp.pass=yourGmailPassword 
mail.smtp.channel=ssl 

對於所有配置的全部細節,播放框架上有很多關於如何做到這一點。

http://www.playframework.org/documentation/1.2.2/emails

+0

+1謝謝 - 這是一個非常好的工作。我不認爲你知道'mail.smtp = mock'的目的?我認爲這可能是'模擬發送'電子郵件的一種方式。 –

+5

是。模擬只是將電子郵件輸出到控制檯,而不是發送到SMTP客戶端。除了在控制檯中讀取它之外,您不會看到輸出。因此,對於自動化測試目的來說,它沒有什麼幫助,但是對於開發目的而言,它顯示了您的電子郵件生成工作正常,而無需在Dev階段使用測試電子郵件淹沒您的電子郵件客戶端 – Codemwnci

+0

好吧,在這種情況下,我的代碼肯定是錯的。即使在使用Gmail時,我仍然會收到'無法發送電子郵件'錯誤。這可能只是一個疲倦的大腦錯誤,所以我明天會看看,也許會提出一個新的問題。感謝你的回答! –

1

我使用1.2.4。 (還沒有移植...)

play.mvc.Mailer.send()可能會失敗的原因有很多,但是如果您查看拋出的異常的第一級,真正的原因會被抑制被拋出是(play.mvc.Mailer.java:349):

throw new MailException("Cannot send email", ex); 

play.exceptions.MailException從繼承了java.lang.RuntimeException。真正的例外,ex,被確定爲原因。

我建議看看原因領域。例如:

try { 
    Future<Boolean> future = play.mvc.Mailer.send(...); 
} catch(MailException me) { 
    System.out.println(me.getCause().getMessage()); 
} 

這可能會打印出更有用的東西。