سؤال

عند إنشاء كائن MailMessage عن طريق استدعاء طريقة "CreateMailMessage" على فئة MailDeFinition، فإن المعلمة الثالثة هي كائن من النوع System.Web.UI.Control.

MailDefinition mail = new MailDefinition();

ListDictionary replacements = new ListDictionary();
replacements.Add("<%myname%>", "John");

mail.BodyFileName = "~/App_Data/Emails/SomeEmail.txt";
mail.From = "me@example.com";
mail.Subject = "Hello";

MailMessage message = mail.CreateMailMessage("example@example.com,", replacements, );

لماذا هذا؟
وفي الحالة التي ليس لدي كائن من هذا النوع، ما الذي يجب أن أبعزه بدلا من ذلك؟ مجرد كائن عنصر تحكم جديد؟

Control control = new Control();

تحديث

أود أن أوصي بشدة باستخدام موس الحلاقة لبناء قوالب البريد الإلكتروني. لديها بناء جملة كبيرة، يعمل بشكل رائع، وليس لديك أي تبعيات غريبة!

هل كانت مفيدة؟

المحلول

عادة ما تمر فقط this كما السيطرة.

MailMessage message = mail.CreateMailMessage("example@example.com,", replacements, this);

كما للسبب، هنا ما يقوله MSDN:

تشير معلمة المالك إلى عنصر التحكم هو الوالد من عنصر التحكم MailDeFinition. يحدد الدليل الذي للبحث عن الملف النصي المحدد في خاصية BodyFilename.

نصائح أخرى

ال CreateMailMessage. تستخدم الدالة داخليا المحدد مراقبة للاستعلام عن applelativetempleatesourcedirectory. الممتلكات و OpenFile. طريقة لقراءة محتويات الجسم (المحددة في bodyfilename. خاصية maildefinition.).

يبدو أن التصميم الفقراء واقتران ضيق غير ضروري بالنسبة لي.

يمكنك أيضا القيام بذلك فقط:

MailMessage message = this.Mail.CreateMailMessage("no-reply@example.com", dictionary, new System.Web.UI.Control());

لقد كنت استخدم new LiteralControl() للمعلمة الثالثة لأن رسائلي يتم إرسال رسائلي من سير العمل. إنها تعمل. لكن ليس لدي إجابة عن "لماذا".

يبدو أنك قد لا تحتاج إلى استخدام فئة MailDeFinition على الإطلاق إذا كنت لا ترتبط بأي عناصر تحكم. لإرسال بريد إلكتروني عبر البريد الإلكتروني عبر SMTP، يجب عليك استخدام System.net.mail.smtpclient مع system.net.mail.mailmessage.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top