2012-06-26 101 views
0

我正在從web表單收集用戶的某些用戶信息並通過電子郵件發送確認。我正在嘗試使用以下方法發送HTML電子郵件,因爲它可以輕鬆管理基於HTML的電子郵件。基於HTML的電子郵件在asp.net web表單中無法正常工作

https://gist.github.com/1668751

我做的代碼必要的修改,但它無法正常工作。我讀了其他相關文章,使其工作,但我做錯了什麼。

下面的代碼行生成錯誤The replacements dictionary must contain only strings.

MailMessage msgHtml = mailDef.CreateMailMessage(to, replacements, MessageBody, new System.Web.UI.Control());

我已經做了很多改變的代碼,但它似乎爲我工作。我將不勝感激幫助使此代碼工作。

如果我評論上述代碼行與其他一些更改,然後我可以發送電子郵件,但我不能代替令牌。任何簡單的方法來取代令牌也是受歡迎的。

下面是完整代碼我使用現在

String to, subject, Name; 
subject = "Booking Confirmation"; 
Name = txtName.text; 


ListDictionary replacements = new ListDictionary(); 
replacements.Add("<%Name%>", Name); 
replacements.Add("<%Email%>", objVR.Email); 
replacements.Add("<%CompanyName%>", objVR.CompanyName); 
replacements.Add("<%BookingDate%>", objVR.BookingDate); 
replacements.Add("<%BookingTime%>", objVR.TimeSlot); 
replacements.Add("<%NoOfVisitors%>", objVR.NoOfVisitors); 
replacements.Add("<%BookingCode%>", objVR.BookingUniqueID); 


MailDefinition mailDef = new MailDefinition(); 

string MessageBody = String.Empty; 
string filePath = System.Web.HttpContext.Current.Request.PhysicalApplicationPath; 

using (StreamReader sr = new StreamReader(filePath + @"\en\VREmailEnglish.htm")) 
{ 
    MessageBody = sr.ReadToEnd(); 
} 

MailMessage msgHtml = mailDef.CreateMailMessage(to, replacements, MessageBody, new System.Web.UI.Control()); 

字符串消息= msgHtml.Body.ToString();

Helper.SendTokenEmail(to, subject, msgHtml, isHtml); 




public static void SendTokenEmail(string to, string subject, string mailMessage, bool isHtml) 
     { 
      try 
      { 
       // Create a new message 
       var mail = new MailMessage(); 

       // Set the to and from addresses. 
       mail.From = new MailAddress("[email protected]"); 
       mail.To.Add(new MailAddress(to)); 

       // Define the message 
       mail.Subject = subject; 
       mail.IsBodyHtml = isHtml; 
       mail.Body = mailMessage.ToString(); 
       //Object userState = mailMessage; 

       // Create a new Smpt Client using Google's servers 
       var mailclient = new SmtpClient(); 
       mailclient.Host = "mail.XYZ.net"; 
       //mailclient.Port = 587; //ForGmail 
       mailclient.Port = 2525; 

       mailclient.EnableSsl = false; 
       mailclient.UseDefaultCredentials = true; 

       // Specify your authentication details 

       mailclient.Credentials = new System.Net.NetworkCredential("[email protected]", "XYZPassword"); 

       mailclient.Send(mail); 
       mailclient.Dispose(); 
      } 
      catch (Exception ex) 
      { 
      } 

     } 
+1

錯誤消息是相當明顯的 - 要添加類型的替代字典是不是字符串。我的猜測會是objVR.BookingDate,這是什麼類型?你可能需要做objVR.BookingDate.ToString() –

+0

這是一個日期類型..讓我試試看。 – Learning

+0

但ListDictionary.Add方法將對象鍵和對象值作爲參數,所以沒有看到objVr.BookingDate作爲問題 – HatSoft

回答

0

正如HatSoft指出的那樣,ListDictionary接受對象作爲鍵和值,所以這看起來應該起作用。

但是,在這裏讀取CreateMailMessage()方法的文檔http://msdn.microsoft.com/en-us/library/0002kwb2.aspx指示您需要將該值轉換爲字符串,否則將引發ArgumentException。

所以修復確保您添加到ListDictionary所有值轉換成字符串即

objVR.BookingDate.ToString() 
相關問題