Изпращане на имейли чрез MailKit

Дата на създаване на страница :

околна среда

.NET
  • 5.0
Мейлkit
  • 2.11.1

отначало

Преди smtpClient, клас за изпращане на имейли, е включен като стандарт, но сега е отхвърлен поради извън спецификациите.

Това означава, че .NET няма стандартна пощенска библиотека, така че ще използвате библиотека на други производители.

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

Представяне на MailKit

Стартиране на Visual Studio 2019 и създаване на нов проект конзола приложение (.NET). Ако използвате .NET, ще имате известна свобода в типа на проекта, така че ще знам подробностите.

Когато отворите проекта, щракнете с десния бутон зависимости от разтвора Explorer и изберете Управление на 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, и т.н., но това е, предвид, че става излишно като Съвети.

Определяне на съдържанието на имейл

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

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

Мисля, че тази част е съответната част, тъй като тя е, ако обикновено използвате mailers и т.н.

Тъй като не е наличен за изпращане от в маскировка в последните системи за електронна поща, по принцип ще зададете същия имейл адрес като вашия имейл акаунт.

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 Потребителско име и парола ?? Стартиране на ТН
Outlook.com Част 2 smtp-mail.outlook.com 587 Потребителско име и парола Получете парола за приложение и го задайте на парола Стартиране на ТН
1000000 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