Send e-mails ved hjælp af MailKit

Dato for oprettelse af side :

miljø

.NET
  • .NET 5.0
MailKit
  • 2.11.1

først

Tidligere var smtpClient, en klasse til afsendelse af e-mails, inkluderet som standard, men frarådes nu på grund af specifikationer, der ikke er omfattet af specifikationerne.

Det betyder, at .NET ikke har et standardpostbibliotek, så du skal bruge et tredjepartsbibliotek.

I øjeblikket er der "MailKit" som et mainstream-bibliotek, så jeg vil gerne sende en e-mail ved hjælp af denne tid.

Introduktion til MailKit

Start Visual Studio 2019, og opret et nyt konsolappprojekt (.NET). Hvis du bruger .NET, har du en vis frihed i projekttypen, så jeg kender derfor detaljerne.

Når du åbner projektet, skal du højreklikke på Afhængigheder fra Solution Explorer og vælge Administrer NuGet-pakker.

Klik på fanen Gennemse, og skriv MailKit i søgefeltet for at få vist MailKit på listen nedenfor.

Vælg MailKit på listen, kontroller, at den nyeste version er valgt, og klik derefter på knappen Installer.

Klik på knappen OK.

Kontroller, at pakken indeholder MailKit.

program

Følgende er den mindste kode til afsendelse af e-mails.

Du definerer de oplysninger, du har brug for dine e-mails i første halvdel af din kode, og bruger disse værdier til at sende e-mail i anden halvdel. Du bør være i stand til at bruge den anden halvdel af koden på en fast måde ved blot at ændre definitionen af den første halvdel efter behov.

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

Definere de oplysninger, der er nødvendige for at sende en mail

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

Det er her, du angiver forskellige værdier, afhængigt af hvilken e-mail-server (SMTP-server) du bruger. Jeg vil gerne forklare et par af de værdier, jeg indstilling i slutningen af denne artikel, men dybest set se det sted, hvor min mail-server.

Oprindeligt er det skrevet i appsettigs.json, osv., men det er omtanke det bliver overflødigt som Tips.

Definere indholdet af en mail

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

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

Jeg tror, at denne del er den tilsvarende del, som det er, hvis du normalt bruger afsendere osv.

Da det ikke er tilgængeligt at sende fra i forklædning i de seneste mail-systemer, dybest set vil du indstille den samme e-mail-adresse som din e-mail-konto.

TextFormat kan sendes i tekst eller HTML. Hvis du sender den i HTML, skal du integrere html-koder i brødteksten.

Konfigurer de oplysninger, der er nødvendige for at behandle afsendelse af mails

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

Dybest set er det en form for indstilling af den værdi, der er defineret ovenfor.

Du kan også indstille flere fra og til.

Det er ikke inkluderet i prøven, men det kan også omfatte CC og BCC. Hvis du vil medtage den, skal du tilføje den på samme måde som Fra eller Til på følgende måde:

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

Du kan også ændre afsenderens eller destinationens viste navn, hvis modtageren af e-mailen understøttes. I så fald skal koden ændres på følgende måde:

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

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

Når du er færdig med at definere din e-mail, er du færdig med at sende den.

Indsendelse SmtpClient sker i en forekomst af klassen. Dispose Fordi det using var er målet, erklæres det, så det kan frigives automatisk. Da det er en måde at skrive C # 8,0, skal du skifte til den using normale beskrivelse for tidligere versioner.

SmtpClient.Connect til SMTP-serveren. Nogle STMP-servere kræver SSL- eller TLS-forbindelser, men SecureSocketOptions.Auto det er normalt fint at angive dem.

Hvis SMTP-serveren kræver godkendelse, SmtpClient.Authenticate skal du angive et brugernavn og en adgangskode i metoden.

Når forbindelsen er SmtpClient.Send færdig, skal du sende en e-mail i metoden.

Når alt er gjort, SmtpClient.Disconnect skal du afbryde det med metoden.

Bemærk, at disse tip alle udfører disse handlinger som synkrone handlinger, men hver metode kan også udføre asynkron behandling under navnet xxxxxAsync. Brug efter behov.

Sådan sendes vedhæftede filer

Hvis du vil sende en MimeMessage.Body vedhæftet fil, skal du ændre den værdi, der er angivet til, på følgende måde:

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

I ovenstående kode er den fil, der er gemt lokalt, en vedhæftet fil, men dataene kan være alt, fordi de kun skal være en bytematrix eller stream. Sender en JPEG-fil som et eksempel.

MimeMessage.Body Den værdi, du angiver til at BodyBuilder bygge som .

TextPartBrødteksten adskiller sig fra , og de egenskaber, den er angivet til, er forskellige, uanset om det er tekst eller HTML. Bemærk, at selvom du indstiller begge, slettes den første indstilling.

Den vedhæftede fil BodyBuilder.Attachments føjes til egenskaben. Argumenterne er "navn på vedhæftede filer", "vedhæftede data" og "indholdstype (MIME)".

Bemærk, at navnet på den vedhæftede fil muligvis ikke identificeres af den modtagende part, medmindre du tilføjer et filtypenavn.

ContentType Den værdi, du angiver til, varierer afhængigt af filformatet. Hvis du søger på internettet omkring "filformat MIME", vil du blive kan se kombinationen.

BodyBuilder.ToMessageBodyTil sidst skal du kalde metoden og indstille den til MimeMessage.Body .

Om at angive en SMTP-server

SMTP-serveren til afsendelse af e-mail har forskellige indstillinger, afhængigt af hvilken postserver du bruger. Følgende er et eksempel, så hvis der ikke er sådan noget, skal du kontrollere hjælpen fra den server, du bruger.

Da oplysningerne er fra april 2021, kan oplysningerne desuden have ændret sig på nuværende tidspunkt.

bruger
Godkendelse af MAIL-tjeneste SMTP-serverport Hvis dutotrinsbekræftelseskryptering
Outlook.com del 1 smtp.office365.com 587 Brugernavn og adgangskode ?? STARTTLS
Outlook.com del 2 smtp-mail.outlook.com 587 Brugernavn og adgangskode Hent appadgangskode, og angiv den til adgangskode STARTTLS
Gmail smtp.gmail.com 465(SSL) eller 587(TLS) Brugernavn og adgangskode Hent appadgangskode, og angiv den til adgangskode SSL eller TLS eller STARTTLS
Yahoo! Mail smtp.mail.yahoo.co.jp 465 Brugernavn og adgangskode ?? Ukendt type
OCN smtp.ocn.ne.jp 465 Brugernavn og adgangskode ?? SSL eller TLS