Надсилання повідомлень електронної пошти за допомогою MailKit

Дата створення сторінки :

середовище

.NET (Мережа)
  • .NET 5.0
Набір повідомлень
  • 2.11.1

Спочатку

Раніше smtpClient, клас для відправки електронних листів, був включений як стандартний, але тепер застарілий через застарілі специфікації.

Це означає, що .NET не має стандартної бібліотеки розсилки, тому ви будете використовувати бібліотеку сторонніх постачальників.

В даний час є "MailKit" в якості основної бібліотеки, тому я хотів би відправити електронний лист за допомогою цього разу.

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

Запустіть Visual Studio 2019 і створіть новий консольний додаток (.NET). Якщо ви використовуєте .NET, у вас буде певна свобода в типі проекту, тому я буду знати деталі.

Відкривши проект, клацніть правою кнопкою миші елемент Залежності з Провідника рішень і виберіть пункт Керування nuGet Packages.

Перейдіть на вкладку Огляд і введіть 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 і т.д., але це передумови, він стає зайвим, як Поради.

Визначення вмісту повідомлення електронної пошти

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. Якщо ви хочете включити його, додайте його так само, як Від або До наступним чином:

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();

У вищенаведеньому коді файл, що зберігається локально, є вкладенням, але дані можуть бути будь-чим, оскільки він повинен бути лише байт-масивом або потоком. Надсилання файлу 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 Ім'я користувача та пароль ?? ПОЧАТКОВІ TLS
Outlook.com частина 2 smtp-mail.outlook.com 587 Ім'я користувача та пароль Отримання пароля програми та встановлення пароля ПОЧАТКОВІ TLS
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