C smtpclient inviare più e-mail
Definizione della classe SmtpClient
Importante
Alcune informazioni si riferiscono al prodotto non definitivo che può essere modificato in modo sostanziale prima del rilascio. Microsoft non fornisce alcuna garanzia, esplicita o implicita, in relazione alle informazioni fornite qui.
Consente alle applicazioni di inviare messaggi di posta elettronica utilizzando il protocollo SMTP (Simple Mail Transfer Protocol). Il tipo SmtpClient è obsoleto su alcune piattaforme e non consigliato su altre; per ulteriori informazioni, vedere la sezione Osservazioni.
- Attributi di ereditarietà
-
UnsupportedOSPlatformAttribute
- implementa esempi
-
IDisposable
Nell'esempio di codice seguente viene illustrato l'invio di un messaggio di posta elettronica in modo asincrono.
La classe viene utilizzata per inviare messaggi di posta elettronica a un server SMTP per il recapito. Il protocollo SMTP è definito nella RFC 2821, che è disponibile all'indirizzo https://www.ietf.org.
Importante
Non è consigliabile usare la classe per un nuovo sviluppo perché non supporta molti protocolli moderni. Utilizzare invece MailKit o altre librerie. Per altre informazioni, vedere SmtpClient non deve essere usato in GitHub.
La classe è obsoleta in Xamarin. Tuttavia:
- è incluso in .NET Standard 2.0 e versioni successive e pertanto deve far parte di qualsiasi implementazione .NET che supporta tali versioni.
- È presente e può essere utilizzato in .NET Framework 4 tramite .NET Framework 4.8.
- È utilizzabile in .NET Core, ma il suo utilizzo non è consigliato.
Le classi illustrate nella tabella seguente vengono utilizzate per creare messaggi di posta elettronica che possono essere inviati tramite SmtpClient.
Classe | descrizione |
---|---|
Allegato | Rappresenta i file allegati. Questo 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 creare e inviare un messaggio di posta elettronica utilizzando SmtpClient, è necessario specificare le informazioni seguenti:
-
Il server host SMTP utilizzato per inviare la posta elettronica. Vedere le proprietà Host e Porta.
-
Credenziali per l'autenticazione, se richiesta dal server SMTP. Vedere la proprietà Credentials.
-
L'indirizzo e-mail del mittente. Vedere i metodi Send e SendAsync che accettano un parametro. Vedere anche la proprietà MailMessage.From.
-
L'indirizzo o gli indirizzi e-mail dei destinatari. Vedere i metodi Send e SendAsync che accettano un parametro. Vedi anche la proprietà MailMessage.To.
-
Le Contenuto del messaggio. Vedere i metodi Send e SendAsync che accettano un parametro. Vedere anche la proprietà MailMessage.Body.
Per includere un allegato in un messaggio di posta elettronica, creare innanzitutto l'allegato utilizzando la classe Attachment e quindi aggiungerlo al messaggio utilizzando la proprietà MailMessage.Attachments. A seconda del lettore di posta elettronica utilizzato dai destinatari e del tipo di file dell'allegato, alcuni destinatari potrebbero non essere in grado di leggere l'allegato. Per i client che non sono in grado di visualizzare l'allegato nel formato originale, è possibile specificare visualizzazioni alternative utilizzando la proprietà MailMessage.AlternateViews.
In .NET Framework è possibile utilizzare i file di configurazione dell'applicazione o del computer per specificare i valori predefiniti di host, porta e credenziali per tutti gli oggetti SmtpClient. Per ulteriori informazioni, vedere Elemento <mailSettings> (Impostazioni di rete). .NET Core non supporta l'impostazione delle impostazioni predefinite. Come soluzione alternativa, è necessario impostare il metodo proprietà pertinenti direttamente su SmtpClient.
Per inviare il messaggio di posta elettronica e bloccarlo in attesa che l'e-mail venga trasmessa al server SMTP, utilizzare uno dei metodi di invio sincrono. Per consentire al thread principale del programma di continuare l'esecuzione durante la trasmissione del messaggio di posta elettronica, utilizzare uno dei metodi SendAsync asincroni. L'evento SendCompleted viene generato al termine di un'operazione SendAsync. Per ricevere questo evento, è necessario aggiungere un delegato SendCompletedEventHandler a SendCompleted. Il delegato SendCompletedEventHandler deve fare riferimento a un metodo di callback che gestisce la notifica degli eventi SendCompleted. Per annullare una trasmissione di posta elettronica asincrona, utilizzare il metodo SendAsyncCancel.
La connessione stabilita dall'istanza corrente della classe SmtpClient al server SMTP può essere riutilizzata se un'applicazione desidera inviare più messaggi allo stesso server SMTP. Ciò è particolarmente utile quando l'autenticazione o vengono utilizzate la crittografia per stabilire una connessione al server SMTP. Il processo di autenticazione e di creazione di una sessione TLS può essere un'operazione costosa. La necessità di 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 numerose applicazioni di posta elettronica ad alto volume che inviano aggiornamenti di stato tramite e-mail, distribuzioni di newsletter o avvisi tramite posta elettronica. Inoltre, molte applicazioni client di posta elettronica supportano una modalità offline in cui gli utenti possono comporre molti messaggi di posta elettronica che vengono inviati in un secondo momento quando viene stabilita una connessione al server SMTP. È tipico per un client di posta elettronica inviare tutti i messaggi SMTP a un server SMTP specifico (fornito dal provider di servizi Internet) che poi inoltra questa e-mail ad altri server SMTP.
L'implementazione della classe SmtpClient raggruppa le connessioni SMTP in modo da evitare il sovraccarico necessario per ristabilire una connessione per ogni messaggio allo stesso server. Un'applicazione può riutilizzare lo stesso oggetto SmtpClient 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 è stata completata utilizzando 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 ha più messaggi da inviare. Ciò consente al server di liberare le risorse associate alla connessione dal client ed elaborare i messaggi inviati dal client.
La classe SmtpClient non dispone di alcun metodo, pertanto un'applicazione deve chiamare Dispose per liberare risorse in modo esplicito. Il metodo Dispose scorre tutte le connessioni stabilite al server SMTP specificato nella proprietà Host e invia un messaggio QUIT seguito dalla normale chiusura della connessione TCP. Le Il metodo Dispose rilascia anche le risorse non gestite utilizzate da Socket e, facoltativamente, elimina le risorse gestite.
Chiamare Dispose al termine dell'utilizzo di SmtpClient. Il metodo Dispose lascia SmtpClient in uno stato inutilizzabile. Dopo aver chiamato Dispose, è necessario rilasciare tutti i riferimenti a SmtpClient in modo che il Garbage Collector possa recuperare la memoria occupata da SmtpClient.
Costruttori
Proprietà
ClientCertificates | Specifica quali certificati devono essere utilizzati 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 messaggi di posta elettronica. |
DeliveryMethod | Specifica la modalità di uscita delle e-mail I messaggi verranno gestiti. |
EnableSsl | Specifica se SmtpClient utilizza SSL (Secure Sockets Layer) 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 che devono essere elaborati dal server SMTP locale. |
Porta | 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 (SPN) da utilizzare per l'autenticazione quando si utilizza la protezione estesa. |
Timeout | Ottiene o imposta un valore che specifica la quantità di tempo dopo la quale si verifica il timeout di una chiamata di invio sincrona. |
UseDefaultCredentials | Ottiene o imposta un valore booleano che controlla se le DefaultCredentials vengono inviate con le richieste. |
Metodi Dispose() | Invia un messaggio QUIT al server SMTP, termina normalmente la connessione TCP e rilascia tutte le risorse utilizzate dall'istanza corrente della classe SmtpClient. |
Dispose(Boolean) | Invia un messaggio QUIT al server SMTP, termina normalmente la connessione TCP, rilascia tutte le risorse utilizzate dall'istanza corrente della classe SmtpClient e, facoltativamente, elimina il file gestito risorse. |
Equals(Object) | Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object) |
GetHashCode() | funge da La funzione hash predefinita. (Ereditato da Object) |
GetType() | Ottiene il tipo dell'istanza corrente. (Ereditato da Object) |
MemberwiseClone() | Crea una copia superficiale dell'oggetto corrente. (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, i destinatari, l'oggetto e il corpo del messaggio vengono specificati utilizzando gli oggetti String. |
SendAsync(MailMessage, Object) | Invia il messaggio di posta elettronica specificato a un server SMTP per il recapito. Questo metodo non si blocca il thread chiamante e consente al chiamante di passare un oggetto al metodo che viene 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, i destinatari, l'oggetto e il corpo del messaggio vengono specificati utilizzando gli oggetti String. Questo metodo non blocca il thread chiamante e consente al chiamante di passare un oggetto al metodo che viene richiamato al termine dell'operazione. |
SendAsyncCancel() | Annulla un'operazione asincrona per l'invio di un messaggio e-mail. |
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 asincrono operazione. |
SendMailAsync(String, String, String, String, CancellationToken) | Invia il messaggio specificato a un server SMTP per il recapito come operazione asincrona, utilizzando le stringhe del mittente, dei destinatari, dell'oggetto e del corpo specificati. |
SendMailAsync(String, String, String, String, String) | Invia il messaggio specificato a un server SMTP per il recapito come operazione asincrona. Il mittente, i destinatari, l'oggetto e il corpo del messaggio vengono specificati utilizzando gli oggetti String. |
ToString() | Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object) |
Eventi
SendCompleted | Si verifica al completamento di un'operazione di invio di messaggi di posta elettronica asincrona. |