E-mails verzenden met MailKit

Aanmaakdatum van pagina :

milieu

.NET
  • .NET 5.0
MailKit
  • 2.11.1

eerst

Voorheen werd smtpClient, een klasse voor het verzenden van e-mails, standaard opgenomen, maar is nu afgeschaft vanwege niet-specificaties.

Dit betekent dat .NET geen standaard mailingbibliotheek heeft, dus u gebruikt een bibliotheek van derden.

Momenteel is er "MailKit" als een reguliere bibliotheek, dus ik wil deze keer een e-mail sturen.

Maak kennis met MailKit

Start Visual Studio 2019 en maak een nieuw console-appproject (.NET). Als je .NET gebruikt, heb je wat vrijheid in het projecttype, dus ik zal de details voor-kennen.

Wanneer u het project opent, klikt u met de rechtermuisknop op Afhankelijkheden uit Solution Explorer en selecteert u NuGet-pakketten beheren.

Klik op het tabblad Bladeren en typ MailKit in het zoekveld om MailKit in de onderstaande lijst weer te geven.

Selecteer MailKit in de lijst, controleer of de nieuwste versie is geselecteerd en klik vervolgens op de knop Installeren.

Klik op de knop OK.

Controleer of het pakket MailKit bevat.

programma

Hieronder volgt de minimale code voor het verzenden van e-mails.

U definieert de informatie die u nodig hebt voor uw e-mails in de eerste helft van uw code en gebruikt deze waarden om e-mail in de tweede helft te verzenden. U moet de tweede helft van de code op een vaste manier kunnen gebruiken door simpelweg de definitie van de eerste helft naar behoefte te wijzigen.

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

Definieer de informatie die nodig is om een e-mail te verzenden

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

Hier stelt u verschillende waarden in, afhankelijk van de e-mailserver (SMTP-server) die u gebruikt. Ik wil graag een paar van de waarden uitleggen die ik aan het einde van dit artikel stel, maar in feite de site van mijn e-mailserver bekijken.

Oorspronkelijk is het geschreven in appsettigs.json, enz., maar het is voorbeschouwd dat het overbodig wordt als Tips.

De inhoud van een e-mail definiëren

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

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

Ik denk dat dit deel het overeenkomstige deel is zoals het is als je normaal mailers etc. gebruikt.

Omdat het niet beschikbaar is om vermomd te verzenden in recente e-mailsystemen, stelt u in principe hetzelfde e-mailadres in als uw e-mailaccount.

TextFormat kan worden verzonden in tekst of HTML. Als u het in HTML verzendt, sluit u html-tags in het hoofdgedeelte in.

De informatie instellen die nodig is om het verzenden van e-mails te verwerken

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

Kortom, het is een vorm van het instellen van de hierboven gedefinieerde waarde.

U kunt ook meerdere van en naar instellen.

Het is niet opgenomen in het monster, maar het kan ook CC en BCC bevatten. Als u het wilt opnemen, voegt u het als volgt toe als Van of Aan:

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

U kunt ook de weergavenaam van de afzender of bestemming wijzigen als de ontvanger van de e-mail wordt ondersteund. Wijzig in dat geval de code als volgt:

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

E-mail verzenden

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

Als u klaar bent met het definiëren van uw e-mail, bent u klaar met het verzenden ervan.

Inzending SmtpClient gebeurt in een instantie van de klas. Dispose Omdat het using var het doel is, wordt het gedeclareerd zodat het automatisch kan worden vrijgegeven. Aangezien het een manier is om C # 8.0 te schrijven, kunt u overschakelen naar de using normale beschrijving voor eerdere versies.

SmtpClient.Connect naar de SMTP-server. Sommige STMP-servers vereisen SSL- of TLS-verbindingen, maar SecureSocketOptions.Auto opgeven is meestal prima.

Als de SMTP-server verificatie vereist, SmtpClient.Authenticate geeft u een gebruikersnaam en wachtwoord op in de methode.

Wanneer de verbinding is SmtpClient.Send voltooid, verzendt u een e-mail in de methode.

Wanneer alles klaar is, SmtpClient.Disconnect koppelt u het los met de methode.

Houd er rekening mee dat deze tips al deze bewerkingen uitvoeren als synchrone bewerkingen, maar dat elke methode ook asynchrone verwerking kan uitvoeren onder de naam xxxxxAsync. Gebruik indien nodig.

Bijlagen verzenden

Als u een MimeMessage.Body bijlage wilt verzenden, wijzigt u de ingestelde waarde als volgt:

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

In de bovenstaande code is het bestand dat lokaal is opgeslagen een bijlage, maar de gegevens kunnen van alles zijn omdat het alleen een bytearray of stream hoeft te zijn. Een JPEG-bestand verzenden als voorbeeld.

MimeMessage.Body De waarde die u instelt om te BodyBuilder bouwen als .

Hoofdtekst TextPart verschilt van en de eigenschappen waaraan deze is ingesteld, verschillen, of het nu tekst of HTML is. Houd er rekening mee dat zelfs als u beide instelt, de eerste instelling wordt gewist.

De bijlage wordt BodyBuilder.Attachments aan de eigenschap toegevoegd. De argumenten zijn "bijlagenaam", "bijlagegegevens" en "inhoudstype (MIME)".

Houd er rekening mee dat de naam van de bijlage mogelijk niet wordt geïdentificeerd door de ontvangende partij, tenzij u een extensie toevoegt.

ContentType de waarde die u instelt, is afhankelijk van de bestandsindeling. Als u op internet zoekt rond de "bestandsformaat MIME", ziet u de combinatie.

BodyBuilder.ToMessageBodyRoep ten slotte de methode aan en stel deze in op MimeMessage.Body .

Informatie over het opgeven van een SMTP-server

De SMTP-server voor het verzenden van e-mail heeft verschillende instellingen, afhankelijk van de e-mailserver die u gebruikt. Het volgende is een voorbeeld, dus als er niet zoiets bestaat, controleer dan de hulp van de server die u gebruikt.

Aangezien de informatie vanaf april 2021 is, kan de informatie op dit moment zijn gewijzigd.

gebruikt
Smtp-serverpoortverificatie van e-mailservice Als u verificatieversleuteling in twee stappen
Outlook.com deel 1 smtp.office365.com 587 Gebruikersnaam en wachtwoord ?? STARTTLS
Outlook.com deel 2 smtp-mail.outlook.com 587 Gebruikersnaam en wachtwoord App-wachtwoord kregen en instellen op wachtwoord STARTTLS
Gmail smtp.gmail.com 465(SSL) of 587(TLS) Gebruikersnaam en wachtwoord App-wachtwoord kregen en instellen op wachtwoord SSL of TLS of STARTTLS
Yahoo! E-mail smtp.mail.yahoo.co.jp 465 Gebruikersnaam en wachtwoord ?? Onbekend type
OCN smtp.ocn.ne.jp 465 Gebruikersnaam en wachtwoord ?? SSL of TLS