0

ユーザーから特定のユーザー情報を収集し、確認を電子メールで送信する 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)
            {
            }

        }
4

1 に答える 1

0

HatSoft が指摘したように、ListDictionary はオブジェクトをキーと値として受け入れるため、これは機能するはずです。

ただし、ここで CreateMailMessage() メソッドのドキュメントを読むhttp://msdn.microsoft.com/en-us/library/0002kwb2.aspxは、値を文字列に変換する必要があることを示しています。そうしないと、ArgumentException がスローされます。

したがって、修正するには、ListDictionary に追加するすべての値が文字列に変換されていることを確認してください。

objVR.BookingDate.ToString()
于 2012-06-26T08:35:06.417 に答える