Enviar correus electrònics amb el MailKit

Data de creació de la pàgina :

entorn

.NET
  • .NET 5.0
MailKit
  • 2.11.1

Al principi

Anteriorment, smtpClient, una classe per a l'enviament de correus electrònics, s'incloïa com a estàndard, però ara està obsoleta a causa de les especificacions no especificades.

Això vol dir que .NET no té una biblioteca de correu estàndard, de manera que utilitzareu una biblioteca de tercers.

Actualment, hi ha "MailKit" com a biblioteca principal, així que m'agradaria enviar un correu electrònic utilitzant aquest temps.

Introducció del MailKit

Inicieu el Visual Studio 2019 i creeu un nou projecte d'aplicació de consola (.NET). Si utilitzeu .NET, tindreu una mica de llibertat en el tipus de projecte, així que coneixeré els detalls.

Quan obriu el projecte, feu clic amb el botó dret del ratolí a Dependències de l'Explorador de solucions i seleccioneu Administra els paquets NuGet.

Feu clic a la pestanya Navega i escriviu MailKit al camp de cerca per visualitzar el MailKit a la llista següent.

Seleccioneu MailKit de la llista, comproveu que la versió més recent estigui seleccionada i feu clic al botó Instal·la.

Feu clic al botó D'acord.

Verifiqueu que el paquet contingui MailKit.

programa

A continuació es troba el codi mínim per a l'enviament de correus electrònics.

Definiu la informació que necessiteu per als vostres correus electrònics a la primera meitat del codi i utilitzeu aquests valors per enviar correu a la segona meitat. Hauríeu de ser capaços d'utilitzar la segona meitat del codi de manera fixa simplement canviant la definició de la primera meitat segons sigui necessari.

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

Definir la informació necessària per enviar un correu electrònic

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

Aquí és on definiu valors diferents en funció del servidor de correu (servidor SMTP) que utilitzeu. M'agradaria explicar alguns dels valors que estic establint al final d'aquest article, però bàsicament veure el lloc del meu servidor de correu.

Originalment, està escrit en appsettigs.json, etc., però és probable que es torni redundant com Consells.

Definir el contingut d'un correu electrònic

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

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

Crec que aquesta part és la part corresponent, ja que és si normalment utilitzeu mailers, etc.

Atès que no està disponible per enviar des de disfressa en sistemes de correu recents, bàsicament establireu la mateixa adreça de correu electrònic que el vostre compte de correu electrònic.

TextFormat es pot enviar en text o HTML. Si l'envieu en HTML, incrusteu etiquetes html a la part del cos.

Configurar la informació necessària per processar l'enviament de correus electrònics

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

Bàsicament, és una forma de definir el valor definit anteriorment.

També podeu definir diversos De i Per a.

No està inclosa en la mostra, però també pot incloure CC i CCC. Si voleu incloure-la, afegiu-la de la mateixa manera que De o A de la manera següent:

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

També podeu canviar el nom de visualització del remitent o de la destinació si el destinatari del correu electrònic és compatible. En aquest cas, canvieu el codi de la manera següent:

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

Enviar correu electrònic

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

Quan hàgiu acabat de definir el correu electrònic, l'heu acabat d'enviar.

La presentació SmtpClient es fa en una instància de la classe. Dispose Com using var que és l'objectiu, es declara perquè es pugui alliberar automàticament. Com que és una manera d'escriure C# 8.0, canvieu a la using descripció normal de les versions anteriors.

SmtpClient.Connect al servidor SMTP. Alguns servidors STMP requereixen connexions SSL o TLS, però SecureSocketOptions.Auto l'especificació sol estar bé.

Si el servidor SMTP requereix autenticació, SmtpClient.Authenticate especifiqueu un nom d'usuari i una contrasenya al mètode.

Quan s'hagi completat la SmtpClient.Send connexió, envieu un correu electrònic al mètode.

Quan tot estigui fet, SmtpClient.Disconnect desconnecta'l amb el mètode.

Tingueu en compte que tots aquests consells realitzen aquestes operacions com a operacions síncrones, però cada mètode també pot realitzar processament asíncron sota el nom xxxxxAsync. Utilitzeu-lo segons calgui.

Com enviar fitxers adjunts

Per enviar un MimeMessage.Body fitxer adjunt, canvieu el valor definit de la manera següent:

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

En el codi anterior, el fitxer emmagatzemat localment és un fitxer adjunt, però les dades poden ser qualsevol cosa perquè només ha de ser una matriu de bytes o una seqüència. Enviament d'un fitxer JPEG com a exemple.

MimeMessage.Body El valor que heu definit com a BodyBuilder .

El text del cos TextPart difereix del i les propietats a les quals està definit són diferents, ja siguin text o HTML. Tingueu en compte que, fins i tot si establiu ambdues, la primera opció s'esborrarà.

El fitxer adjunt BodyBuilder.Attachments s'afegeix a la propietat. Els arguments són "nom del fitxer adjunt", "dades adjuntes" i "tipus de contingut (MIME)".

Tingueu en compte que és possible que la part receptora no identifiqui el nom del fitxer adjunt tret que afegiu una extensió.

ContentType el valor al qual esteu definiu variarà en funció del format de fitxer. Si cerqueu a Internet al voltant del "format de fitxer MIME", podreu veure la combinació.

BodyBuilder.ToMessageBodyFinalment, truqueu al mètode i establiu-lo al MimeMessage.Body .

Quant a l'especificació d'un servidor SMTP

El servidor SMTP per a l'enviament de correu té una configuració diferent en funció del servidor de correu que utilitzeu. El següent és un exemple, de manera que si no hi ha tal cosa, comproveu l'ajuda del servidor que esteu utilitzant.

A més, atès que la informació és a partir d'abril de 2021, la informació pot haver canviat en l'actualitat.

servei correu el de verificació passos
Autenticació del port del servidor SMTP deldeSi utilitzeuxifratgeen dos
Outlook.com Part 1 smtp.office365.com 587 Nom d'usuari i contrasenya ?? STARTTLS
Outlook.com Part 2 smtp-mail.outlook.com 587 Nom d'usuari i contrasenya Obtenir la contrasenya de l'aplicació i definir-la com a contrasenya STARTTLS
Gmail smtp.gmail.com 465(SSL) o 587(TLS) Nom d'usuari i contrasenya Obtenir la contrasenya de l'aplicació i definir-la com a contrasenya SSL o TLS o STARTTLS
Yahoo! Correu smtp.mail.yahoo.co.jp 465 Nom d'usuari i contrasenya ?? Tipus desconegut
OCN smtp.ocn.ne.jp 465 Nom d'usuari i contrasenya ?? SSL o TLS