Por que a classe MailDefinition exige um sistema.web.ui.control?
-
09-09-2019 - |
Pergunta
Ao criar um objeto MailMessage chamando o método "CreateMailMessage" na classe MailDefinition, o terceiro parâmetro é um objeto do tipo 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, );
Por que é que?
E no caso de não ter um objeto desse tipo, o que devo passar? Apenas um novo objeto de controle?
Control control = new Control();
ATUALIZAR
Eu recomendo usar Navalha Para construir modelos de e -mail. Tem ótima sintaxe, funciona muito bem e não tem dependências estranhas!
Solução
Normalmente você apenas passa this
como controle.
MailMessage message = mail.CreateMailMessage("example@example.com,", replacements, this);
Quanto ao motivo, Aqui está o que o MSDN diz:
O parâmetro do proprietário indica qual controle é o pai do controle do MailDefinition. Ele determina qual diretório procurar o arquivo de texto especificado na propriedade BodyFileName.
Outras dicas
o CreateMailMessage a função usa internamente o especificado Ao controle para consultar isso AprotelativeTemplatesRedirCirectory propriedade e sua Abrir arquivo método para ler o conteúdo do corpo (especificado no Bodyfilename propriedade do MailDefinition).
Parece um design ruim e um acoplamento apertado desnecessário para mim.
Você também pode fazer isso:
MailMessage message = this.Mail.CreateMailMessage("no-reply@example.com", dictionary, new System.Web.UI.Control());
Eu tenho usado new LiteralControl()
Para o terceiro parâmetro porque minhas mensagens estão sendo enviadas de um fluxo de trabalho. Funciona. Mas eu não tenho uma resposta para "Por que".
Parece que você pode não precisar usar a classe MailDefinition, se não estiver vinculado a nenhum controle. Para simplesmente enviar um email sobre o SMTP, você deve usar um system.net.mail.smtpclient com um system.net.mail.mailMessage.