Trimiterea e-mailurilor utilizând MailKit

Data creării paginii :

mediu

.NET
  • .NET 5,0
MailKit
  • 2.11.1

La început

Anterior, smtpClient, o clasă pentru trimiterea de e-mailuri, a fost inclusă ca standard, dar acum este învechită din cauza specificațiilor învechite.

Aceasta înseamnă că .NET nu are o bibliotecă de corespondență standard, deci veți utiliza o bibliotecă terță parte.

În prezent, există "MailKit" ca bibliotecă mainstream, așa că aș dori să trimit un e-mail folosind acest timp.

Vă prezentăm MailKit

Lansați Visual Studio 2019 și creați un nou proiect de aplicație consolă (.NET). Dacă utilizați .NET, veți avea o anumită libertate în tipul de proiect, așa că voi cunoaște detaliile.

Când deschideți proiectul, faceți clic cu butonul din dreapta pe Dependențe din Exploratorul de soluții și selectați Gestionare pachete NuGet.

Faceți clic pe fila Răsfoire și tastați MailKit în câmpul de căutare pentru a afișa MailKit în lista de mai jos.

Selectați MailKit din listă, verificați dacă este selectată cea mai recentă versiune, apoi faceți clic pe butonul Instalare.

Faceți clic pe butonul OK.

Verificați dacă pachetul conține MailKit.

program

Următorul este codul minim pentru trimiterea e-mailurilor.

Definiți informațiile de care aveți nevoie pentru e-mailurile dvs., în prima jumătate a codului, și utilizați aceste valori pentru a trimite e-mailuri în a doua jumătate. Ar trebui să puteți utiliza a doua jumătate a codului într-un mod fix prin simpla schimbare a definiției primei jumătăți, după este necesar.

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

Definirea informațiilor necesare pentru trimiterea unui e-mail

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

Aici setați valori diferite în funcție de serverul de e-mail (server SMTP) pe care îl utilizați. Aș dori să explice câteva dintre valorile sunt setarea la sfârșitul acestui articol, dar practic a se vedea site-ul serverului meu de mail.

Inițial, este scris în appsettigs.json etc., dar este mai înainte de a deveni redundant ca Sfaturi.

Definirea conținutului unui e-mail

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

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

Cred că această parte este partea corespunzătoare, așa este, dacă utilizați în mod normal, mailers etc

Deoarece nu este disponibil pentru a trimite de la deghizat în sistemele de e-mail recente, practic va seta aceeași adresă de e-mail ca contul de e-mail.

TextFormat pot fi trimise în text sau HTML. Dacă îl trimiteți în HTML, încorporați etichete html în partea corpului.

Configurarea informațiilor necesare pentru procesarea trimiterii e-mailurilor

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

Practic, este o formă de setare a valorii definite mai sus.

De asemenea, puteți seta mai multe de la și de la.

Nu este inclus în eșantion, dar poate include și CC și CC. Dacă doriți să îl includeți, adăugați-l în același mod ca de la sau la, după urmează:

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

De asemenea, puteți modifica numele afișat al expeditorului sau al destinației dacă destinatarul e-mailului este acceptat. În acest caz, modificați codul după urmează:

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

Trimiterea e-mailului

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

Când ați terminat de definit e-mailul, ați terminat de trimis.

Depunerea se SmtpClient face într-o instanță a clasei. Dispose Deoarece using var este ținta, este declarată astfel încât să poată fi eliberată automat. Deoarece este un mod de a scrie C # 8.0, vă rugăm să treceți la using descrierea normală pentru versiunile anterioare.

SmtpClient.Connect la serverul SMTP. Unele servere STMP necesită conexiuni SSL sau TLS, dar SecureSocketOptions.Auto specificarea este de obicei în regulă.

Dacă serverul SMTP necesită autentificare, SmtpClient.Authenticate specificați un nume de utilizator și o parolă în metodă.

Când conexiunea este SmtpClient.Send finalizată, trimiteți un e-mail în metodă.

Când totul este făcut, SmtpClient.Disconnect deconectați-l cu metoda.

Rețineți că toate aceste sfaturi efectuează aceste operațiuni ca operațiuni sincrone, dar fiecare metodă poate efectua, de asemenea, procesare asincronă sub numele xxxxxAsync. Utilizați după este necesar.

se trimit atașările

Pentru a trimite o MimeMessage.Body atașare, modificați valoarea setată după urmează:

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

În codul de mai sus, fișierul stocat local este o atașare, dar datele pot fi orice, deoarece trebuie să fie doar o matrice octet sau flux. Trimiterea unui fișier JPEG ca exemplu.

MimeMessage.Body Valoarea pe care ați setat-o să BodyBuilder se construiască ca .

Textul corpului TextPart diferă de , iar proprietățile la care este setat sunt diferite, indiferent dacă este text sau HTML. Vă rugăm să rețineți că, chiar dacă le setați pe ambele, prima setare va fi ștearsă.

Atașarea este BodyBuilder.Attachments adăugată la proprietate. Argumentele sunt "nume atașare", "date atașare" și "tip de conținut (MIME)".

Rețineți că numele atașării nu poate fi identificat de partea destinatară decât dacă adăugați o extensie.

ContentType valoarea setată va varia în funcție de formatul de fișier. Dacă căutați pe Internet în jurul "formatului de fișier MIME", veți putea vedea combinația.

BodyBuilder.ToMessageBodyÎn cele din urmă, apelați metoda și setați-o la MimeMessage.Body .

Despre specificarea unui server SMTP

Serverul SMTP pentru trimiterea corespondenței are setări diferite în funcție de serverul de e-mail pe care îl utilizați. Următorul este un exemplu, deci dacă nu există un astfel de lucru, vă rugăm să verificați ajutorul serverului pe care îl utilizați.

În plus, întrucât informațiile sunt din aprilie 2021, este posibil ca informațiile să se fi modificat în prezent.

Autentificare port Dacă
server SMTP serviciu de poștă electronică utilizați criptarea verificării în doi pași
Outlook.com partea 1 smtp.office365.com 587 Numele de utilizator și parola ?? STARTTL-URI
Outlook.com partea 2 smtp-mail.outlook.com 587 Numele de utilizator și parola Obțineți parola aplicației și setați-o la parolă STARTTL-URI
Gmail smtp.gmail.com 465(SSL) sau 587(TLS) Numele de utilizator și parola Obțineți parola aplicației și setați-o la parolă SSL sau TLS sau STARTTLS
Yahoo! Mail smtp.mail.yahoo.co.jp 465 Numele de utilizator și parola ?? Tip necunoscut
OCN smtp.ocn.ne.jp 465 Numele de utilizator și parola ?? SSL sau TLS