Отправка электронных писем с помощью MailKit

Дата создания страницы :

окружающая среда

.NET
  • .NET 5.0
ПочтаКит
  • 2.11.1

сначала

Ранее, smtpClient, класс для отправки писем, был включен в качестве стандарта, но теперь deprecated из-за вне спецификаций.

Это означает, что у .NET нет стандартной библиотеки рассылки, поэтому вы будете использовать сторонничную библиотеку.

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

Представляем MailKit

Запустите Visual Studio 2019 и создайте новый проект консольного приложения (.NET). Если вы используете .NET, вы будете иметь некоторую свободу в типе проекта, так что я буду fore-знать подробности.

При открытии проекта зависимости от Solution Explorer можно нажать правой кнопкой мыши и выбрать пакеты Manage NuGet.

Нажмите на вкладку Просмотр и ввените MailKit в поле поиска для отображения MailKit в списке ниже.

Выберите MailKit из списка, убедитесь, что последняя версия выбрана, а затем нажмите кнопку Установить.

Нажмите кнопку OK.

Убедитесь, что пакет содержит MailKit.

программа

Ниже приводится минимальный код для отправки писем.

Вы определяете информацию, необходимой для вашей электронной почты в первой половине кода, и используете эти значения для отправки почты во второй половине. Вы должны иметь возможность использовать вторую половину кода в фиксированной образом, просто изменив определение первой половины по мере необходимости.

using MailKit.Net.Smtp;
using MailKit.Security;
using MimeKit;
using MimeKit.Text;

namespace MailKitSend
{
  class Program
  {
    static void Main(string[] args)
    {
      // メールの送信に必要な情報
      var smtpHostName = "[SMTP サーバー名]";
      var smtpPort = 587;                         // or 25
      var smtpAuthUser = "[認証ユーザー名]";
      var smtpAuthPassword = "[認証パスワードまたはアプリパスワード]";

      // メールの内容
      var from = "[送信者メールアドレス]";
      var to = "[送り先メールアドレス]";

      var subject = "テストメールの件名です。";
      var body = "テストメールの本文です。\n改行です。";
      var textFormat = TextFormat.Text;

      // MailKit におけるメールの情報
      var message = new MimeMessage();

      // 送り元情報  
      message.From.Add(MailboxAddress.Parse(from));

      // 宛先情報  
      message.To.Add(MailboxAddress.Parse(to));

      // 表題  
      message.Subject = subject;

      // 内容  
      var textPart = new TextPart(textFormat)
      {
        Text = body,
      };
      message.Body = textPart;

      using var client = new SmtpClient();

      // SMTPサーバに接続  
      client.Connect(smtpHostName, smtpPort, SecureSocketOptions.Auto);

      if (string.IsNullOrEmpty(smtpAuthUser) == false)
      {
        // SMTPサーバ認証  
        client.Authenticate(smtpAuthUser, smtpAuthPassword);
      }

      // 送信  
      client.Send(message);

      // 切断  
      client.Disconnect(true);
    }
  }
}

Определить информацию, необходимую для отправки электронной почты

var smtpHostName = "[SMTP サーバー名]";
var smtpPort = 587;                         // or 25
var smtpAuthUser = "[認証ユーザー名]";
var smtpAuthPassword = "[認証パスワードまたはアプリパスワード]";

Здесь вы устанавливаете различные значения в зависимости от того, какой почтовый сервер (сервер SMTP) вы используете. Я хотел бы объяснить некоторые из значений, которые я устанавливаю в конце этой статьи, но в основном увидеть сайт моего почтового сервера.

Первоначально она написана в appsettigs.json и т.д., но это forethough она становится излишним, как советы.

Определить содержание электронной почты

var from = "[送信者メールアドレス]";
var to = "[送り先メールアドレス]";

var subject = "テストメールの件名です。";
var body = "テストメールの本文です。\n改行です。";
var textFormat = TextFormat.Text;

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

Так как он не доступен для отправки из маскировки в последние почтовые системы, в основном вы установите тот же адрес электронной почты, как ваша учетная запись электронной почты.

TextFormat могут быть отправлены в текстовом или HTML. Если вы отправляете его в HTML, встраивать HTML теги в части тела.

Настройка информации, необходимой для обработки отправки электронных писем

// MailKit におけるメールの情報
var message = new MimeMessage();

// 送り元情報  
message.From.Add(MailboxAddress.Parse(from));

// 宛先情報  
message.To.Add(MailboxAddress.Parse(to));

// 表題  
message.Subject = subject;

// 内容  
var textPart = new TextPart(textFormat)
{
   Text = body,
};
message.Body = textPart;

