Odesílání e-mailů pomocí MailKitu

Datum vytvoření stránky :

životní prostředí

.NET
  • .NET 5.0
MailKit
  • 2.11.1

nejprve

Dříve byla třída smtpClient, třída pro odesílání e-mailů, zahrnuta jako standardní, ale nyní je zastaralá kvůli mimo specifikace.

To znamená, že rozhraní .NET nemá standardní poštovní knihovnu, takže budete používat knihovnu třetí strany.

V současné době existuje "MailKit" jako běžná knihovna, takže bych chtěl poslat e-mail pomocí této doby.

Představujeme MailKit

Spusťte Visual Studio 2019 a vytvořte nový projekt konzolové aplikace (.NET). Pokud používáte rozhraní .NET, budete mít v typu projektu určitou svobodu, takže se sejdu s podrobnostmi.

Když otevřete projekt, klikněte pravým tlačítkem myši na Závislosti z Průzkumníka řešení a vyberte Spravovat balíčky NuGet.

Klikněte na kartu Procházet a do vyhledávacího pole zadejte MailKit, abyste mailkit zobrazili v níže uvedeném seznamu.

Ze seznamu vyberte MailKit, ověřte, zda je vybrána nejnovější verze, a klikněte na tlačítko Instalovat.

Klepněte na tlačítko OK.

Ověřte, zda balíček obsahuje MailKit.

program

Následuje minimální kód pro odesílání e-mailů.

Definujete informace, které potřebujete pro své e-maily v první polovině kódu, a tyto hodnoty používáte k odesílání pošty ve druhé polovině. Druhou polovinu kódu byste měli být schopni používat pevným způsobem jednoduše změnou definice první poloviny podle potřeby.

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

Definování informací potřebných k odeslání e-mailu

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

Zde nastavíte různé hodnoty v závislosti na tom, který poštovní server (server SMTP) používáte. Rád bych vysvětlil několik hodnot, které nastavuji na konci tohoto článku, ale v podstatě viz web poštovního serveru.

Původně se píše v appsettigs.json atd., Ale je to pro předmísť, že se stává nadbytečným jako Tipy.

Definování obsahu e-mailu

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

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

Myslím, že tato část je odpovídající část, jak je, pokud běžně používáte mailery atd.

Vzhledem k tomu, že není k dispozici pro odesílání v přestrojení v nedávných poštovních systémech, v podstatě nastavíte stejnou e-mailovou adresu jako váš e-mailový účet.

TextFormat lze odeslat v textovém nebo HTML. Pokud ji odešlete v HTML, vložíte do části těla značky HTML.

Nastavení informací potřebných ke zpracování odesílání e-mailů

// 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;

V podstatě se jedná o formu nastavení výše definované hodnoty.

Můžete také nastavit více od a do.

Není zahrnuta do vzorku, ale může zahrnovat i CC a BCC. Pokud ji chcete zahrnout, přidejte ji stejným způsobem jako Od nebo Do následujícím způsobem:

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

Pokud je příjemce e-mailu podporován, můžete také změnit zobrazované jméno odesílatele nebo cíl. V takovém případě změňte kód takto:

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

Odeslat e-mail

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

Až skončíte s definováním e-mailu, skončíte s jeho odesíláním.

Odeslání SmtpClient se provádí v instanci třídy. Dispose Protože se using var jedná o cíl, je deklarován, aby mohl být automaticky uvolněn. Vzhledem k tomu, že se jedná o způsob psaní jazyka C# 8.0, změňte using prosím normální popis pro starší verze.

SmtpClient.Connect na server SMTP. Některé servery STMP vyžadují připojení SSL nebo TLS, ale SecureSocketOptions.Auto určení je obvykle v pořádku.

Pokud server SMTP vyžaduje ověření, SmtpClient.Authenticate zadejte do metody uživatelské jméno a heslo.

Po dokončení připojení SmtpClient.Send odešlete e-mail v metodě.

Když je vše hotovo, SmtpClient.Disconnect odpojte ji metodou.

Všimněte si, že všechny tyto tipy provádějí tyto operace jako synchronní operace, ale každá metoda může také provádět asynchronní zpracování pod názvem xxxxxAsync. Používejte podle potřeby.

Jak odesílat přílohy

Chcete-li MimeMessage.Body odeslat přílohu, změňte nastavenou hodnotu takto:

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

Ve výše uvedeném kódu je soubor uložený místně přílohou, ale data mohou být cokoli, protože to musí být pouze bajtové pole nebo datový proud. Odeslání souboru JPEG jako příkladu.

MimeMessage.Body Hodnota, kterou nastavíte BodyBuilder na sestavení jako .

Text textu TextPart se liší od aplikace a vlastnosti, na které je nastaven, se liší, ať už se jedná o text nebo html. Vezměte prosím na vědomí, že i když nastavíte obě, první nastavení bude vymazáno.

Příloha je BodyBuilder.Attachments přidána k vlastnosti. Argumenty jsou "název přílohy", "data přílohy" a "typ obsahu (MIME)".

Mějte na paměti, že přijímající strana nesmí identifikovat název přílohy, pokud nepřidáte rozšíření.

ContentType hodnota, na kterou jste nastavili, se bude lišit v závislosti na formátu souboru. Pokud vyhledáte na Internetu kolem "formátu souboru MIME", uvidíte kombinaci.

BodyBuilder.ToMessageBodyNakonec zavolejte metodu a nastavte ji na MimeMessage.Body .

Určení serveru SMTP

Server SMTP pro odesílání pošty má různá nastavení v závislosti na poštovním serveru, který používáte. Následuje příklad, takže pokud taková věc neexistuje, zkontrolujte prosím pomoc serveru, který používáte.

Vzhledem k tomu, že informace jsou k dubnu 2021, mohly se tyto informace v současné době změnit.

Ověřování portu serveru SMTP poštovní služby Pokud používáte dvoufázové ověřovací šifrování
Outlook.com Část 1 smtp.office365.com 587 Uživatelské jméno a heslo ?? STARTTLS
Outlook.com část 2 smtp-mail.outlook.com 587 Uživatelské jméno a heslo Získání hesla aplikace a jeho nastavení na heslo STARTTLS
Gmail smtp.gmail.com 465 (SSL) nebo 587 (TLS) Uživatelské jméno a heslo Získání hesla aplikace a jeho nastavení na heslo SSL nebo TLS nebo STARTTLS
Yahoo! Pošta smtp.mail.yahoo.co.jp 465 Uživatelské jméno a heslo ?? Neznámý typ
OCN smtp.ocn.ne.jp 465 Uživatelské jméno a heslo ?? SSL nebo TLS