Envio de e-mail utilizando C#


Abaixo, um exemplo em C# (.NET) de envio de e-mail:

1- Código

System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage();
 
mailMessage.From = new System.Net.Mail.MailAddress("remetente@email.com");
mailMessage.To.Add(new System.Net.Mail.MailAddress("destinatario@email.com"));

//Cópia:
//mailMessage.CC.Add(new System.Net.Mail.MailAddress("copia@email.com"));
 
//Cópia oculta:
//mailMessage.Bcc.Add(new System.Net.Mail.MailAddress("copia.oculta@email.com"));

mailMessage.Subject = "Título do e-mail";
mailMessage.Body = "Olá, esse é o conteúdo do e-mail";
mailMessage.IsBodyHtml = false;
 
using (var smtp = new System.Net.Mail.SmtpClient())
{
	smtp.Host = "smtp.gmail.com";
	smtp.Port = 587;
	smtp.EnableSsl = true;
	smtp.Credentials = new System.Net.NetworkCredential("remetente@email.com", "senha");
	 
	//Exemplo de anexo de texto:
	//mailMessage.Attachments.Add(new System.Net.Mail.Attachment(
	//   new MemoryStream(Encoding.UTF8.GetBytes("conteudo do arquivo")),
	//   "anexo.txt", System.Net.Mime.MediaTypeNames.Text.Plain));
	 
	smtp.Send(mailMessage);
}

2-Exemplo

Baixe o exemplo do GitHub: https://github.com/educoutinho/SendEmailSample

3- Erro “The SMTP server requires a secure connection or the client was not authenticated”

Se você receber o seguinte erro:

System.Net.Mail.SmtpException was unhandled by user code
HResult=-2146233088
Message=The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required. Learn more at
Source=System
StackTrace:
at System.Net.Mail.MailCommand.CheckResponse(SmtpStatusCode statusCode, String response)
at System.Net.Mail.MailCommand.Send(SmtpConnection conn, Byte[] command, MailAddress from, Boolean allowUnicode)
at System.Net.Mail.SmtpTransport.SendMail(MailAddress sender, MailAddressCollection recipients, String deliveryNotify, Boolean allowUnicode, SmtpFailedRecipientException& exception)
at System.Net.Mail.SmtpClient.Send(MailMessage message)

Tente o seguinte:

  1. Verifique se as configurações estão corretas (servidor, porta, usuário, senha, usar SSL)
  2. Se estiver usando Gmail, por padrão eles desabilitaram o envio de e-mail por aplicativos externos, que são considerados menos seguros. Você precisará habilitar esse tipo de envio novamente. Para mais detalhes consulte: https://support.google.com/accounts/answer/6010255. Se não estiver usando Gmail, verifique se o seu provedor não tomou ação semelhante.

4- Envio de e-mail usando C# e o servido da Amazon SES

É possível enviar e-mail pelo Amazon SES sem precisar utilizar a API da Amazon, diretamente pelo SMTP.

4.1 - Verificar o domínio

Para habilitar o envio de e-mail pelo SES, faça o seguinte:

  1. Acesse a área do serviço SES no painel da Amazon
  2. Escolha a região que vai utilizar, por exemplo : us-west-2
  3. Acesse o menu “Domains” e clique na opção “Verify a new Domain”, informe o domínio que utilizará para envio, ex: “empresa.com.br”

4.2 - Usuário

Para enviar e-mail pelo SES você precisará criar um usuário novo na Amazon, faço o seguinte:

  1. Acesse a área IAM no painel da Amazon
  2. Vá em “Users” e clique em “Add user”
  3. Informe um nome para o usuário, ex: “smtp_user” e marque a opção “[x] Programmatic access”
  4. Adicione a seguinte Policy:
{
	"Statement": [
		{
			"Effect": "Allow",
			"Action": "ses:SendRawEmail",
			"Resource": "*"
		}
	]
}
  1. Copie o “AccessKey” e o “SecretKey”, eles serão o usuário e senha para realizar o envio

4.3 - Tirar SES do modo sandbox

Por padrão o SES fica em modo “sandbox”, para ser possivel enviar e-mail para contas externas de e-mail, faça o seguinte:

  1. Acesse a área de suporta da Amazon: https://console.aws.amazon.com/support
  2. Abra uma solicitação de suporte: (Create Case / Service Limit Increase / SES Sending Limits)

Para mais informações, consulte: http://docs.aws.amazon.com/ses/latest/DeveloperGuide/request-production-access.html

4.4 - Configurações para envio

Na área de configuração do SES no menu “SMTP Settings” são exibidas os dados para envio de e-mail utilizando SES Exemplo:

Utilize essas configurações no código C# acima para envio de e-mail e pronto.


Comentários