segunda-feira, 8 de janeiro de 2007

Enviando Emails com C# de maneira simples

Enviando Emails com C#

A SmtpClient classe é usada para enviar email para um servidor SMTP para
entrega. As classes mostradas na tabela a seguir são usadas para construir mensagens
de email que podem ser enviadas usando SmtpClient.

Attachment Representa arquivo anexos. Essa classe permite-lhe anexar arquivos, fluxos, ou texto a uma mensagem de email.
MailAddress Representa o endereço de email do remetente e destinatários.
MailMessage Representa uma mensagem de email.

Para criar e enviar uma mensagem de email com o Microsoft SmtpClient, você deve especificar as seguintes informações:

  • O servidor host SMTP que você usar para enviar email. Do Host
    Consulte e Portproperties.
  • Credenciais para autenticação, se exigido pelo servidor SMTP. Consulte a Credentials
    propriedade.
  • O endereço de email do remetente. Do Send Consulte e SendAsync métodos que se um from parâmetro.
    Também consulte a propriedade MailMessage.From.
  • O endereço de email ou endereços de destinatários. Do Send Consulte e SendAsync métodos que se um recipient parâmetro. Também consulte a MailMessage.To
    propriedade.
  • O conteúdo da mensagem. Do Send Consulte e SendAsync métodos que se
    um body parâmetro. Também consulte a propriedade MailMessage.Body.


Para incluir um anexo com uma mensagem de email primeiro criar o anexo usando a Attachment classe, e depois adicioná-la para a mensagem usando a MailMessage.Attachments
propriedade. Dependendo do leitor de email usado pelos destinatários e o tipo de arquivo de anexo, alguns destinatários não possam ler o anexo. Para clientes que não podem exibir o anexo no seu formato original, você pode especificar exibições alternativas, utilizando a MailMessage.AlternateViews propriedade.

Você pode usar o aplicativo ou computador arquivos de configuração para especificar host padrão, porta, e valores credenciais para todos os SmtpClient objetos Para obter mais informações, consulte mailSettings elemento (configurações de rede).

Para enviar a mensagem de email e bloco enquanto aguarda o email para serem transmitidos
para o servidor SMTP, utilize um dos métodos síncronos Send. Para permitir segmento principal do seu programa para continuar executando enquanto o email é transmitido, use um dos métodos assíncronos SendAsync. O SendCompleted evento será gerado quando conclui uma SendAsync operação. Para receber nesse caso, você deve adicionar um SendCompletedEventHandler representante para SendCompleted. O SendCompletedEventHandler representante deve fazer referência um método de retorno de chamada que trata notificação de SendCompleted eventos. Para cancelar uma transmissão de email assíncrona, use o SendAsyncCancel método.

SMTP está definido no RFC 2821, que está disponível em http://www.ietf.org/.
O exemplo de código a seguir demonstra enviar uma mensagem de email de forma assíncrona.




using System;
using System.Net;
using System.Net.Mail;
using System.Net.Mime;
using System.Threading;
using System.ComponentModel;
namespace Examples.SmptExamples.Async
{
public class SimpleAsynchronousExample
{
static bool mailSent = false;
public static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
{
// Get the unique identifier for this asynchronous operation.
String token = (string) e.UserState;

if (e.Cancelled)
{
Console.WriteLine("[{0}] Send canceled.", token);
}
if (e.Error != null)
{
Console.WriteLine("[{0}] {1}", token, e.Error.ToString());
} else
{
Console.WriteLine("Message sent.");
}
mailSent = true;
}
public static void Main(string[] args)
{
// Command line argument must the the SMTP host.
SmtpClient client = new SmtpClient(args[0]);
// Specify the e-mail sender.
// Create a mailing address that includes a UTF8 character
// in the display name.
MailAddress from = new MailAddress("jane@contoso.com",
"Jane " + (char)0xD8+ " Clayton",
System.Text.Encoding.UTF8);
// Set destinations for the e-mail message.
MailAddress to = new MailAddress("ben@contoso.com");
// Specify the message content.
MailMessage message = new MailMessage(from, to);
message.Body = "This is a test e-mail message sent by an application. ";
// Include some non-ASCII characters in body and subject.
string someArrows = new string(new char[] {'\u2190', '\u2191', '\u2192', '\u2193'});
message.Body += Environment.NewLine + someArrows;
message.BodyEncoding = System.Text.Encoding.UTF8;
message.Subject = "test message 1" + someArrows;
message.SubjectEncoding = System.Text.Encoding.UTF8;
// Set the method that is called back when the send operation
ends.

client.SendCompleted += new
SendCompletedEventHandler(SendCompletedCallback);
// The userState can be any object that allows your callback

// method to identify this send operation.
// For this example, the userToken is a string constant.
string userState = "test message1";
client.SendAsync(message, userState);
Console.WriteLine("Sending message... press c to cancel mail. Press any other key to exit.");
string answer = Console.ReadLine();
// If the user canceled the send, and mail hasn't been sent
yet,

// then cancel the pending operation.
if (answer.StartsWith("c") && mailSent == false)
{
client.SendAsyncCancel();
}
// Clean up.
message.Dispose();
Console.WriteLine("Goodbye.");
}
}
}

3 comentários:

Anônimo disse...

Copiado do MSDN na cara-de-pau.

Rodrigo Santos disse...

Muito Obrigado pelas informações, muito válidas! Parabéns pela iniciativa! Abraço.

Anônimo disse...

Pior que é.. copiado na cara dura.

Neobux