Enviando um e-mail através de .NET 1.1 utilizando SMTP com autenticação, sem componentes de terceiros
Republicando um tutorial que coloquei em um site meu antigo, que estava hospedado no GeoCities (Vá com Deus, GeoCities!) e que ainda pode ser útil para muita gente que ainda não fez a migração de .NET Framework:
Enviar e-mail utilizando a plataforma .NET 1.1 é muito simples, pois ele já vem com classes para tal, incluídos no namespace System.Web.Mail.
Muito útil, só que do jeito que vários sites por aí explicam, tem um pequeno detalhe: você precisa utilizar um servidor SMTP que não requeira autenticação. Sendo assim, é muito mais fácil utilizarmos um servidor de SMTP instalado na máquina que hospeda o site.
Mas... se eu quiser fazer um site que me permita enviar e-mail a partir dele, não quero utilizar os serviços de form mail e hospedar a página em um brinkster da vida? Claro que eles não vão me disponibilizar o servidor SMTP deles no plano gratuito, né? Além disso, os servidores SMTP de provedores como Yahoo não permitem enviar um e-mail sem que eu esteja autenticado em seus servidores.
Precisando resolver um problema na empresa em que eu trabalho, dei uma pesquisada na net sobre envio de e-mail com ASP.NET utilizando autenticação SMTP. A esmagadora maioria dos artigos em português ( ou até mesmo estrangeiros ) mostrava como fazer, porém utilizando componentes externos, e os que suportam autenticação eram pagos.
Resolvi pesquisar por sites gringos mesmo, eis que eu achei um código que resolveu o meu problema e passo para vocês agora!
Primeiramente, criei um projeto no Visual Studio 2003, utilizando a linguagem C# e coloquei os componentes conforme a imagem abaixo:
São vários textbox, indicando o remetente, destinatário, assunto, mensagem, botões de enviar e de limpar campos. Na tabela ao lado, há locais para colocar os dados do servidor SMTP a ser utilizado para o envio do e-mail. Também coloquei alguns "Required Validators" em alguns campos.
Agora vem a parte interessante!
Adicione o namespace System.Web.Mail em seu projeto e veja a seguir o código do botão "Enviar":
1: private void btnEnviar_Click(object sender, System.EventArgs e)
2: {
3: MailMessage eMail = new MailMessage();
4: eMail.BodyFormat = MailFormat.Text;
5: eMail.From = txtDe.Text;
6:
7: //Parâmetros que devem ser configurados caso queira utilizar autenticação no servidor SMTP
8: eMail.Fields["http://schemas.microsoft.com/cdo/configuration/smtsperver"] = txtSMTPServer.Text;
9: eMail.Fields["http://schemas.microsoft.com/cdo/configuration/smtpserverport"] = 25;
10: eMail.Fields["http://schemas.microsoft.com/cdo/configuration/sendusing"] = 2;
11: if (txtSMTPUser.Text != "" && txtSMTPPass.Text != "")
12: {
13: eMail.Fields["http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"] = 1;
14: eMail.Fields["http://schemas.microsoft.com/cdo/configuration/sendusername"] = txtSMTPUser.Text;
15: eMail.Fields["http://schemas.microsoft.com/cdo/configuration/sendpassword"] = txtSMTPPass.Text;
16: }
17:
18: //Caso os o box de usuário ou senha estiver vazio, não utiliza a autenticação SMTP
19: eMail.To = txtPara.Text;
20: eMail.Body = txtMensagem.Text;
21: SmtpMail.SmtpServer = txtSMTPServer.Text;
22: SmtpMail.Send(eMail);
23: }
Vamos analisar este código?
As partes em preto, já são velhas conhecidas nossas, e só com ela você poderá enviar o e-mail utilizando um servidor SMTP sem autenticação.
As partes em vermelho, configuram certos parâmetros do objeto eMail, através da propriedade Fields. Na primeira linha em vermelho, temos o endereço ( nome ou IP ) do servidor SMTP a ser utilizado, em seguida a porta.
Caso os textbox de usuário e senha da página estiverem preenchidos, eles configurarão mais parâmetros: a ativação da autenticação SMTP, o usuário e senha do servidor informado. Caso estivessem vazios, os parâmetros para a autenticação não seriam passados e o e-mail seria enviado pelo jeito "convencional".
Para uma maior segurança, você poderá configurar o servidor SMTP, usuário e senha no seu Web.config e recuperar estes parâmetros depois, ou até mesmo atribuí-los nos respectivos campos ( eles são do tipo string ).
Agora… o .NET Framework 2.0 ou acima oferece tudo o que foi explicado acima nativamente, através do namespace System.Net.Mail. Depois vamos ver como se faz da forma mais atualizada ;-)
Se tiverem curiosidade de ver o original, clique aqui (lembrando que em breve este site sairá do ar, e não recebe atualizações há muuuuito tempo hehe).
Um abraço!
3 comentários:
Eu descobri um e-mail fantástico na internet e gostaria de compartilhar com todos internautas no mundo.Um grande abraço a todos e um ótimo final de ano.
Olá, essa autenticação não funciona mais, pelo menos não utilizando o bde 2006. Troquei o servidor antigo (que não precisava de autenticação) por um novo e agora fiquei na mão. Estou utilizando o o servidor de e-mail do próprio iis, mas todas as mensagens ficam paradas na pasta queued.
@Anônimo:
Hum... Você tá usando o da Borland, né? Se sim, será que não tem as bibliotecas Indy? Me lembro que pelo menos no Delphi 7, tinha uma classe lá para enviar email, e que suporta autenticação.
E se tiver usando .NET e Framework 2.0 ou acima, recomendo usar a classe SmtpClient do namespace System.Net.Mail, que lá tem a propriedade Credentials, para criar uma credencial de rede (com usuário e senha).
Postar um comentário