SmtpClient Класс

Определение

Внимание!

SmtpClient and its network of types are poorly designed, we strongly recommend you use https://github.com/jstedfast/MailKit and https://github.com/jstedfast/MimeKit instead

Позволяет приложениям отправлять электронную почту с помощью протокола SMTP (Simple Mail Transfer Protocol). Тип SmtpClient устарел.

public ref class SmtpClient : IDisposable
public ref class SmtpClient
public class SmtpClient : IDisposable
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public class SmtpClient : IDisposable
public class SmtpClient
[System.Obsolete("SmtpClient and its network of types are poorly designed, we strongly recommend you use https://github.com/jstedfast/MailKit and https://github.com/jstedfast/MimeKit instead")]
public class SmtpClient : IDisposable
type SmtpClient = class
    interface IDisposable
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
type SmtpClient = class
    interface IDisposable
type SmtpClient = class
[<System.Obsolete("SmtpClient and its network of types are poorly designed, we strongly recommend you use https://github.com/jstedfast/MailKit and https://github.com/jstedfast/MimeKit instead")>]
type SmtpClient = class
    interface IDisposable
Public Class SmtpClient
Implements IDisposable
Public Class SmtpClient
Наследование
SmtpClient
Атрибуты
Реализации

Примеры

В следующем примере кода показано асинхронная отправка сообщения электронной почты.

#using <System.dll>
using namespace System;
using namespace System::Net;
using namespace System::Net::Mail;
using namespace System::Net::Mime;
using namespace System::Threading;
using namespace System::ComponentModel;

static bool mailSent;

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 != nullptr)
    {
        Console::WriteLine("[{0}] {1}", token, 
            e->Error->ToString());
    } else
    {
        Console::WriteLine("Message sent.");
    }
    mailSent = true;
}

int main(array<String^>^ args)
{
    if (args->Length > 1)
    {
        // Command-line argument must be the SMTP host.
        SmtpClient^ client = gcnew SmtpClient(args[1]);
        // Specify the email sender.
        // Create a mailing address that includes a UTF8 
        // character in the display name.
        MailAddress^ from = gcnew MailAddress("jane@contoso.com",
            "Jane " + (wchar_t)0xD8 + " Clayton",
            System::Text::Encoding::UTF8);
        // Set destinations for the email message.
        MailAddress^ to = gcnew MailAddress("ben@contoso.com");
        // Specify the message content.
        MailMessage^ message = gcnew 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 = gcnew String(gcnew array<wchar_t>{L'\u2190', 
            L'\u2191', L'\u2192', L'\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 += gcnew
            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->ToLower()->StartsWith("c") && mailSent == false)
        {
            client->SendAsyncCancel();
        }
        // Clean up.
        delete message;
        client = nullptr;
        Console::WriteLine("Goodbye.");
    }
    else
    {
        Console::WriteLine("Please give SMTP server name!");
    }
}

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 == false)
            {
                client.SendAsyncCancel();
            }
            // Clean up.
            message.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()
            Console.WriteLine("Goodbye.")
        End Sub
    End Class
End Namespace

Комментарии

SmtpClientКласс используется для отправки электронной почты на SMTP-сервер для доставки. Протокол SMTP определен в документе RFC 2821, который доступен по адресу https://www.ietf.org .

Важно!

Мы не рекомендуем использовать SmtpClient класс для новой разработки, поскольку SmtpClient не поддерживает много современных протоколов. Вместо этого используйте маилкит или другие библиотеки. Дополнительные сведения см. в разделе SmtpClient не следует использовать в GitHub.

SmtpClientКласс является устаревшим в Xamarin. Но:

  • Он включен в .NET Standard 2,0 и более поздних версий и поэтому должен быть частью любой реализации .NET, поддерживающей эти версии.
  • Он имеется и может использоваться в платформа .NET Framework 4 до платформа .NET Framework 4,8.
  • Он может использоваться в .NET Core, но его использование не рекомендуется.

Классы, приведенные в следующей таблице, используются для создания сообщений электронной почты, которые могут быть отправлены с помощью SmtpClient .

Class Описание
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 объектов. Дополнительные сведения см. в разделе < > элемент Маилсеттингс (параметры сети). .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 завершается и клиент хочет завершить подключение, он должен отправить серверу сообщение о выходе, чтобы указать, что в нем нет сообщений для отправки. Это позволяет серверу освобождать ресурсы, связанные с подключением от клиента, и обрабатывать сообщения, отправленные клиентом.

SmtpClientКласс не имеет Finalize метода, поэтому приложение должно вызвать, Dispose чтобы явно освободить ресурсы. DisposeМетод выполняет итерацию всех установленных подключений к SMTP-серверу, указанному в Host свойстве, и отправляет сообщение о выходе, а затем КОРРЕКТНО завершает TCP-подключение. DisposeМетод также освобождает неуправляемые ресурсы, используемые объектом, Socket и при необходимости уничтожает управляемые ресурсы.

Вызовите метод Dispose по окончании использования класса SmtpClient. Метод Dispose оставляет класс SmtpClient в непригодном для использования состоянии. После вызова метода Dispose необходимо освободить все ссылки на объект SmtpClient, чтобы сборщик мусора мог освободить память, занимаемую объектом SmtpClient.

Конструкторы

SmtpClient()

Инициализирует новый экземпляр класса SmtpClient, используя параметры файла конфигурации.

SmtpClient(String)

Инициализирует новый экземпляр класса SmtpClient, который отправляет электронную почту с помощью указанного сервера SMTP.

SmtpClient(String, Int32)

Инициализирует новый экземпляр класса 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)

Отправляет указанное сообщение SMTP-серверу для доставки в качестве асинхронной операции.

SendMailAsync(MailMessage, CancellationToken)

Отправляет указанное сообщение SMTP-серверу для доставки в качестве асинхронной операции.

SendMailAsync(String, String, String, String)

Отправляет указанное сообщение SMTP-серверу для доставки в качестве асинхронной операции. Отправитель, получатели, тема и основная часть сообщения указываются с помощью объектов String.

SendMailAsync(String, String, String, String, CancellationToken)

Отправляет указанное сообщение на SMTP-сервер для доставки в качестве асинхронной операции, используя указанные строки с темой и текстом, а также с данными об отправителе и получателях.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

События

SendCompleted

Происходит после завершения асинхронной операции по отправке электронной почты.

Применяется к

См. также раздел