Odosielanie e-mailov pomocou aplikácie MailKit

Dátum vytvorenia strany :

životné prostredie

.NET (Sieť)
  • .NET 5.0
MailKit (Poštový komit)
  • 2.11.1

najskôr

Predtým, smtpClient, trieda pre odosielanie e-mailov, bol zahrnutý ako štandard, ale teraz je zastaraný kvôli out-of-špecifikácie.

To znamená, že .NET nemá štandardnú poštovú knižnicu, takže budete používať knižnicu tretej strany.

V súčasnosti existuje "MailKit" ako bežná knižnica, takže by som chcel poslať e-mail pomocou tohto času.

Predstavujeme mailKit

Spustite Visual Studio 2019 a vytvorte nový projekt aplikácie konzoly (.NET). Ak používate .NET, budete mať nejakú slobodu v type projektu, takže budem vedieť podrobnosti.

Po otvorení projektu kliknite pravým tlačidlom myši na položku Závislosti v Prieskumníkovi riešení a vyberte položku Spravovať balíky NuGet.

Kliknite na kartu Prehľadávať a do vyhľadávacieho poľa zadajte výraz MailKit, aby sa mailKit zobrazil v zozname nižšie.

V zozname vyberte položku MailKit, overte, či je vybratá najnovšia verzia, a potom kliknite na tlačidlo Inštalovať.

Kliknite na tlačidlo OK.

Overte, či balík obsahuje MailKit.

program

Nasleduje minimálny kód pre odosielanie e-mailov.

Definujete informácie, ktoré potrebujete pre svoje e-maily v prvej polovici kódu, a tieto hodnoty použijete na odoslanie pošty v druhej polovici. Druhú polovicu kódu by ste mali mať možnosť používať pevným spôsobom jednoduchou zmenou definície prvej polovice podľa potreby.

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

Definovanie informácií potrebných na odoslanie e-mailu

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

Tu nastavíte rôzne hodnoty v závislosti od toho, ktorý poštový server (SMTP server) používate. Rád by som vysvetlil niekoľko hodnôt, ktoré nastavujem na konci tohto článku, ale v podstate sa mi zobrazí stránka môjho poštového servera.

Pôvodne je napísaná v appsettigs.json atď., ale je to predvídavosť, že sa stane nadbytočnou ako tipy.

Definovanie obsahu e-mailu

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

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

Myslím si, že táto časť je zodpovedajúca časť, ako je to, ak bežne používate poštov atď.

Keďže nie je k dispozícii na odosielanie v prestrojení v nedávnych poštových systémoch, v podstate nastavíte rovnakú e-mailovú adresu ako váš e-mailový účet.

TextFormat môžu byť odoslané v texte alebo HTML. Ak ho odošlete vo formáte HTML, vloženie značiek HTML do časti tela.

Nastavenie informácií potrebných na spracovanie odosielaných e-mailov

// 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 podstate je to forma nastavenia hodnoty definovanej vyššie.

Môžete tiež nastaviť viacero od a do.

Nie je zahrnutá vo vzorke, ale môže zahŕňať aj CC a Skrytú kópiu. Ak ho chcete zahrnúť, pridajte ho rovnakým spôsobom ako od alebo do takto:

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

Môžete tiež zmeniť zobrazované meno odosielateľa alebo cieľové miesto, ak je príjemca e-mailu podporovaný. V takom prípade zmeňte kód takto:

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

Odoslanie e-mailu

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

Po definovaní e-mailu ste ho už odovznie.

Podanie SmtpClient sa vykonáva v inštancii triedy. Dispose Pretože je using var to cieľ, je deklarovaný tak, aby sa mohol automaticky uvoľniť. Vzhľadom k tomu, že je to spôsob písania C# 8.0, prejdite na using normálny popis pre staršie verzie.

SmtpClient.Connect metódu na server SMTP. Niektoré servery STMP vyžadujú pripojenia SSL alebo TLS, ale SecureSocketOptions.Auto zadanie je zvyčajne v poriadku.

Ak server SMTP vyžaduje overenie, SmtpClient.Authenticate zadajte meno používateľa a heslo v metóde.

Po dokončení pripojenia SmtpClient.Send odošlite e-mail v metóde.

Keď je všetko hotové, SmtpClient.Disconnect odpojte ho metódou.

Všimnite si, že všetky tieto tipy vykonávať tieto operácie ako synchrónne operácie, ale každá metóda môže tiež vykonávať asynchrónne spracovanie pod názvom xxxxxAsync. Používajte podľa potreby.

Ako odosielať prílohy

Ak chcete odoslať MimeMessage.Body prílohu, zmeňte hodnotu nastavenú 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();

Vo vyššie uvedenom kóde je súbor uložený lokálne prílohou, ale údaje môžu byť čokoľvek, pretože to musí byť len bajtové pole alebo prúd. Odoslanie súboru JPEG ako príkladu.

MimeMessage.Body Hodnotu, ktorú nastavíte na BodyBuilder vytvorenie ako .

Základný text TextPart sa líši od a vlastnosti, na ktoré je nastavený, sa líšia, či už ide o text alebo HTML. Upozorňujeme, že aj keď nastavíte obe, prvé nastavenie sa vymaže.

Príloha sa BodyBuilder.Attachments pridá do vlastnosti. Argumenty sú "názov prílohy", "údaje prílohy" a "typ obsahu (MIME)".

Upozorňujeme, že prijímajúca strana nemusí identifikovať názov prílohy, pokiaľ nepridáte rozšírenie.

ContentType hodnota, na ktorú ste nastavili, sa bude líšiť v závislosti od formátu súboru. Ak vyhľadávate na internete okolo "formátu súboru MIME", uvidíte kombináciu.

BodyBuilder.ToMessageBodyNakoniec zavolajte metódu a nastavte ju na MimeMessage.Body .

Zadanie servera SMTP

Server SMTP na odosielanie pošty má rôzne nastavenia v závislosti od poštového servera, ktorý používate. Nasleduje príklad, takže ak nič také neexistuje, skontrolujte pomoc servera, ktorý používate.

Okrem toho, keďže informácie sú z apríla 2021, informácie sa v súčasnosti mohli zmeniť.

služby
Overenie portu servera SMTP poštovej Ak používate dvojstupňové overenie šifrovania
Outlook.com časť 1 smtp.office365.com 587 Meno používateľa a heslo ?? STARTTLS (ŠTARTTLS)
Outlook.com časť 2 smtp-mail.outlook.com 587 Meno používateľa a heslo Získanie hesla aplikácie a jeho nastavenie na heslo STARTTLS (ŠTARTTLS)
Gmail smtp.gmail.com 465(SSL) alebo 587(TLS) Meno používateľa a heslo Získanie hesla aplikácie a jeho nastavenie na heslo SSL alebo TLS alebo STARTTLS
Yahoo! Pošta smtp.mail.yahoo.co.jp 465 Meno používateľa a heslo ?? Neznámy typ
OCN (OCN) smtp.ocn.ne.jp 465 Meno používateľa a heslo ?? Protokol SSL alebo TLS