MailDefinition クラスに System.Web.UI.Control が必要なのはなぜですか?
-
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 を使用する必要があります。