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!

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top