2011-05-04 29 views
4

我想用MVCMailer用asp.net mvc 3和剃鬚刀發送郵件。也提到ScottHa用mvcmailer發送多封郵件

它看起來相當直接,但我很困惑,我會如何發送批處理電子郵件,例如像通訊到用戶列表。

我是否會創建一個循環?

public virtual MailMessage Welcome() 
{ 
    var mailMessage = new MailMessage{Subject = "Welcome to MvcMailer"}; 

    mailMessage.To.Add("[email protected]"); 
    ViewBag.Name = "Sohan"; 
    PopulateBody(mailMessage, viewName: "Welcome"); 

    return mailMessage; 
} 

有人能解釋一下嗎? 謝謝

回答

2

不幸的是,因爲每封電子郵件是個性化的,我不能看到比其他循環任何其他方式。因此,只需將您的方法更改爲:

public virtual MailMessage Welcome(string email, string name) 
{ 
    var mailMessage = new MailMessage{Subject = "Welcome to MvcMailer"}; 

    mailMessage.To.Add(email); 
    ViewBag.Name = name; 
    PopulateBody(mailMessage, viewName: "Welcome"); 

    return mailMessage; 
} 

然後在您的循環內調用該方法並同時發送它。

重要提示

,您應該設置你的web.config使用皮卡目錄,而不是一個SMTP服務器。然後讓IIS從拾取目錄發送電子郵件。

推理 - 因爲您可能會多次致電SmtpClient.Send(MailMessage mailmessage) - 如果您每次都必須連接到SMTP服務器以發送電子郵件,這可能會變得相當昂貴。

這樣做的一個好的副作用是,如果SMTP服務器因任何原因關閉或無法訪問,您也會獲得一些冗餘。

+0

我在一個共享服務器上,所以我想拾取目錄建議不會工作?在這種情況下,最好只是異步發送? – raklos 2011-05-05 14:43:40

+0

是的,好主意。這個視頻可以幫助你http://www.asp.net/general/videos/how-do-i-send-email-asynchronously-with-aspnet。爲了冗餘,您可以將電子郵件發送到數據庫,然後一旦發送,將它們標記爲發送到數據庫中。然後創建一些管理工具來嘗試重新發送所有未發送的電子郵件。 – Charlino 2011-05-05 16:36:55

1

如果您想爲每封電子郵件分配不同的內容,則需要使用循環創建個別的MailMessage對象。如果你想在相同的內容,那麼你可以添加多個收件人:

mailMessage.To.Add("[email protected]"); 
mailMessage.To.Add("[email protected]"); 
+0

如果我圍繞着一個循環,返回只會在一條消息後發生,但通過正確嗎? – raklos 2011-05-04 14:21:20

+0

循環需要超出方法。如果沒有調用此方法的代碼,很難說 - 我不知道電子郵件實際發送的位置。 – 2011-05-04 15:25:22