Pošiljanje e-poštnih sporočil s programom MailKit

Datum ustvarjanja strani :

okolje

.NET
  • .NET 5.0
MailKit
  • 2.11.1

Sprva

Prej je bil smtpClient, razred za pošiljanje e-poštnih sporočil, vključen kot standarden, vendar je zdaj prikrajšan zaradi zunaj specifikacij.

To pomeni, da .NET nima standardne poštne knjižnice, zato boste uporabili knjižnico drugih ponudnikov.

Trenutno obstaja "MailKit" kot mainstream knjižnica, tako da bi rad poslal e-poštno sporočilo s tem časom.

Predstavitev MailKit

Zaženite Visual Studio 2019 in ustvarite nov projekt konzolne aplikacije (.NET). Če uporabljate .NET, boste imeli nekaj svobode v vrsti projekta, tako da bom vedel podrobnosti.

Ko odprete projekt, z desno tipko miške kliknite Odvisnosti iz Raziskovalca rešitev in izberite Upravljanje paketov NuGet.

Kliknite zavihek Prebrskaj in v iskalno polje vnesite MailKit, da prikažete MailKit na spodnjem seznamu.

Na seznamu izberite MailKit, preverite, ali je izbrana najnovejša različica in kliknite gumb Namesti.

Kliknite gumb V redu.

Preverite, ali paket vsebuje MailKit.

program

Sledi minimalna koda za pošiljanje e-poštnih sporočil.

Določite informacije, ki jih potrebujete za e-poštna sporočila v prvi polovici kode, in uporabite te vrednosti za pošiljanje pošte v drugi polovici. Drugo polovico kode bi morali uporabljati na fiksni način tako, da preprosto spremenite definicijo prve polovice, kot je potrebno.

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

Določanje informacij, ki so potrebne za pošiljanje e-poštnega sporočila

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

Tukaj nastavite različne vrednosti, odvisno od tega, kateri poštni strežnik (SMTP strežnik) uporabljate. Rad bi pojasnil nekaj vrednosti, ki jih postavljam na koncu tega članka, v bistvu pa si oglejte mesto mojega poštnega strežnika.

Prvotno je napisana v appsettigs.json, itd, vendar je predpostavka, da postane odveč kot Nasveti.

Določanje vsebine e-poštnega sporočila

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

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

Mislim, da je ta del ustrezen del, kot je, če običajno uporabljate mailerje itd.

Ker ni na voljo za pošiljanje od v prekrivnem v nedavnih poštnih sistemih, v bistvu boste nastavili isti e-poštni naslov kot vaš e-poštni račun.

TextFormat lahko pošljete v besedilu ali HTML. Če ga pošljete v HTML, v telo vdelajte html oznake.

Nastavitev informacij, ki so potrebne za obdelavo pošiljanja e-poštnih sporočil

// 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 bistvu gre za obliko določanja zgoraj opredeljene vrednosti.

Nastavite lahko tudi več od in do.

Ni vključen v vzorec, lahko pa vključuje tudi CC in BCC. Če ga želite vključiti, ga dodajte na enak način kot od ali Za, kot sledi:

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

Če je prejemnik e-poštnega sporočila podprt, lahko spremenite tudi prikazano ime pošiljatelja ali cilja. V tem primeru spremenite kodo na naslednji način:

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

Pošlji e-poš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);

Ko končate z določanjem e-pošte, ste končali s pošiljanjem.

Predložitev se opravi v SmtpClient primeru razreda. Ker je cilj, je prijavljen v tako, da se lahko sprosti Dispose using var samodejno. Ker gre za način pisanja C# 8.0, spremenite v običajen opis za starejše using različice.

SmtpClient.Connect na strežnik SMTP. Nekateri stmp strežniki zahtevajo SSL ali TLS povezave, vendar je določanje običajno SecureSocketOptions.Auto v redu.

Če strežnik SMTP zahteva preverjanje pristnosti, v metodi navedite uporabniško SmtpClient.Authenticate ime in geslo.

Ko je povezava SmtpClient.Send končana, pošljite e-poštno sporočilo v metodi.

Ko je vse narejeno, SmtpClient.Disconnect ga odklopite z metodo.

Upoštevajte, da ti nasveti izvajajo vse te operacije kot sinhrone operacije, vendar lahko vsaka metoda izvaja tudi asinkrono obdelavo pod imenom xxxxxAsync. Uporabite, kot je potrebno.

Pošiljanje prilog

Če želite poslati MimeMessage.Body prilogo, spremenite vrednost, nastavljeno na naslednje:

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

V zgornji kodi je lokalno shranjena datoteka priloga, vendar so podatki lahko karkoli, ker morajo biti le byte array ali Stream. Pošiljanje datoteke JPEG kot primer.

MimeMessage.Body Vrednost, ki ste jo nastavili BodyBuilder za izgradnjo kot .

Telo besedila se razlikuje od , in lastnosti, na katere je nastavljen, so različne, bodisi TextPart besedilo ali HTML. Upoštevajte, da tudi če nastavite oboje, bo prva nastavitev izbrisana.

Priloga je BodyBuilder.Attachments dodana v lastnost. Argumenti so »ime priloge«, »podatki o prilogi« in »vrsta vsebine (MIME)«.

Upoštevajte, da prejemnik morda ne bo identificiral imena priloge, razen če dodate razširitev.

ContentType vrednost, ki ste jo nastavili, se bo spreminjala glede na obliko datoteke. Če po internetu poiščete »format datoteke MIME«, boste lahko videli kombinacijo.

Na BodyBuilder.ToMessageBody koncu pokličite metodo in jo nastavite na MimeMessage.Body .

O določanju strežnika SMTP

Strežnik SMTP za pošiljanje pošte ima različne nastavitve glede na poštni strežnik, ki ga uporabljate. To je primer, zato če tega ni, preverite pomoč strežnika, ki ga uporabljate.

Ker so informacije od aprila 2021, so se informacije trenutno morda spremenile.

Preverjanje vrat poštne storitve uporabljate šifriranje preverjanja v dveh
pristnosti strežniškihSMTP Če korakih
Outlook.com del 1 smtp.office365.com 587 Uporabniško ime in geslo ?? STARTTLS
Outlook.com del 2 smtp-mail.outlook.com 587 Uporabniško ime in geslo Dobi geslo za aplikacijo in ga nastavi na geslo STARTTLS
Gmail smtp.gmail.com 465(SSL) ali 587(TLS) Uporabniško ime in geslo Dobi geslo za aplikacijo in ga nastavi na geslo SSL ali TLS ali STARTTLS
Yahoo! Mail smtp.mail.yahoo.co.jp 465 Uporabniško ime in geslo ?? Neznana vrsta
OCN smtp.ocn.ne.jp 465 Uporabniško ime in geslo ?? SSL ali TLS