Senden von E-Mails mit MailKit

Erstellungsdatum der Seite :

Umgebung

.NET
  • .NET 5,0
MailKit
  • 2.11.1

Zunächst

Früher war smtpClient, eine Klasse zum Senden von E-Mails, standardmäßig enthalten, ist aber jetzt aufgrund von Out-of-Specifications veraltet.

Dies bedeutet, dass .NET nicht über eine Standard-Mailingbibliothek verfügt, sodass Sie eine Bibliothek eines Drittanbieters verwenden.

Derzeit gibt es "MailKit" als Mainstream-Bibliothek, also möchte ich dieses Mal eine E-Mail senden.

Einführung in MailKit

Starten Sie Visual Studio 2019, und erstellen Sie ein neues Konsolen-App-Projekt (.NET). Wenn Sie .NET verwenden, haben Sie einige Freiheiten im Projekttyp, sodass ich die Details kennen werde.

Wenn Sie das Projekt öffnen, klicken Sie mit der rechten Maustaste auf Abhängigkeiten im Projektmappen-Explorer, und wählen Sie NuGet-Pakete verwalten aus.

Klicken Sie auf die Registerkarte Durchsuchen, und geben Sie MailKit in das Suchfeld ein, um MailKit in der Liste unten anzuzeigen.

Wählen Sie MailKit aus der Liste aus, überprüfen Sie, ob die neueste Version ausgewählt ist, und klicken Sie dann auf die Schaltfläche Installieren.

Klicken Sie auf die Schaltfläche OK.

Stellen Sie sicher, dass das Paket MailKit enthält.

Programm

Im Folgenden finden Sie den Mindestcode für das Senden von E-Mails.

Sie definieren die Informationen, die Sie für Ihre E-Mails benötigen, in der ersten Hälfte Ihres Codes und verwenden diese Werte, um E-Mails in der zweiten Hälfte zu senden. Sie sollten in der Lage sein, die zweite Hälfte des Codes auf eine feste Weise zu verwenden, indem Sie einfach die Definition der ersten Hälfte nach Bedarf ändern.

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

Definieren der Informationen, die zum Senden einer E-Mail erforderlich sind

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

Hier legen Sie unterschiedliche Werte fest, je nachdem, welchen Mailserver (SMTP-Server) Sie verwenden. Ich möchte einige der Werte erklären, die ich am Ende dieses Artikels feststelle, aber im Grunde die Website meines Mailservers sehen.

Ursprünglich wurde es in appsettigs.json usw. geschrieben, aber es ist vor allem, wenn es als Tipps redundant wird.

Definieren des Inhalts einer E-Mail

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

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

Ich denke, dass dieser Teil der entsprechende Teil ist, wie es ist, wenn Sie normalerweise Mailer usw. verwenden.

Da es nicht verfügbar ist, von in den letzten Mail-Systemen getarnt zu senden, werden Sie im Grunde die gleiche E-Mail-Adresse wie Ihr E-Mail-Konto festlegen.

TextFormat kann in Text oder HTML gesendet werden. Wenn Sie es in HTML senden, betten Sie HTML-Tags in den Textteil ein.

Einrichten der Informationen, die zum Verarbeiten des Sendens von E-Mails erforderlich sind

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

Grundsätzlich handelt es sich um eine Form der Festlegung des oben definierten Wertes.

Sie können auch mehrere Von- und Bis festlegen.

Es ist nicht in der Stichprobe enthalten, aber es kann auch CC und BCC enthalten. Wenn Sie es wie folgt einschließen möchten:

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

Sie können auch den Anzeigenamen des Absenders oder Ziels ändern, wenn der Empfänger der E-Mail unterstützt wird. Ändern Sie in diesem Fall den Code wie folgt:

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

E-Mail senden

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

Wenn Sie mit dem Definieren Ihrer E-Mail fertig sind, sind Sie damit fertig, sie zu senden.

Die Übermittlung SmtpClient erfolgt in einer Instanz der Klasse. Dispose Da es using var das Ziel ist, wird es deklariert, so dass es automatisch freigegeben werden kann. Da es sich um eine Möglichkeit handelt, C-8.0 zu schreiben, ändern Sie bitte die using normale Beschreibung für frühere Versionen.

SmtpClient.Connect Methode an den SMTP-Server. Einige STMP-Server erfordern SSL- oder TLS-Verbindungen, aber die SecureSocketOptions.Auto Angabe ist in der Regel in Ordnung.

Wenn der SMTP-Server eine Authentifizierung erfordert, SmtpClient.Authenticate geben Sie einen Benutzernamen und ein Kennwort in der Methode an.

Wenn die Verbindung SmtpClient.Send abgeschlossen ist, senden Sie eine E-Mail in der Methode.

Wenn alles fertig ist, SmtpClient.Disconnect trennen Sie es mit der Methode.

Beachten Sie, dass diese Tipps alle diese Vorgänge als synchrone Vorgänge ausführen, aber jede Methode kann auch asynchrone Verarbeitung unter dem Namen xxxxxAsync durchführen. Nach Bedarf verwenden.

So senden Sie Anlagen

Um eine Anlage zu MimeMessage.Body senden, ändern Sie den Wert wie folgt:

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

Im obigen Code ist die lokal gespeicherte Datei eine Anlage, aber die Daten können alles sein, da es sich nur um ein Bytearray oder einen Stream handelt. Senden einer JPEG-Datei als Beispiel.

MimeMessage.Body Der Wert, den Sie BodyBuilder als erstellen möchten.

Der Textkörper TextPart unterscheidet sich von , und die Eigenschaften, auf die er festgelegt ist, unterscheiden sich, ob Text oder HTML. Bitte beachten Sie, dass selbst wenn Sie beides festlegen, die erste Einstellung löscht wird.

Die Anlage wird BodyBuilder.Attachments der Eigenschaft hinzugefügt. Die Argumente sind "Anlagenname", "Anhängedaten" und "Inhaltstyp (MIME)".

Beachten Sie, dass der Name der Anlage von der empfangenden Partei möglicherweise nicht identifiziert wird, es sei denn, Sie fügen eine Erweiterung hinzu.

ContentType Der Wert, auf den Sie gesetzt haben, hängt vom Dateiformat ab. Wenn Sie im Internet nach dem "Dateiformat MIME" suchen, können Sie die Kombination sehen.

BodyBuilder.ToMessageBodyRufen Sie schließlich die Methode auf, und legen Sie sie auf MimeMessage.Body .

Informationen zum Angeben eines SMTP-Servers

Der SMTP-Server zum Senden von E-Mails hat je nach verwendeter Mailserver unterschiedliche Einstellungen. Das folgende ist ein Beispiel, also, wenn es nicht so etwas gibt, überprüfen Sie bitte die Hilfe des Servers, den Sie verwenden.

Da die Informationen ab April 2021 vorliegen, können sich die Informationen derzeit geändert haben.

E-Mail-Dienst SMTP-Serverportauthentifizierung Wenn Sie eine zweistufige Verifizierungsverschlüsselung verwenden
Outlook.com Teil 1 smtp.office365.com 587 Benutzername und Kennwort ?? Starttls
Outlook.com Teil 2 smtp-mail.outlook.com 587 Benutzername und Kennwort App-Kennwort abrufen und auf Kennwort festlegen Starttls
Google mail smtp.gmail.com 465(SSL) oder 587(TLS) Benutzername und Kennwort App-Kennwort abrufen und auf Kennwort festlegen SSL oder TLS oder STARTTLS
Yahoo! Mail smtp.mail.yahoo.co.jp 465 Benutzername und Kennwort ?? Unbekannter Typ
Ocn smtp.ocn.ne.jp 465 Benutzername und Kennwort ?? SSL oder TLS