В принципе, это форма установления значения, определенного выше.

Вы также можете установить несколько от и до.

Он не включен в выборку, но он также может включать CC и BCC. Если вы хотите включить его, добавьте его так же, как от или to следующим образом:

message.Cc.Add(MailboxAddress.Parse(cc));
message.Bcc.Add(MailboxAddress.Parse(bcc));

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

message.From.Add(new MailboxAddress("送信者の名前", from));
message.To.Add(new MailboxAddress("送り先の名前", to));

Отправить электронную почту

using var client = new SmtpClient();

// SMTPサーバに接続  
client.Connect(smtpHostName, smtpPort, SecureSocketOptions.Auto);

if (string.IsNullOrEmpty(smtpAuthUser) == false)
{
   // SMTPサーバ認証  
   client.Authenticate(smtpAuthUser, smtpAuthPassword);
}

// 送信  
client.Send(message);

// 切断  
client.Disconnect(true);

Когда вы закончили определение вашей электронной почты, вы сделали отправку его.

Подача SmtpClient заявки делается в экземпляре класса. Dispose Поскольку using var это цель, она объявляется таким образом, что она может быть выпущена автоматически. Так как это способ написания C-8.0, пожалуйста, измените к обычному using описанию для более ранних версий.

SmtpClient.Connect метод сервера SMTP. Некоторые серверы STMP требуют подключения SSL или TLS, но указание обычно SecureSocketOptions.Auto хорошо.

Если сервер SMTP требует проверки SmtpClient.Authenticate подлинности, укажите имя пользователя и пароль в методе.

Когда соединение будет SmtpClient.Send завершено, отправьте электронное письмо в методе.

Когда все будет сделано, SmtpClient.Disconnect отключите его с методом.

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

Как отправить вложения

Чтобы отправить MimeMessage.Body вложение, измените значение, установленное следующим образом:

// using System.IO; 必要

var filePath = @"[ローカルに保存されているファイルパス].jpg";   // 例として JPEG ファイル指定
var buffer = File.ReadAllBytes(filePath);

var builder = new BodyBuilder();

// テキストか HTML で設定するプロパティが異なる
if (textFormat == TextFormat.Plain)
{
   builder.TextBody = body;
}
else
{
   builder.HtmlBody = body;
}

// 添付ファイルを追加
builder.Attachments.Add(Path.GetFileName(filePath), buffer, new ContentType("image", "jpg"));

message.Body = builder.ToMessageBody();

В вышеупомянутом коде файл, хранящийся локально, является вложением, но данные могут быть чем угодно, поскольку они должны быть только массивом byte или Stream. Отправка файла JPEG в качестве примера.

MimeMessage.Body Значение, которое вы установите BodyBuilder для создания как .

Текст тела TextPart отличается от , и свойства, к которым он установлен различны, будь то текст или HTML. Обратите внимание, что даже если вы установите оба параметра, первая настройка будет стерта.

Вложение BodyBuilder.Attachments добавляется в свойство. Аргументы: "имя приложения", "данные о вложении" и "тип контента (MIME)".

Обратите внимание, что имя вложения не может быть идентифицировано принимающей стороной, если вы не добавите расширение.

ContentType значение, которое вы установите, будет варьироваться в зависимости от формата файла. Если вы ищете в Интернете вокруг "файл формата MIME", вы будете можете увидеть комбинацию.

BodyBuilder.ToMessageBodyНаконец, позвоните методу и установите его MimeMessage.Body .

О указании сервера SMTP

Сервер SMTP для отправки почты имеет различные настройки в зависимости от почтового сервера, который вы используете. Ниже приводится пример, так что если нет такой вещи, пожалуйста, проверьте помощь сервера вы используете.

Кроме того, поскольку информация имеет место по данным на апрель 2021 года, в настоящее время эта информация, возможно, изменилась.

Проверка подлинности сервера SMTP Почтовая служба Если вы используете двухшаговую проверку шифрования
Outlook.com часть 1 smtp.office365.com 587 Имя пользователя и пароль ?? СТАРТТЛ
Outlook.com часть 2 smtp-mail.outlook.com 587 Имя пользователя и пароль Получить пароль приложения и установить его на пароль СТАРТТЛ
Gmail smtp.gmail.com 465 (SSL) или 587 (TLS) Имя пользователя и пароль Получить пароль приложения и установить его на пароль SSL или TLS или STARTTLS
Yahoo! Почта smtp.mail.yahoo.co.jp 465 Имя пользователя и пароль ?? Неизвестный тип
OCN smtp.ocn.ne.jp 465 Имя пользователя и пароль ?? SSL или TLS