Criar Mensagens de Email com Opções Personalizadas em C#

Criar Nova Mensagem de Email

Para criar uma nova mensagem de email você pode usar MailMessage classe. A classe MailMessage também inicializa propriedades da mensagem de email criada, como o endereço de email do remetente, os endereços de email dos destinatários, o assunto do email e o conteúdo do corpo do email em formato HTML.

Considere o código a seguir, com etapas detalhadas, para criar uma nova mensagem de email e definir suas propriedades.

  1. Crie uma nova instância da MailMessage classe.
  2. Defina o From propriedade para o endereço de email do remetente.
  3. Defina o Para propriedade para uma lista separada por vírgulas de endereços de email dos destinatários.
  4. Defina o Subject propriedade para o assunto do email.
  5. Defina o HtmlBody propriedade para o conteúdo HTML do corpo do email.
// Create a new instance of MailMessage class
var message = new MailMessage
{
    From = "from@domain.com",
    To = "to1@domain.com, to2@domain.com",
    Subject = "New message",
    HtmlBody = @"<!DOCTYPE html>
    <html>
     <head>
      <style>
       h3{font-family:Verdana, sans-serif;color:#000000;background-color:#ffffff;}
       p {font-family:Verdana, sans-serif;font-size:14px;font-style:normal;
         font-weight:normal;color:#000000;background-color:#ffffff;}
      </style>
     </head>
     <body>
       <h3>New message</h3>
       <p>This is a new message created by Aspose.Email.</p>
     </body>
    </html>"
};

Definir Codificação de Texto Padrão

Defina a codificação de texto padrão para as seguintes propriedades:

  • De: Nome de exibição
  • Para: Nome de exibição
  • Subject
  • Corpo

Use o MailMessage.PreferredTextEncoding propriedade para garantir que todo o texto nas propriedades acima seja codificado corretamente na mensagem de email. O trecho de código a seguir mostra como usar uma palavra francesa como nome de exibição para endereços de email, assunto e corpo.

Definir Corpo do Email

Definir Corpo em Texto Simples

Um corpo de e‑mail pode ser especificado usando o Corpo propriedade do MailMessage classe.

// Declare message as MailMessage instance
var eml = new MailMessage
{
    // Specify HtmlBody
    Body = "This is a plain text body"
};

Definir Corpo HTML

O corpo do e‑mail também pode ser especificado usando HtmlBody propriedade do MailMessage classe.

// Declare message as MailMessage instance
var eml = new MailMessage
{
    // Specify HtmlBody
    HtmlBody = "<html><body>This is the HTML body</body></html>"
};

Definir Texto Alternativo

Uma visualização alternativa em um arquivo EML é uma representação adicional do conteúdo do e‑mail que pode ser usada para fornecer uma renderização diferente da mensagem. Por exemplo, se você enviar uma mensagem em HTML, pode também querer fornecer uma versão em texto simples caso alguns destinatários usem leitores de e‑mail que não conseguem exibir conteúdo HTML. Para esse fim use o AlternateView classe. Esta classe possui duas propriedades, LinkedResources e BaseUri, que são usados para resolver URLs dentro do conteúdo do email.

  • LinkedResources é uma coleção de LinkedResource objetos. Quando renderizado, URLs dentro do conteúdo do e‑mail são primeiro comparadas com as URLs no Content Link de cada LinkedResource objeto na LinkedResources coleção e resolvido.
  • BaseUri é usado pelo leitor de e‑mail para resolver URLs relativas dentro do corpo, e também para resolver URLs de Content Link relativas, no LinkedResources coleção.

Considere o código a seguir com etapas detalhadas para definir um texto alternativo.

  1. Crie uma instância de MailMessage classe.
  2. Criar AlternateView para visualizar uma mensagem de e‑mail usando o conteúdo especificado na string.
  3. Adicionar texto alternativo usando Adicionar método de MailMessage.AlternateViews coleção.
// Declare message as MailMessage instance
var eml = new MailMessage();

// Creates AlternateView to view an email message using the content specified in the //string
var alternate = AlternateView.CreateAlternateViewFromString("Alternate Text");

// Adding alternate text
 eml.AlternateViews.Add(alternate);

Especificar Codificação do Corpo do E‑mail

Aspose.Email usa o BodyEncoding propriedade do MailMessage classe para especificar a codificação do corpo do e‑mail. Por exemplo:

eml.BodyEncoding = Encoding.UTF8;

Especificar Vários Destinatários

Existem três maneiras de especificar destinatários de uma mensagem de e‑mail: usando os campos To, CC ou BCC.

  • O campo To é o principal destinatário da sua mensagem. Você pode inserir um ou mais endereços de e‑mail nesse campo, separados por vírgulas. O campo To é obrigatório em toda mensagem de e‑mail.

  • O campo CC significa carbon copy. É usado para enviar uma cópia da sua mensagem a outras pessoas que estejam interessadas ou envolvidas no assunto. O campo CC é opcional e também pode conter múltiplos endereços de e‑mail. Os destinatários no campo CC podem ver quem mais recebeu a mensagem.

  • O campo BCC significa blind carbon copy. É semelhante ao campo CC, mas os destinatários no campo BCC ficam ocultos dos demais destinatários. O campo BCC é útil quando se deseja proteger a privacidade de alguns destinatários ou evitar que a caixa de entrada deles fique cheia de respostas. O campo BCC também é opcional e pode conter múltiplos endereços de e‑mail.

Considere o código a seguir, com etapas detalhadas, para especificar múltiplos destinatários de uma mensagem de e‑mail.

Etapas de código:

  1. Crie uma nova instância da MailMessage classe.
  2. Defina o From propriedade para o endereço de email do remetente.
  3. Defina o Para propriedade para um array de endereços de e‑mail dos destinatários principais.
  4. Defina o CC propriedade para um array de endereços de e‑mail dos destinatários que receberão uma cópia do e‑mail.
  5. Defina o Bcc propriedade para um array de endereços de e‑mail dos destinatários que receberão uma cópia oculta (blind carbon copy) do e‑mail.

Exemplo de código:

var eml = new MailMessage
{
    // Specify From address
    From = "sender@sender.com",
    //  Specify recipients’ mail addresses
    To = {"receiver1@receiver.com", "receiver2@receiver.com", "receiver3@receiver.com"},
    // Specify CC addresses
    CC = {"CC1@receiver.com", "CC2@receiver.com"},
    // Specify BCC addresses
    Bcc = {"Bcc1@receiver.com", "Bcc2@receiver.com"}
};

Adicionar Nomes de Exibição a Endereços de E‑mail

Juntamente com um endereço de e‑mail, um nome de exibição pode ser incluído para identificar o remetente ou destinatário do e‑mail. Pode incluir o nome completo da pessoa, apelido ou outro identificador.

Quando uma mensagem de e‑mail é exibida em um cliente de e‑mail ou interface webmail, o nome de exibição geralmente é mostrado ao lado do endereço de e‑mail, facilitando ao usuário identificar de quem é a mensagem ou a quem se destina. Para adicionar nomes de exibição aos endereços de e‑mail em uma mensagem, considere o seguinte código com etapas detalhadas:

  1. Carregue a mensagem de e‑mail a partir de um arquivo usando MailMessage.Load método.
  2. Defina o remetente do e‑mail usando o From propriedade do objeto eml criando um novo MailAddress objeto com o endereço de e‑mail e um nome de exibição do remetente.
  3. Adicione um destinatário ao e‑mail usando o To propriedade do objeto eml, se necessário adicione a lista CC (Carbon Copy) usando o CC propriedade, lista BCC (Blind Carbon Copy) usando o Bcc propriedade e chame o Add método com um novo MailAddress objeto que contém o endereço de e‑mail e um nome de exibição do destinatário.

Exemplo de código:

// Load eml from file
var eml = MailMessage.Load(Data.Email/"test.eml");

eml.From = new MailAddress("TimothyFairfield@from.com", "Timothy Fairfield");

// A To address with a friendly name can also be specified like this
eml.To.Add(new MailAddress("kyle@to.com", "Kyle Huang"));

// Specify Cc and Bcc email address along with a friendly name
eml.CC.Add(new MailAddress("guangzhou@cc.com", "Guangzhou Team"));
eml.Bcc.Add(new MailAddress("ahaq@bcc.com", "Ammad ulHaq "));

Definir Propriedades Adicionais

Com Aspose.Email você pode usar propriedades adicionais do MailMessage classe como:

  • Date propriedade - define data e hora de um e‑mail. Por padrão, a data é a data real em que a mensagem foi enviada, e a hora é a hora em que foi enviada, conforme exibido pelo Microsoft Outlook. Contudo, o horário real de entrega do e‑mail é adicionado pelo próprio servidor SMTP no cabeçalho da mensagem. Por exemplo, abaixo está um cabeçalho de e‑mail comum, onde Date define o campo Date.

    // For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
    
    // Add by SMTP server in delivery emails
    Received: from ip-123.56.99.216.dsl-cust.ca.inter.net ([216.99.56.123]) by Aspose.secureserver.net with MailEnable ESMTP; Thu, 22 Feb 2007 13:58:57 -0700
    
    // Add by SMTP server in delivery emails
    Return-Path: <xyz@oikoscucine.it>
    
    // Add by SMTP server in delivery emails
    Received: from 195.120.225.20 (HELO mail.oikoscucine.it)
    by aspose.com with esmtp (:1CYY+<LA*- *1WK@)
    id Q8,/O/-.N83@7-9M
    for abc@aspose.com; Thu, 22 Feb 2007 20:58:51 +0300
    From: "XYZ" <xyz@oikoscucine.it>
    To: <abc@aspose.com>
    Subject: For ABC
    
    // Date will set the Date field, outlook will show this as
    Date: Thu, 22 Feb 2007 20:58:51 +0300
    Message-ID: <01c756c4$41b554d0$6c822ecf@dishonestyinsufferably>
    MIME-Version: 1.0
    Content-Type: multipart/alternative;
    boundary="----=_NextPart_000_0006_01C7569A.58DF4CD0"
    X-Mailer: Microsoft Office Outlook, Build 11.0.5510
    X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106
    Thread-Index: Aca6Q:=ES0M(9-=(<.<1.<Q9@QE6CD==
    X-Read: 1
    
  • MailPriority enumeração - especifica níveis de prioridade para o envio de uma mensagem de e‑mail. Pode ser baixa, normal ou alta. A prioridade influencia a velocidade de transmissão e a entrega.

  • MailSensitivity enumeração - especifica cinco níveis de sensibilidade.

  • XMailer- especifica o software que criou a mensagem de e‑mail.

O trecho de código abaixo ilustra como cada uma das propriedades discutidas acima pode ser usada.

var eml = new MailMessage("sender@gmail.com", "receiver@gmail.com", "Some subject", "Some body text")
{
    Date = DateTime.Now,
    Priority = MailPriority.High,
    Sensitivity = MailSensitivity.Normal,
    Xmailer = "Aspose.Email"
};

Solicitar Recibo de Leitura

Para solicitar um recibo de leitura, use Aspose.Email DeliveryNotificationOptions propriedade do MailMessage classe. Esta propriedade contém os valores de DeliveryNotificationOptions enumeração.

Considere o seguinte exemplo de código:

// Create an Instance of MailMessage class
var eml = new MailMessage
{
    // Specify From, To, HtmlBody, DeliveryNotificationOptions field
    From = "sender@sender.com",
    To = "receiver@receiver.com",
    HtmlBody = "<html><body>This is the Html body</body></html>",
    DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess
};

eml.Headers.Add("Return-Receipt-To", "sender@sender.com");
eml.Headers.Add("Disposition-Notification-To", "sender@sender.com");

// Create an instance of SmtpClient Class
var client = new SmtpClient
{
    // Specify your mailing host server, Username, Password and Port No
    Host = "smtp.server.com",
    Username = "Username",
    Password = "Password",
    Port = 25
};

try
{
    // Client.Send will send this message
    client.Send(eml);
    // Display ‘Message Sent’, only if message sent successfully
    Console.WriteLine(@"Message sent");
}
catch (Exception ex)
{
    System.Diagnostics.Trace.WriteLine(ex.ToString());
}

Observação: Solicitações de recibo de leitura podem não ser sempre atendidas porque:

  • Um cliente de email pode não implementar essa funcionalidade.
  • O usuário final pode ter essa funcionalidade desativada.
  • O usuário final pode escolher não enviar um.

Personalizar Cabeçalhos de E‑mail

Cabeçalhos de e‑mail representam um padrão da Internet e o RFC define campos de cabeçalho que são incluídos em mensagens de e‑mail da Internet. Um cabeçalho de e‑mail pode ser especificado usando o MailMessage classe. Os tipos de cabeçalho comuns são definidos em HeaderType classe. É uma classe selada que funciona como uma enumeração normal.

Normalmente, um cabeçalho de e‑mail contém estes campos:

  • To: Endereços de destinatários podem ser especificados no campo To. Os destinatários do campo To são a audiência principal da mensagem. Pode haver mais de um endereço de destinatário.
  • From: Este campo apresenta o endereço de e‑mail do remetente da mensagem.
  • Cc: Permite que os usuários enviem uma mensagem como "Cópia Carbono" ou "Cópia de Cortesia". Ou seja, o receptor não precisa responder ou agir. Normalmente, pessoal de supervisão é notificado com CC.
  • Bcc: Significa Blind Carbon Copy (cópia oculta), que permite enviar um e‑mail para um destinatário que fica oculto dos demais destinatários.
  • ReplyTo: Este campo de cabeçalho indica para onde o remetente deseja que as respostas sejam enviadas.
  • Subject: Título, assunto. Frequentemente usado como indicativo de tópico para mensagens que respondem ou comentam outras mensagens.
  • Date: Este cabeçalho especifica uma data (e hora). Normalmente é a data em que a mensagem foi composta e enviada.
  • XMailer: Informações sobre o software cliente do remetente. Exemplo: X-Mailer: Aspose.Email O XMailer é usado por clientes de e‑mail. Diferentes clientes de e‑mail terão valores de XMailer diferentes. O valor de XMailer do MS Outlook é Microsoft Office Outlook, Build 11.0.5510. Ele é ignorado pelo receptor ou leitor de e‑mail.

Normalmente, um cabeçalho de e‑mail tem a seguinte aparência:

Reply-To: reply@reply.com
From: sender@sender.com
To: guangzhou@guangzhoo.com
Subject: test mail
Date: 6 Mar 2006 8:2:2 +0800
X-Mailer: Aspose.Email

Para personalizar um cabeçalho de e‑mail, siga estas etapas de código:

  • Crie uma instância do MailMessage classe.
  • Especifique To, From, Cc, Bcc, ReplyTo, Subject, Date & XMailer usando uma instância de MailMessage.
  • Crie uma instância do MimeHeader classe e especifique o cabeçalho personalizado.
  • Adicione o cabeçalho personalizado ao MailMessage instância.

O seguinte trecho de código mostra como definir cabeçalhos de email.

var eml = new MailMessage
{
    ReplyToList = "reply@reply.com",
    From = "sender@sender.com",
    To = "receiver1@receiver.com",
    CC = "receiver2@receiver.com",
    Bcc = "receiver3@receiver.com",
    Subject = "test mail",
    Date = new System.DateTime(2006, 3, 6),
    XMailer = "Aspose.Email"
};

O trecho de código acima gera um cabeçalho de e‑mail no seguinte formato:

Reply-To: reply@reply.com
From: sender@sender.com
To: receiver1@receiver.com
CC: receiver2@receiver.com
BCC: receiver3@receiver.com
Subject: test mail
Date: 6 Mar 2006 8:2:2 +0800
X-Mailer: Aspose.Email

Inserir um Cabeçalho em um Local Específico

O Adicionar método do HeaderCollection classe insere um cabeçalho no final da coleção. Entretanto, pode ser necessário inserir um cabeçalho em um local específico. Nesse caso, o Adicionar método não será útil. Para conseguir isso, use o Insert método do HeaderCollection. Se a coleção contiver cabeçalhos com o mesmo nome, este cabeçalho será inserido antes dos outros cabeçalhos com o mesmo nome. O trecho de código a seguir mostra como inserir um cabeçalho em um local específico.

eml.Headers.Insert("Received", "Value");

Adicionar Cabeçalhos Personalizados

Um cabeçalho de email pode ser especificado usando o MailMessage classe. Para especificar um cabeçalho personalizado em uma mensagem de email, considere o seguinte exemplo de código:

eml.Headers.Add("secret-header", "mystery");

O trecho de código acima gera um cabeçalho de e‑mail no seguinte formato:

secret-header: mystery

Criar Mensagens Assinadas

A API Aspose.Email fornece a capacidade de criar mensagens assinadas usando certificados. O AttachSignature método do MailMessage classe pode ser usada para assinar uma mensagem para salvar ou até mesmo enviá‑la usando o SmtpClient.

Assinar uma Mensagem

O trecho de código a seguir mostra como Assinar uma Mensagem.

Usando a Opção de Certificado Destacado

Clientes de e‑mail baseados na Web podem não conseguir exibir o conteúdo do corpo de uma Mensagem Assinada. Isso pode ser resolvido destacando o certificado antes de enviá‑lo para clientes de e‑mail baseados na Web. O sinalizador destacado no método sobrecarregado de AttachSignature pode ser usado para alcançar isso. Se definido como true, o certificado é destacado do e‑mail e vice‑versa. Para ver o corpo da Mensagem Assinada em clientes baseados na Web, você precisa criar MailMessage com assinatura destacada. O trecho de código a seguir mostra como usar a opção de certificado destacado.