当创建通过调用MailDefinition类“CreateMailMessage”方法的对象MAILMESSAGE,第三个参数是类型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 函数在内部使用指定的控制以查询其的 AppRelativeTemplateSourceDirectory 属性和它的的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