2011-08-20 35 views
1

我送下面這個模式的郵件:從郵件中的用戶名設置?

public static bool SendPasswordMail(MembershipUser user, Control owner, string password) 
{ 
    var definition = new MailDefinition { BodyFileName = string.Concat(AccountRoot, "password.htm"), IsBodyHtml = true }; 
    var subject = "Your new password - {0}".FormatWith(ApplicationConfiguration.ApplicationName); 

    var data = ExtendedData(DefaultData, subject, user); 

    data.Add("<%Password%>", password); 

    return definition.CreateMailMessage(user.Email, data, owner).Send(subject); 
} 

public static bool Send(this MailMessage message, string subject) 
{ 
    try 
    { 
     using (message) 
     { 
      message.Subject = subject; 

      using (var client = new SmtpClient()) 
      client.Send(message); 
     } 
    } 
    catch 
    { 
     return false; 
    } 

    return true; 
} 

,而不是設置受「新密碼 - 網站」,我想從用戶名設置爲「網站」,並受到公正「你的新密碼」。但我不知道如何設置從用戶名。

我在web.configsmtp元素看起來是這樣的:

<smtp deliveryMethod="Network" from="[email protected]"> 
    <network host="localhost" port="25" userName="[email protected]" password="******" /> 
</smtp> 
+1

無論如何,不​​要返回true/false,而是使用void並在需要時拋出異常 – abatishchev

+1

您不想通過郵件發送密碼。這不是必要的和安全風險! – ccellar

回答

4

採取MSDN上看起來的MailDefinition.CreateMailMessage Method定義。

它指定第二個參數(一個IDictionary對象,示例代碼中的變量「data」)應該包含在電子郵件中被替換的字符串。

使用這個對象,你可以對從地址添加更換,像這樣:由於使用SMTP幾乎所有的郵件交換僞造發件人地址的能力

data.Add("<%From%>", "[email protected]"); 

但是會使用電子郵件驗證系統,如Sender Policy Framework (SPF)以確保收到的電子郵件已從有效來源發送。

因此,如果您希望收件人收到您的電子郵件,則不能在發件人字段中使用任何電子郵件地址。您必須使用與您發送的域匹配的電子郵件地址。 DNS更改也需要進行必要的檢查。

結帳此鏈接:An Overview of the Sender Policy Framework

它指出:

SPF是很容易理解。 「互聯網」使用DNS(域名 系統)將域名(作爲示例www.msexchange.org) 解析爲IP地址。 DNS也用於指導不同 服務(如電子郵件和Web服務器)的請求。對於圍繞 世界的每個域,MX(郵件交換器)記錄必須存在。 MX記錄告訴 電子郵件發件人接收郵件的目標服務器位於何處。

SPF正在DNS中發佈「反向MX」記錄,該記錄告訴郵件發件人哪些機器從域發送郵件 。

電子郵件的收件人現在可以檢查這些記錄,以確保 電子郵件來自此域中的「可信」發件人。

這些「反向MX」記錄可以在DNS中輕鬆發佈。需要 DNS中只有一行滿足所有要求。本文後面我會給你一個 的例子。

SPF工作在SMTP事務的水平,並在 最多三條信息要求:

的MAIL FROM:郵件接收的參數所使用的HELO或EHLO 參數發送SMTP服務器(對梅勒 - 守護進程反彈 其發送空白MAIL FROM)發送SMTP服務器


編輯的IP地址

沒有辦法將發件人別名(顯示名稱)傳遞給創建時的MailDefinition,並且我不確定如何將數據添加到IDictionary對象,但以下內容應該可用(在發送擴展方法中):

message.Subject = subject; 
message.From = new MailAddress(message.From.Address, "Display Name"); 

希望這會有所幫助。

+0

我不想更改郵件地址,我只是想命名它。對於isntance郵件是[email protected],名稱是「No Replies」 – bevacqua

+0

好的,所以你想改變發件人別名? – jdavies

+0

是的,「顯示名稱」我不知道這個確切的實際術語。 – bevacqua

0

改變你SendPasswordMail本應該做的:

public static bool SendPasswordMail(MembershipUser user, Control owner, string password) 
{ 
    var definition = new MailDefinition { BodyFileName = string.Concat(AccountRoot, "password.htm"), IsBodyHtml = true }; 
    var subject = "Your new password"; 

    var data = ExtendedData(DefaultData, subject, ApplicationConfiguration.ApplicationName); 

    data.Add("<%Password%>", password); 

    return definition.CreateMailMessage(user.Email, data, owner).Send(subject); 
} 
+0

呃......這不會改變'從'的名稱從**沒有回覆**到**網站** – bevacqua

相關問題