MailDefinition クラスに System.Web.UI.Control が必要なのはなぜですか?

StackOverflow https://stackoverflow.com/questions/744117

  •  09-09-2019
  •  | 
  •  

質問

MailDefinition クラスの "CreateMailMessage" メソッドを呼び出して MailMessage オブジェクトを作成する場合、3 番目のパラメーターは 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 control = new Control();

アップデート

使用することを強くお勧めします かみそり メールテンプレートを構築します。構文が素晴らしく、動作も素晴らしく、奇妙な依存関係がありません。

役に立ちましたか?

解決

通常は通過するだけです this コントロールとして。

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

その理由としては、 MSDN には次のように書かれています。

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

他のヒント

メールメッセージの作成 関数は指定されたものを内部で使用します コントロール それをクエリする AppRelativeTemplateSourceDirectory 財産とその ファイルを開く 本体の内容を読み取るメソッド ( 本文ファイル名 の財産 メール定義).

私にとっては貧弱な設計と不必要な密結合のように思えます。

次のようにすることもできます。

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

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

コントロールにバインドしていない場合は、MailDefinition クラスをまったく使用する必要がないように思えます。smtp 経由で単純に電子メールを送信するには、System.Net.Mail.MailMessage とともに System.Net.Mail.SmtpClient を使用する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top