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:

MS Visual Studio

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":

 private void btnEnviar_Click(object sender, System.EventArgs e)
 {
     MailMessage eMail = new MailMessage();
     eMail.BodyFormat = MailFormat.Text;
     eMail.From = txtDe.Text;

     //Parâmetros que devem ser configurados caso queira utilizar autenticação no servidor SMTP
     eMail.Fields["http://schemas.microsoft.com/cdo/configuration/smtsperver"] = txtSMTPServer.Text;
     eMail.Fields["http://schemas.microsoft.com/cdo/configuration/smtpserverport"] = 25;
     eMail.Fields["http://schemas.microsoft.com/cdo/configuration/sendusing"] = 2;
     if (txtSMTPUser.Text != "" && txtSMTPPass.Text != "")
     {
         eMail.Fields["http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"] = 1;
         eMail.Fields["http://schemas.microsoft.com/cdo/configuration/sendusername"] = txtSMTPUser.Text;
         eMail.Fields["http://schemas.microsoft.com/cdo/configuration/sendpassword"] = txtSMTPPass.Text;
     }

     //Caso os o box de usuário ou senha estiver vazio, não utiliza a autenticação SMTP
     eMail.To = txtPara.Text;
     eMail.Body = txtMensagem.Text;
     SmtpMail.SmtpServer = txtSMTPServer.Text;
     SmtpMail.Send(eMail);
 }

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!