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.
- Crie uma nova instância da MailMessage classe.
- Defina o From propriedade para o endereço de email do remetente.
- Defina o Para propriedade para uma lista separada por vírgulas de endereços de email dos destinatários.
- Defina o Subject propriedade para o assunto do email.
- 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.
- Crie uma instância de MailMessage classe.
- Criar AlternateView para visualizar uma mensagem de e‑mail usando o conteúdo especificado na string.
- 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:
- Crie uma nova instância da MailMessage classe.
- Defina o From propriedade para o endereço de email do remetente.
- Defina o Para propriedade para um array de endereços de e‑mail dos destinatários principais.
- 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.
- 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:
- Carregue a mensagem de e‑mail a partir de um arquivo usando
MailMessage.Loadmétodo. - Defina o remetente do e‑mail usando o
Frompropriedade do objeto eml criando um novoMailAddressobjeto com o endereço de e‑mail e um nome de exibição do remetente. - Adicione um destinatário ao e‑mail usando o
Topropriedade do objeto eml, se necessário adicione a lista CC (Carbon Copy) usando oCCpropriedade, lista BCC (Blind Carbon Copy) usando oBccpropriedade e chame oAddmétodo com um novoMailAddressobjeto 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.