簡體   English   中英

基於HTML的電子郵件無法在asp.net網絡表單中正常工作

[英]HTML based email not working properly in asp.net web form

我正在使用Web表單,該表單從用戶那里收集某些用戶信息並通過電子郵件發送確認。 我正在嘗試使用以下方法發送HTML電子郵件,因為它使基於HTML的電子郵件的管理變得容易。

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("noreply@somedomain.net");
                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("noreply@somedomain.net", "XYZPassword");

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

        }

正如HatSoft指出的,ListDictionary接受對象作為鍵和值,因此看起來應該可以工作。

但是在此處http://msdn.microsoft.com/zh-cn/library/0002kwb2.aspx上閱讀CreateMailMessage()方法的文檔表示,您需要將值轉換為字符串,否則它將引發ArgumentException。

因此,要解決問題,請確保將添加到ListDictionary的所有值都轉換為字符串,即

objVR.BookingDate.ToString()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM