SmtpClient Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Invia un messaggio di posta elettronica usando simple mail transfer protocol (SMTP). Il SmtpClient tipo non è consigliato per il nuovo sviluppo. Per altre informazioni, vedere la sezione Osservazioni.
public ref class SmtpClient : IDisposable
public ref class SmtpClient
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public class SmtpClient : IDisposable
public class SmtpClient : IDisposable
public class SmtpClient
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
type SmtpClient = class
interface IDisposable
type SmtpClient = class
interface IDisposable
type SmtpClient = class
Public Class SmtpClient
Implements IDisposable
Public Class SmtpClient
- Ereditarietà
-
SmtpClient
- Attributi
- Implementazioni
Esempio
Nell'esempio di codice seguente viene illustrato l'invio asincrono di un messaggio di posta elettronica.
using System;
using System.Net;
using System.Net.Mail;
using System.Net.Mime;
using System.Threading;
using System.ComponentModel;
namespace Examples.SmtpExamples.Async
{
public class SimpleAsynchronousExample
{
static bool mailSent = false;
private 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 be the SMTP host.
SmtpClient client = new SmtpClient(args[0]);
// Specify the email 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 email message.
MailAddress to = new MailAddress("ben@contoso.com");
// Specify the message content.
MailMessage message = new MailMessage(from, to);
message.Body = "This is a test email 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)
{
client.SendAsyncCancel();
}
// Clean up.
message.Dispose();
client.Dispose();
Console.WriteLine("Goodbye.");
}
}
}
Imports System.Net
Imports System.Net.Mail
Imports System.Net.Mime
Imports System.Threading
Imports System.ComponentModel
Namespace Examples.SmtpExamples.Async
Public Class SimpleAsynchronousExample
Private Shared mailSent As Boolean = False
Private Shared Sub SendCompletedCallback(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs)
' Get the unique identifier for this asynchronous operation.
Dim token As String = CStr(e.UserState)
If e.Cancelled Then
Console.WriteLine("[{0}] Send canceled.", token)
End If
If e.Error IsNot Nothing Then
Console.WriteLine("[{0}] {1}", token, e.Error.ToString())
Else
Console.WriteLine("Message sent.")
End If
mailSent = True
End Sub
Public Shared Sub Main(ByVal args() As String)
' Command line argument must the SMTP host.
Dim client As New SmtpClient(args(0))
' Specify the email sender.
' Create a mailing address that includes a UTF8 character
' in the display name.
Dim mailFrom As New MailAddress("jane@contoso.com", "Jane " & ChrW(&HD8) & " Clayton", System.Text.Encoding.UTF8)
' Set destinations for the email message.
Dim mailTo As New MailAddress("ben@contoso.com")
' Specify the message content.
Dim message As New MailMessage(mailFrom, mailTo)
message.Body = "This is a test email message sent by an application. "
' Include some non-ASCII characters in body and subject.
Dim someArrows As New String(New Char() {ChrW(&H2190), ChrW(&H2191), ChrW(&H2192), ChrW(&H2193)})
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.
AddHandler client.SendCompleted, AddressOf 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.
Dim userState As String = "test message1"
client.SendAsync(message, userState)
Console.WriteLine("Sending message... press c to cancel mail. Press any other key to exit.")
Dim answer As String = Console.ReadLine()
' If the user canceled the send, and mail hasn't been sent yet,
' then cancel the pending operation.
If answer.StartsWith("c") AndAlso mailSent = False Then
client.SendAsyncCancel()
End If
' Clean up.
message.Dispose()
client.Dispose()
Console.WriteLine("Goodbye.")
End Sub
End Class
End Namespace
Commenti
La SmtpClient classe viene utilizzata per inviare messaggi di posta elettronica a un server SMTP per il recapito. Il protocollo SMTP è definito in RFC 2821, disponibile in https://www.ietf.org.
Importante
Non è consigliabile usare la SmtpClient classe per il nuovo sviluppo perché SmtpClient non supporta molti protocolli moderni. Usare invece MailKit o altre librerie. Per altre informazioni, vedere SmtpClient non deve essere usato.
La SmtpClient classe è:
- Incluso in .NET Standard 2.0 e versioni successive e pertanto deve far parte di qualsiasi implementazione .NET che supporti tali versioni.
- Presente e può essere usato in .NET Framework 4 a .NET Framework 4.8.
- Utilizzabile in .NET (Core), ma l'uso non è consigliato.
Le classi illustrate nella tabella seguente vengono usate per costruire messaggi di posta elettronica che possono essere inviati tramite SmtpClient.
| Classe | Descrizione |
|---|---|
| Attachment | Rappresenta gli allegati di file. Questa classe consente di allegare file, flussi o testo a un messaggio di posta elettronica. |
| MailAddress | Rappresenta l'indirizzo di posta elettronica del mittente e dei destinatari. |
| MailMessage | Rappresenta un messaggio di posta elettronica. |
Per costruire e inviare un messaggio di posta elettronica tramite SmtpClient, è necessario specificare le informazioni seguenti:
- Server host SMTP utilizzato per inviare messaggi di posta elettronica. Vedere le Host proprietà e Port .
- Credenziali per l'autenticazione, se richiesto dal server SMTP. Vedere la Credentials proprietà .
- Indirizzo di posta elettronica del mittente. Vedere i Send metodi e SendAsync che accettano un
fromparametro. Vedere anche la MailMessage.From proprietà . - Indirizzo di posta elettronica o indirizzi dei destinatari. Vedere i Send metodi e SendAsync che accettano un
recipientparametro. Vedere anche la MailMessage.To proprietà . - Contenuto del messaggio. Vedere i Send metodi e SendAsync che accettano un
bodyparametro. Vedere anche la MailMessage.Body proprietà .
Per includere un allegato con un messaggio di posta elettronica, creare prima l'allegato usando la Attachment classe e quindi aggiungerlo al messaggio usando la MailMessage.Attachments proprietà . A seconda del lettore di posta elettronica usato dai destinatari e dal tipo di file dell'allegato, alcuni destinatari potrebbero non essere in grado di leggere l'allegato. Per i client che non possono visualizzare l'allegato nel formato originale, è possibile specificare visualizzazioni alternative utilizzando la MailMessage.AlternateViews proprietà .
In .NET Framework è possibile usare i file di configurazione dell'applicazione o del computer per specificare i valori predefiniti di host, porta e credenziali per tutti gli SmtpClient oggetti. Per altre informazioni, vedere <elemento mailSettings (impostazioni di> rete). .NET Core non supporta le impostazioni predefinite. Come soluzione alternativa, è necessario impostare direttamente le proprietà SmtpClient pertinenti.
Per inviare il messaggio di posta elettronica e bloccarlo durante l'attesa della trasmissione del messaggio di posta elettronica al server SMTP, utilizzare uno dei metodi sincroni Send . Per consentire al thread principale del programma di continuare l'esecuzione durante la trasmissione del messaggio di posta elettronica, usare uno dei metodi asincroni SendAsync . L'evento SendCompleted viene generato al termine di un'operazione SendAsync . Per ricevere questo evento, è necessario aggiungere un SendCompletedEventHandler delegato a SendCompleted. Il SendCompletedEventHandler delegato deve fare riferimento a un metodo di callback che gestisce la notifica degli SendCompleted eventi. Per annullare una trasmissione di posta elettronica asincrona, utilizzare il SendAsyncCancel metodo .
Annotazioni
Se è in corso una trasmissione di posta elettronica e si chiama SendAsync o Send di nuovo, si riceverà un .InvalidOperationException
La connessione stabilita dall'istanza corrente della SmtpClient classe al server SMTP può essere riutilizzata se un'applicazione desidera inviare più messaggi allo stesso server SMTP. Ciò è particolarmente utile quando si utilizza l'autenticazione o la crittografia stabilire una connessione al server SMTP. Il processo di autenticazione e definizione di una sessione TLS può essere costoso. Un requisito per ristabilire una connessione per ogni messaggio quando si invia una grande quantità di messaggi di posta elettronica allo stesso server SMTP potrebbe avere un impatto significativo sulle prestazioni. Esistono diverse applicazioni di posta elettronica con volumi elevati che inviano aggiornamenti dello stato della posta elettronica, distribuzioni di newsletter o avvisi di posta elettronica. Molte applicazioni client di posta elettronica supportano anche una modalità off-line in cui gli utenti possono comporre molti messaggi di posta elettronica inviati in un secondo momento quando viene stabilita una connessione al server SMTP. In genere un client di posta elettronica invia tutti i messaggi SMTP a un server SMTP specifico (fornito dal provider di servizi Internet) che inoltra quindi il messaggio di posta elettronica ad altri server SMTP.
Il SmtpClient pool di implementazione della classe esegue il pool di connessioni SMTP in modo da evitare il sovraccarico di ristabilire una connessione per ogni messaggio allo stesso server. Un'applicazione può riutilizzare lo stesso SmtpClient oggetto per inviare molti messaggi di posta elettronica diversi allo stesso server SMTP e a molti server SMTP diversi. Di conseguenza, non è possibile determinare quando un'applicazione viene completata usando l'oggetto SmtpClient e deve essere pulita.
Al termine di una sessione SMTP e il client desidera terminare la connessione, deve inviare un messaggio QUIT al server per indicare che non contiene più messaggi da inviare. In questo modo il server può liberare le risorse associate alla connessione dal client ed elaborare i messaggi inviati dal client.
La SmtpClient classe non Finalize dispone di alcun metodo, pertanto un'applicazione deve chiamare Dispose per liberare in modo esplicito le risorse. Il Dispose metodo esegue l'iterazione di tutte le connessioni stabilite al server SMTP specificato nella Host proprietà e invia un messaggio QUIT seguito dalla normale chiusura della connessione TCP. Il Dispose metodo rilascia anche le risorse non gestite usate da Socket e, facoltativamente, elimina le risorse gestite.
Chiamare Dispose al termine dell'utilizzo di SmtpClient. Il Dispose metodo lascia l'oggetto SmtpClient in uno stato inutilizzabile. Dopo aver chiamato Dispose, è necessario rilasciare tutti i riferimenti a SmtpClient in modo che SmtpClient il Garbage Collector possa recuperare la memoria occupata da .
Costruttori
| Nome | Descrizione |
|---|---|
| SmtpClient() |
Inizializza una nuova istanza della SmtpClient classe utilizzando le impostazioni del file di configurazione. |
| SmtpClient(String, Int32) |
Inizializza una nuova istanza della SmtpClient classe che invia messaggi di posta elettronica utilizzando il server SMTP e la porta specificati. |
| SmtpClient(String) |
Inizializza una nuova istanza della SmtpClient classe che invia messaggi di posta elettronica utilizzando il server SMTP specificato. |
Proprietà
| Nome | Descrizione |
|---|---|
| ClientCertificates |
Specificare i certificati da usare per stabilire la connessione SSL (Secure Sockets Layer). |
| Credentials |
Ottiene o imposta le credenziali utilizzate per autenticare il mittente. |
| DeliveryFormat |
Ottiene o imposta il formato di recapito utilizzato da SmtpClient per inviare un messaggio di posta elettronica. |
| DeliveryMethod |
Specifica la modalità di gestione dei messaggi di posta elettronica in uscita. |
| EnableSsl |
Specificare se SmtpClient usa Secure Sockets Layer (SSL) per crittografare la connessione. |
| Host |
Ottiene o imposta il nome o l'indirizzo IP dell'host utilizzato per le transazioni SMTP. |
| PickupDirectoryLocation |
Ottiene o imposta la cartella in cui le applicazioni salvano i messaggi di posta elettronica da elaborare dal server SMTP locale. |
| Port |
Ottiene o imposta la porta utilizzata per le transazioni SMTP. |
| ServicePoint |
Ottiene la connessione di rete utilizzata per trasmettere il messaggio di posta elettronica. |
| TargetName |
Ottiene o imposta il nome del provider di servizi da utilizzare per l'autenticazione quando si usa la protezione estesa. |
| Timeout |
Ottiene o imposta un valore che specifica l'intervallo di tempo trascorso il quale si verifica il timeout di una chiamata sincrona Send . |
| UseDefaultCredentials |
Ottiene o imposta un Boolean valore che controlla se l'oggetto DefaultCredentials viene inviato con richieste. |
Metodi
| Nome | Descrizione |
|---|---|
| Dispose() |
Invia un messaggio QUIT al server SMTP, termina normalmente la connessione TCP e rilascia tutte le risorse utilizzate dall'istanza corrente della SmtpClient classe . |
| Dispose(Boolean) |
Invia un messaggio QUIT al server SMTP, termina normalmente la connessione TCP, rilascia tutte le risorse utilizzate dall'istanza corrente della SmtpClient classe ed eventualmente elimina le risorse gestite. |
| Equals(Object) |
Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object) |
| GetHashCode() |
Funge da funzione hash predefinita. (Ereditato da Object) |
| GetType() |
Ottiene l'oggetto Type dell'istanza corrente. (Ereditato da Object) |
| MemberwiseClone() |
Crea una copia superficiale dell'oggetto corrente Object. (Ereditato da Object) |
| OnSendCompleted(AsyncCompletedEventArgs) |
Genera l'evento SendCompleted. |
| Send(MailMessage) |
Invia il messaggio specificato a un server SMTP per il recapito. |
| Send(String, String, String, String) |
Invia il messaggio di posta elettronica specificato a un server SMTP per il recapito. Il mittente del messaggio, i destinatari, l'oggetto e il corpo del messaggio vengono specificati utilizzando String oggetti . |
| SendAsync(MailMessage, Object) |
Invia il messaggio di posta elettronica specificato a un server SMTP per il recapito. Questo metodo non blocca il thread chiamante e consente al chiamante di passare un oggetto al metodo richiamato al termine dell'operazione. |
| SendAsync(String, String, String, String, Object) |
Invia un messaggio di posta elettronica a un server SMTP per il recapito. Il mittente del messaggio, i destinatari, l'oggetto e il corpo del messaggio vengono specificati utilizzando String oggetti . Questo metodo non blocca il thread chiamante e consente al chiamante di passare un oggetto al metodo richiamato al termine dell'operazione. |
| SendAsyncCancel() |
Annulla un'operazione asincrona per inviare un messaggio di posta elettronica. |
| SendMailAsync(MailMessage, CancellationToken) |
Invia il messaggio specificato a un server SMTP per il recapito come operazione asincrona. |
| SendMailAsync(MailMessage) |
Invia il messaggio specificato a un server SMTP per il recapito come operazione asincrona. |
| SendMailAsync(String, String, String, String, CancellationToken) |
Invia il messaggio specificato a un server SMTP per il recapito come operazione asincrona, utilizzando il mittente, i destinatari, l'oggetto e le stringhe del corpo specificate. |
| SendMailAsync(String, String, String, String) |
Invia il messaggio specificato a un server SMTP per il recapito come operazione asincrona. Il mittente del messaggio, i destinatari, l'oggetto e il corpo del messaggio vengono specificati utilizzando String oggetti . |
| ToString() |
Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object) |
Eventi
| Nome | Descrizione |
|---|---|
| SendCompleted |
Si verifica quando viene completata un'operazione di invio della posta elettronica asincrona. |