14


1

MailDefinitionクラスで "CreateMailMessage"メソッドを呼び出してMailMessageオブジェクトを作成する場合、3番目のパラメータはSystem.Web.UI.Control型のオブジェクトです。

MailDefinition mail = new MailDefinition();

ListDictionaryの置き換え= new ListDictionary(); replacements.Add( "<%myname%>"、 "John");

mail.BodyFileName = "〜/ App_Data / Emails / SomeEmail.txt"; mail.From = "[email protected]"; mail.Subject = "こんにちは";

MailMessage message = mail.CreateMailMessage( "[email protected]、"、replacement、);

何故ですか? そのタイプのオブジェクトがない場合は、代わりに何を渡しますか? 新しいControlオブジェクトだけ?

コントロールコントロール= new Control();

更新

私は電子メールテンプレートを構築するために Razorを使用することを強くお勧めします。 それは素晴らしい構文を持ち、素晴らしい働きをし、そして奇妙な依存関係はありません!

5 Answer


5


通常、 `+ this +`をコントロールとして渡すだけです。

MailMessage message = mail.CreateMailMessage("[email protected],", replacements, this);

その理由については、http://msdn.microsoft.com/en-us/library/0002kwb2.aspx [ここにMSDNの記述がある]

_ ownerパラメーターは、MailDefinitionコントロールの親であるコントロールを示します。 BodyFileNameプロパティで指定されたテキストファイルを検索するディレクトリを決定します。 _


3


  • CreateMailMessage 関数は、指定された Control を内部的に使用して AppRelativeTemplateSourceDirectory プロパティおよび OpenFile メソッドを照会し、本文の内容を読み取ります( MailDefinition BodyFileName *プロパティで指定)。

私にとっては貧弱なデザインと不必要なタイトカップリングのようです。


2


またこれをすることができる:

MailMessage message = this.Mail.CreateMailMessage( "[email protected]"、辞書、new System.Web.UI.Control());


1


私のメッセージはワークフローから送信されているため、3番目のパラメーターに `+ new LiteralControl()+`を使用しています。 できます。 しかし、「なぜ」に対する答えはありません。


0


コントロールにバインドしていないのであれば、MailDefinitionクラスをまったく使用する必要はないかもしれません。 smtpを使って電子メールを送信するだけの場合は、System.Net.Mail.SmtpClientとSystem.Net.Mail.MailMessageを使用する必要があります。