SmtpClient Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Отправляет сообщение электронной почты с помощью протокола SMTP. Тип SmtpClient не рекомендуется для новой разработки. Дополнительные сведения см. в разделе "Примечания".
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
- Наследование
-
SmtpClient
- Атрибуты
- Реализации
Примеры
В следующем примере кода демонстрируется асинхронная отправка сообщения электронной почты.
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
Комментарии
Класс SmtpClient используется для отправки электронной почты на SMTP-сервер для доставки. Протокол SMTP определен в RFC 2821, который доступен по адресу https://www.ietf.org.
Это важно
Мы не рекомендуем использовать SmtpClient класс для новой разработки, так как SmtpClient не поддерживает множество современных протоколов. Вместо этого используйте MailKit или другие библиотеки. Дополнительные сведения см. в статье SmtpClient, которую не следует использовать.
Класс SmtpClient :
- Включены в .NET Standard 2.0 и более поздних версий и поэтому должны быть частью любой реализации .NET, поддерживающей эти версии.
- Присутствует и может использоваться в .NET Framework 4 через .NET Framework 4.8.
- Использовать в .NET (Core), но его использование не рекомендуется.
Классы, показанные в следующей таблице, используются для создания сообщений электронной почты, которые можно отправлять с помощью SmtpClient.
| Класс | Описание |
|---|---|
| Attachment | Представляет вложения файлов. Этот класс позволяет вложить файлы, потоки или текст в сообщение электронной почты. |
| MailAddress | Представляет адрес электронной почты отправителя и получателей. |
| MailMessage | Представляет сообщение электронной почты. |
Чтобы создать и отправить сообщение электронной почты с помощью SmtpClient, необходимо указать следующие сведения:
- Сервер узла SMTP, используемый для отправки электронной почты. См. раздел Host и Port свойства.
- Учетные данные для проверки подлинности, если требуется SMTP-сервером. См. Credentials свойство.
- Адрес электронной почты отправителя.
Send См. методы, SendAsync которые принимают
fromпараметр. Также см. MailMessage.From свойство. - Адрес электронной почты или адреса получателей.
Send См. методы, SendAsync которые принимают
recipientпараметр. Также см. MailMessage.To свойство. - Содержимое сообщения.
Send См. методы, SendAsync которые принимают
bodyпараметр. Также см. MailMessage.Body свойство.
Чтобы включить вложение с сообщением электронной почты, сначала создайте вложение с помощью Attachment класса, а затем добавьте его в сообщение с помощью MailMessage.Attachments свойства. В зависимости от средства чтения электронной почты, используемого получателями и типом файла вложения, некоторые получатели могут не считывать вложение. Для клиентов, которые не могут отображать вложение в исходной форме, можно указать альтернативные представления с помощью MailMessage.AlternateViews свойства.
В .NET Framework можно использовать файлы конфигурации приложения или компьютера, чтобы указать значения узлов, портов и учетных данных по умолчанию для всех SmtpClient объектов. Дополнительные сведения см. в разделе< mailSettings Element (Network Settings>). .NET Core не поддерживает параметры по умолчанию. В качестве обходного решения необходимо задать соответствующие свойства SmtpClient напрямую.
Чтобы отправить сообщение электронной почты и заблокировать при ожидании передачи сообщения электронной почты на SMTP-сервер, используйте один из синхронных Send методов. Чтобы разрешить основной поток программы продолжать выполняться во время передачи электронной почты, используйте один из асинхронных SendAsync методов. Событие SendCompleted возникает при SendAsync завершении операции. Чтобы получить это событие, необходимо добавить SendCompletedEventHandler делегат SendCompletedв . Делегат SendCompletedEventHandler должен ссылаться на метод обратного вызова, обрабатывающий уведомление о событиях SendCompleted . Чтобы отменить асинхронную передачу электронной почты, используйте SendAsyncCancel этот метод.
Замечание
Если выполняется передача электронной почты, и вы звоните SendAsync или Send снова, вы получите InvalidOperationExceptionсообщение.
Подключение, установленное текущим экземпляром SmtpClient класса к SMTP-серверу, может быть повторно использовано, если приложение хочет отправить несколько сообщений на один SMTP-сервер. Это особенно полезно при использовании проверки подлинности или шифрования подключения к SMTP-серверу. Процесс проверки подлинности и установления сеанса TLS может быть дорогостоящими операциями. Требование повторного установления подключения для каждого сообщения при отправке большого количества сообщений электронной почты на один SMTP-сервер может оказать значительное влияние на производительность. Существует несколько приложений электронной почты с большим объемом, которые отправляют обновления состояния электронной почты, рассылки бюллетеней или оповещения электронной почты. Кроме того, многие клиентские приложения электронной почты поддерживают режим внестроки, в котором пользователи могут создавать множество сообщений электронной почты, отправляемых позже при установке подключения к SMTP-серверу. Обычно клиент электронной почты отправляет все сообщения SMTP на определенный SMTP-сервер (предоставляемый поставщиком услуг Интернета), который затем перенаправит этот адрес электронной почты на другие SMTP-серверы.
Пулы SmtpClient smtp-подключений реализации класса позволяют избежать дополнительных затрат на повторное создание подключения для каждого сообщения с тем же сервером. Приложение может повторно использовать один и тот же SmtpClient объект для отправки нескольких разных сообщений электронной почты на один SMTP-сервер и на множество разных SMTP-серверов. В результате невозможно определить, когда приложение завершится с помощью SmtpClient объекта, и его следует очистить.
Когда сеанс SMTP завершится, и клиент хочет завершить подключение, он должен отправить сообщение QUIT на сервер, чтобы указать, что у него больше нет сообщений для отправки. Это позволяет серверу освободить ресурсы, связанные с подключением от клиента, и обработать сообщения, отправленные клиентом.
Класс SmtpClient не Finalize имеет метода, поэтому приложение должно явно Dispose освободить ресурсы. Метод Dispose выполняет итерацию по всем установленным подключениям к SMTP-серверу, указанному в Host свойстве, и отправляет сообщение QUIT, за которым следует корректное завершение TCP-подключения. Метод Dispose также освобождает неуправляемые ресурсы, используемые Socket и при необходимости удаляет управляемые ресурсы.
Вызов Dispose по завершении работы с помощью SmtpClient. Метод Dispose покидает SmtpClient неиспользуемое состояние. После вызова Disposeнеобходимо освободить все ссылки на SmtpClient сборщик мусора, чтобы освободить память, SmtpClient занятую.
Конструкторы
| Имя | Описание |
|---|---|
| SmtpClient() |
Инициализирует новый экземпляр SmtpClient класса с помощью параметров файла конфигурации. |
| SmtpClient(String, Int32) |
Инициализирует новый экземпляр класса, который отправляет электронную почту с помощью указанного SmtpClient SMTP-сервера и порта. |
| SmtpClient(String) |
Инициализирует новый экземпляр SmtpClient класса, который отправляет электронную почту с помощью указанного SMTP-сервера. |
Свойства
| Имя | Описание |
|---|---|
| ClientCertificates |
Укажите, какие сертификаты следует использовать для установления соединения SSL. |
| Credentials |
Возвращает или задает учетные данные, используемые для проверки подлинности отправителя. |
| DeliveryFormat |
Возвращает или задает формат доставки, используемый SmtpClient для отправки сообщения электронной почты. |
| DeliveryMethod |
Указывает способ обработки исходящих сообщений электронной почты. |
| EnableSsl |
Укажите, используется ли SmtpClient протокол SSL для шифрования подключения. |
| Host |
Возвращает или задает имя или IP-адрес узла, используемого для транзакций SMTP. |
| PickupDirectoryLocation |
Возвращает или задает папку, в которой приложения сохраняют почтовые сообщения, обрабатываемые локальным SMTP-сервером. |
| Port |
Возвращает или задает порт, используемый для транзакций SMTP. |
| ServicePoint |
Получает сетевое подключение, используемое для передачи сообщения электронной почты. |
| TargetName |
Возвращает или задает имя поставщика услуг (SPN), используемое для проверки подлинности при использовании расширенной защиты. |
| Timeout |
Возвращает или задает значение, указывающее время ожидания синхронного Send вызова. |
| UseDefaultCredentials |
Возвращает или задает Boolean значение, которое определяет, отправляются ли DefaultCredentials запросы. |
Методы
| Имя | Описание |
|---|---|
| Dispose() |
Отправляет сообщение QUIT на SMTP-сервер, корректно завершает TCP-подключение и освобождает все ресурсы, используемые текущим экземпляром SmtpClient класса. |
| Dispose(Boolean) |
Отправляет сообщение QUIT на SMTP-сервер, корректно завершает TCP-подключение, освобождает все ресурсы, используемые текущим экземпляром SmtpClient класса, и при необходимости удаляет управляемые ресурсы. |
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| OnSendCompleted(AsyncCompletedEventArgs) |
Вызывает событие SendCompleted. |
| Send(MailMessage) |
Отправляет указанное сообщение на SMTP-сервер для доставки. |
| Send(String, String, String, String) |
Отправляет указанное сообщение электронной почты на SMTP-сервер для доставки. Отправитель сообщения, получатели, тема и текст сообщения указываются с помощью String объектов. |
| SendAsync(MailMessage, Object) |
Отправляет указанное сообщение электронной почты на SMTP-сервер для доставки. Этот метод не блокирует вызывающий поток и позволяет вызывающему объекту передавать объект методу, который вызывается при завершении операции. |
| SendAsync(String, String, String, String, Object) |
Отправляет сообщение электронной почты на SMTP-сервер для доставки. Отправитель сообщения, получатели, тема и текст сообщения указываются с помощью String объектов. Этот метод не блокирует вызывающий поток и позволяет вызывающему объекту передавать объект методу, который вызывается при завершении операции. |
| SendAsyncCancel() |
Отменяет асинхронную операцию для отправки сообщения электронной почты. |
| SendMailAsync(MailMessage, CancellationToken) |
Отправляет указанное сообщение на SMTP-сервер для доставки в виде асинхронной операции. |
| SendMailAsync(MailMessage) |
Отправляет указанное сообщение на SMTP-сервер для доставки в виде асинхронной операции. |
| SendMailAsync(String, String, String, String, CancellationToken) |
Отправляет указанное сообщение на SMTP-сервер для доставки в виде асинхронной операции с использованием указанных отправителей, получателей, темы и строк текста. |
| SendMailAsync(String, String, String, String) |
Отправляет указанное сообщение на SMTP-сервер для доставки в виде асинхронной операции. Отправитель сообщения, получатели, тема и текст сообщения указываются с помощью String объектов. |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
События
| Имя | Описание |
|---|---|
| SendCompleted |
Происходит при завершении асинхронной операции отправки электронной почты. |