E-mailek küldése a MailKit használatával

Oldal létrehozásának dátuma :

környezet

.NET
  • .NET 5.0
MailKit
  • 2.11.1

először

Korábban az smtpClient, az e-mailek küldésének osztálya volt a standard, de most elavult a specifikációkon kívüliek miatt.

Ez azt jelenti, hogy a .NET nem rendelkezik szabványos levelezőkönyvtárral, ezért harmadik féltől származó könyvtárat fog használni.

Jelenleg a "MailKit" mint mainstream könyvtár létezik, ezért szeretnék e-mailt küldeni ez alkalommal.

Bemutatkozik a MailKit

Indítsa el a Visual Studio 2019-et, és hozzon létre egy új konzolalkalmazást (.NET). Ha .NET-et használ, akkor a projekt típusában lesz némi szabadsága, ezért előre ismerem a részleteket.

A projekt megnyitásakor kattintson a jobb gombbal a Megoldáskezelő Függőségek parancsára, és válassza a NuGet csomagok kezelése lehetőséget.

Kattintson a Tallózás fülre, és írja be a MailKit-et a keresőmezőbe, hogy megjelenítse a MailKit-et az alábbi listában.

Válassza a MailKit lehetőséget a listából, ellenőrizze, hogy a legújabb verzió van-e kiválasztva, majd kattintson a Telepítés gombra.

Kattintson az OK gombra.

Ellenőrizze, hogy a csomag tartalmazza-e a MailKit-et.

program

Az alábbiakban az e-mailek küldésének minimális kódja található.

A kód első felében határozza meg az e-mailjeihez szükséges információkat, és ezeket az értékeket használja a levelek küldésére a második felében. Képesnek kell lennie arra, hogy a kód második felét rögzített módon használja, egyszerűen megváltoztatva az első felének meghatározását, ha szükséges.

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

Az e-mail küldéséhez szükséges adatok megadása

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

Itt állíthat be különböző értékeket attól függően, hogy melyik levelezőkiszolgálót (SMTP-kiszolgálót) használja. Szeretnék elmagyarázni néhány értéket, amit a cikk végén beállítok, de alapvetően lásd a levelezőszerverem webhelyét.

Eredetileg appsettigs.json stb.

E-mail tartalmának meghatározása

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

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

Úgy gondolom, hogy ez a rész a megfelelő rész, mivel általában levelezőket használ stb.

Mivel a legutóbbi levelezőrendszerekben nem érhető el álruhában küldeni, alapvetően ugyanazt az e-mail címet fogja beállítani, mint az e-mail fiókja.

TextFormat szövegesen vagy HTML-ben is elküldhető. Ha HTML-ben küldi el, beágyazza a HTML-címkéket a testrészbe.

Az e-mailek küldéséhez szükséges információk beállítása

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

Alapvetően ez a fent meghatározott érték beállításának egyik formája.

Több Be és Be is állíthatja.

Nem szerepel a mintában, de magában foglalhatja a CC-t és a BCC-t is. Ha be szeretné vonni, adja hozzá ugyanúgy, mint a From vagy a To az alábbiak szerint:

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

Módosíthatja a feladó vagy a rendeltetési hely megjelenítését is, ha az e-mail címzettje támogatott. Ebben az esetben módosítsa a kódot az alábbiak szerint:

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

E-mail küldése

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

Ha végezte az e-mail definiálásán, kész a küldés.

A beküldés SmtpClient az osztály egy példányában történik. Dispose Mivel using var ez a cél, azt be kell jelenteni, hogy automatikusan felszabadulhat. Mivel ez egy módja annak, hogy írjon C # 8.0, kérjük, változtassa meg a using szokásos leírást a korábbi verziók.

SmtpClient.Connect módszer az SMTP-kiszolgálóra. Egyes STMP-kiszolgálók SSL- vagy TLS-kapcsolatokat igényelnek, de SecureSocketOptions.Auto a megadás általában rendben van.

Ha az SMTP-kiszolgáló hitelesítést igényel, SmtpClient.Authenticate adjon meg egy felhasználónevet és jelszót a módszerben.

Ha a kapcsolat SmtpClient.Send befejeződött, küldjön egy e-mailt a módszerről.

Ha minden kész, SmtpClient.Disconnect húzza ki a módszerrel.

Ne feledje, hogy ezek a tippek mind szinkronműveletként hajtják végre ezeket a műveleteket, de minden módszer xxxxxAsync néven is végezhet aszinkron feldolgozást. Szükség szerint használja.

Mellékletek küldése

Melléklet elküldéséhez MimeMessage.Body módosítsa a beállított értéket a következőképpen:

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

A fenti kódban a helyben tárolt fájl melléklet, de az adatok bármi lehetnek, mert csak byte tömbnek vagy adatfolyamnak kell lennie. JPEG-fájl küldése példaként.

MimeMessage.Body Az az érték, amely a következőképpen BodyBuilder van beállítva.

A szövegtörzs TextPart különbözik a szövegtől , és a beállítás tulajdonságai eltérőek, legyen az szöveg vagy HTML. Kérjük, vegye figyelembe, hogy még ha mindkettőt beállította is, az első beállítás törlődik.

A melléklet BodyBuilder.Attachments hozzáadódik a tulajdonsághoz. Az argumentumok a "attachment name", a "attachment data" és a "content type (MIME)".

Ne feledje, hogy a melléklet nevét az átvevő fél nem azonosíthatja, kivéve, ha hosszabbítást ad hozzá.

ContentType a beállított érték a fájlformátumtól függően változik. Ha az interneten a "MIME fájlformátum" körül keres, láthatja a kombinációt.

BodyBuilder.ToMessageBodyVégül hívja fel a módszert, és állítsa be MimeMessage.Body .

SMTP-kiszolgáló megadása

A levélküldés SMTP-kiszolgálója a használt levelezőkiszolgálótól függően különböző beállításokkal rendelkezik. Az alábbiakban egy példa, így ha nincs ilyen dolog, kérjük, ellenőrizze a segítséget a szerveren használ.

Ezenkívül, mivel az információ 2021 áprilisában van, az információ jelenleg változhatott.

használ
Levelezőszolgáltatás SMTP-kiszolgálóport-hitelesítése Ha kétlépcsős ellenőrző titkosítást
Outlook.com 1. rész smtp.office365.com 587 Felhasználónév és jelszó ?? STARTTLS
Outlook.com 2. rész smtp-mail.outlook.com 587 Felhasználónév és jelszó Alkalmazásjelszó beszerzése és jelszóra beállítása STARTTLS
Gmail smtp.gmail.com 465(SSL) vagy 587(TLS) Felhasználónév és jelszó Alkalmazásjelszó beszerzése és jelszóra beállítása SSL vagy TLS vagy STARTTLS
Yahoo! Mail smtp.mail.yahoo.co.jp 465 Felhasználónév és jelszó ?? Ismeretlen típus
OCN smtp.ocn.ne.jp 465 Felhasználónév és jelszó ?? SSL vagy TLS