Crea messaggi email con opzioni personalizzate in C#
Crea nuovo messaggio email
Per creare un nuovo messaggio email puoi usare MailMessage classe. La classe MailMessage inizializza anche le proprietà del messaggio email creato, come l’indirizzo email del mittente, gli indirizzi email dei destinatari, l’oggetto dell’email e il contenuto del corpo dell’email in formato HTML.
Considera il seguente codice, con passaggi dettagliati, per creare un nuovo messaggio email e impostarne le proprietà.
- Crea una nuova istanza della MailMessage classe.
- Imposta il From proprietà per l’indirizzo email del mittente.
- Imposta il A proprietà per un elenco separato da virgole di indirizzi email dei destinatari.
- Imposta il Subject proprietà per l’oggetto dell’email.
- Imposta il HtmlBody proprietà per il contenuto HTML del corpo dell’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>"
};
Imposta la codifica di testo predefinita
Imposta la codifica di testo predefinita per le seguenti proprietà:
- Da: Nome visualizzato
- A: Nome visualizzato
- Subject
- Body
Usa il MailMessage.PreferredTextEncoding proprietà per assicurare che tutto il testo nelle proprietà sopra sia codificato correttamente nel messaggio email. Il seguente frammento di codice mostra come usare una parola francese come nome visualizzato per gli indirizzi email, oggetto e corpo.
Imposta corpo mail
Imposta Corpo Testo Semplice
Il corpo di un’email può essere specificato usando il Body proprietà del MailMessage classe.
// Declare message as MailMessage instance
var eml = new MailMessage
{
// Specify HtmlBody
Body = "This is a plain text body"
};
Imposta Corpo HTML
Il corpo di un’email può anche essere specificato usando HtmlBody proprietà del MailMessage classe.
// Declare message as MailMessage instance
var eml = new MailMessage
{
// Specify HtmlBody
HtmlBody = "<html><body>This is the HTML body</body></html>"
};
Imposta Testo Alternativo
Una vista alternativa in un file EML è una rappresentazione aggiuntiva del contenuto email che può essere usata per fornire una resa diversa del messaggio. Per esempio, se invii un messaggio in HTML, potresti voler fornire anche una versione plain text nel caso alcuni destinatari usino client email che non possono visualizzare contenuti HTML. Per questo scopo usa il AlternateView classe. Questa classe ha due proprietà, LinkedResources e BaseUri, che sono usati per risolvere gli URL all’interno del contenuto dell’email.
- LinkedResources è una collezione di LinkedResource oggetti. Quando renderizzati, gli URL all’interno del contenuto dell’email sono prima confrontati con gli URL nel Content Link di ciascun LinkedResource oggetto nel LinkedResources collezione e risolti.
- BaseUri è usato dal lettore di posta per risolvere URL relativi all’interno del corpo, e anche per risolvere URL relativi ai Content Link, nel LinkedResources collezione.
Considera il seguente codice con passaggi dettagliati per impostare un testo alternativo.
- Crea un’istanza di MailMessage classe.
- Crea AlternateView per visualizzare un messaggio email usando il contenuto specificato nella stringa.
- Aggiungi testo alternativo usando Aggiungi metodo di MailMessage.AlternateViews collezione.
// 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);
Specifica Codifica del Corpo Email
Aspose.Email usa il BodyEncoding proprietà del MailMessage classe per specificare la codifica del corpo dell’email. Per esempio:
eml.BodyEncoding = Encoding.UTF8;
Specifica Destinatari Multipli
Ci sono tre modi per specificare i destinatari di un messaggio email: usando i campi To, CC o BCC.
-
Il campo To è il destinatario principale del tuo messaggio. Puoi inserire uno o più indirizzi email in questo campo, separati da virgole. Il campo To è obbligatorio per ogni messaggio email.
-
Il campo CC sta per carbon copy. Viene usato per inviare una copia del tuo messaggio ad altre persone interessate o coinvolte nell’argomento. Il campo CC è opzionale e può contenere più indirizzi email. I destinatari nel campo CC possono vedere chi altro ha ricevuto il messaggio.
-
Il campo BCC sta per blind carbon copy. È simile al campo CC, ma i destinatari nel campo BCC sono nascosti agli altri destinatari. Il campo BCC è utile quando vuoi proteggere la privacy di alcuni destinatari o evitare di ingombrare la loro casella di posta con risposte. Il campo BCC è anche opzionale e può contenere più indirizzi email.
Considera il seguente codice, con passaggi dettagliati, per specificare più destinatari per un messaggio email.
Passaggi di codice:
- Crea una nuova istanza della MailMessage classe.
- Imposta il From proprietà per l’indirizzo email del mittente.
- Imposta il A proprietà a un array di indirizzi email dei destinatari principali.
- Imposta il CC proprietà a un array di indirizzi email dei destinatari che riceveranno una copia dell’email.
- Imposta il Bcc proprietà a un array di indirizzi email dei destinatari che riceveranno una blind carbon copy dell’email.
Esempio di codice:
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"}
};
Aggiungi Nomi Visualizzati agli Indirizzi Email
Insieme a un indirizzo email, può essere incluso un display name per identificare il mittente o il destinatario dell’email. Può includere il nome completo di una persona, un soprannome o altro identificatore.
Quando un messaggio email è visualizzato in un client di posta o interfaccia webmail, il nome visualizzato è solitamente mostrato accanto all’indirizzo email, facilitando l’utente nell’identificare da chi proviene il messaggio o a chi è indirizzato. Per aggiungere nomi visualizzati agli indirizzi email in un messaggio, considera il seguente codice con passaggi dettagliati:
- Carica il messaggio email da un file usando
MailMessage.Loadmetodo. - Imposta il mittente dell’email usando il
Fromproprietà dell’oggetto eml creando un nuovoMailAddressoggetto con l’indirizzo email e un nome visualizzato del mittente. - Aggiungi un destinatario all’email usando il
Toproprietà dell’oggetto eml, se necessario aggiungi la lista CC (Carbon Copy) usando ilCCproprietà, lista BCC (Blind Carbon Copy) usando ilBccproprietà e chiama ilAddmetodo con un nuovoMailAddressoggetto che contiene l’indirizzo email e un nome visualizzato del destinatario.
Esempio di codice:
// 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 "));
Imposta proprietà aggiuntive
Con Aspose.Email puoi usare proprietà aggiuntive del MailMessage classe come:
-
Date proprietà - imposta data e ora di un’email. Per impostazione predefinita, la data è quella reale in cui il messaggio è stato inviato, e l’ora è l’ora di invio, come mostrato da Microsoft Outlook. Tuttavia, il reale orario di consegna dell’email è aggiunto dal server SMTP stesso nell’intestazione mail. Per esempio, qui sotto c’è un’intestazione mail comune, dove Date imposta il 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 enumerazione - specifica i livelli di priorità per l’invio di un messaggio email. Può essere basso, normale o alto. La priorità influisce sulla velocità di trasmissione e sulla consegna.
-
MailSensitivity enumerazione - specifica cinque livelli di sensibilità.
-
XMailer- specifica il software che ha creato il messaggio e-mail.
Il frammento di codice qui sotto illustra come ciascuna delle proprietà discusse sopra può essere usata.
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"
};
Richiedi Conferma di Lettura
Per richiedere una conferma di lettura, usa Aspose.Email DeliveryNotificationOptions proprietà del MailMessage classe. Questa proprietà contiene i valori di DeliveryNotificationOptions enumerazione.
Considera il seguente esempio di codice:
// 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());
}
Nota: Le richieste di conferma di lettura potrebbero non essere sempre accettate perché:
- Un client di posta potrebbe non implementare tale funzionalità.
- L’utente finale potrebbe avere disattivata quella funzionalità.
- L’utente finale può scegliere di non inviarne uno.
Personalizza Intestazioni Email
Le intestazioni email rappresentano uno standard Internet e le RFC definiscono i campi intestazione che sono inclusi nei messaggi email Internet. Un’intestazione email può essere specificata usando il MailMessage classe. I tipi di intestazione comuni sono definiti in HeaderType classe. È una classe sealed che funziona come una normale enumerazione.
Normalmente, un’intestazione email contiene questi campi:
- To: Gli indirizzi dei destinatari possono essere specificati nel campo To. I destinatari del campo To sono il pubblico principale del messaggio. È possibile indicare più di un indirizzo destinatario.
- From: Questo campo presenta l’indirizzo email del mittente del messaggio.
- Cc: Consente agli utenti di inviare un messaggio come "Carbon Copy" o "Courtesy Copy". Il destinatario non è tenuto a rispondere o agire. Tipicamente, il personale di supervisione è notificato con CC.
- Bcc: Sta per Blind Carbon Copy, permette di inviare un’email a un destinatario nascosto agli altri destinatari.
- ReplyTo: Questo campo di intestazione indica dove il mittente desidera ricevere le risposte.
- Subject: Titolo, intestazione, oggetto. Spesso usato come indicatore di thread per messaggi che rispondono o commentano altri messaggi.
- Date: Questa intestazione specifica una data (e ora). Normalmente è la data in cui il messaggio è stato composto e inviato.
- XMailer: Informazioni sul software client dell’emittente. Esempio: X-Mailer: Aspose.Email XMailer è usato dai client di posta. Diversi client di posta avranno valori XMailer differenti. Il valore XMailer di MS Outlook è Microsoft Office Outlook, Build 11.0.5510. Viene ignorato dal destinatario dell’email o dal lettore di email.
Normalmente, un’intestazione email appare così:
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
Per personalizzare un’intestazione email, segui questi passaggi di codice:
- Crea un’istanza di MailMessage classe.
- Specifica To, From, Cc, Bcc, ReplyTo, Subject, Date e XMailer utilizzando un’istanza di MailMessage.
- Crea un’istanza di MimeHeader classe e specifica l’intestazione personalizzata.
- Aggiungi l’intestazione personalizzata al MailMessage istanza.
Il seguente frammento di codice mostra come impostare le intestazioni 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"
};
Il frammento di codice sopra produce un’intestazione email nel seguente 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
Inserisci un’intestazione in una posizione specifica
Il Aggiungi metodo del HeaderCollection classe inserisce un’intestazione alla fine della collezione. Tuttavia, a volte può essere necessario inserire un’intestazione in una posizione specifica. In tal caso, il Aggiungi il metodo non sarà d’aiuto. Per ottenere ciò, usa il Insert metodo del HeaderCollection. Se la collezione contiene intestazioni con lo stesso nome, questa intestazione sarà inserita prima delle altre intestazioni con lo stesso nome. Il seguente frammento di codice mostra come inserire un’intestazione in una posizione specifica.
eml.Headers.Insert("Received", "Value");
Aggiungi intestazioni personalizzate
Un’intestazione email può essere specificata usando il MailMessage classe. Per specificare un intestazione personalizzata in un messaggio email, considera il seguente esempio di codice:
eml.Headers.Add("secret-header", "mystery");
Il frammento di codice sopra produce un’intestazione email nel seguente formato:
secret-header: mystery
Crea messaggi firmati
L’API Aspose.Email fornisce la capacità di creare messaggi firmati usando certificati. Il AttachSignature metodo del MailMessage classe può essere usata per firmare un messaggio per salvarlo o anche inviarlo usando il SmtpClient.
Firma un Messaggio
Il seguente snippet di codice mostra come firmare un messaggio.
Uso dell’Opzione Certificato Separato
I client email basati sul web potrebbero non essere in grado di visualizzare i contenuti del corpo di un messaggio firmato. Ciò può essere risolto separando il certificato prima di inviarlo ai client email basati sul web. Il flag separato nel metodo sovraccarico di AttachSignature può essere usato per ottenere ciò. Se impostato a true, il certificato è separato dall’email e viceversa. Per vedere il corpo del Messaggio Firmato nei client web, è necessario creare MailMessage con firma separata. Il seguente snippet di codice mostra come usare l’opzione certificato separato.