Envoyer des e-mails à l’aide de MailKit

Date de création de la page :

environnement

.NET (en)
  • .NET 5,0
MailKit (en)
  • 2.11.1

au début

Auparavant, smtpClient, une classe pour l’envoi de courriels, a été inclus comme norme, mais est maintenant déprécié en raison de hors spécifications.

Cela signifie que .NET n’a pas de bibliothèque de diffusion standard, de sorte que vous utiliserez une bibliothèque tierce.

Actuellement, il ya « MailKit » comme une bibliothèque grand public, donc je voudrais envoyer un e-mail en utilisant cette fois.

Présentation de MailKit

Lancez Visual Studio 2019 et créez un nouveau projet d’application console (.NET). Si vous utilisez .NET, vous aurez une certaine liberté dans le type de projet, donc je vais pré-connaître les détails.

Lorsque vous ouvrez le projet, cliquez à droite dépendances de Solution Explorer et sélectionnez Gérer les paquets NuGet.

Cliquez sur l’onglet Parcourir et taper MailKit dans le champ de recherche pour afficher MailKit dans la liste ci-dessous.

Sélectionnez MailKit dans la liste, vérifiez que la dernière version est sélectionnée, puis cliquez sur le bouton Installer.

Cliquez sur le bouton OK.

Vérifiez que le paquet contient MailKit.

programme

Ce qui suit est le code minimum pour l’envoi d’e-mails.

Vous définissez les informations dont vous avez besoin pour vos e-mails à la première moitié de votre code, et utilisez ces valeurs pour envoyer du courrier dans la seconde moitié. Vous devriez être en mesure d’utiliser la deuxième moitié du code d’une manière fixe en changeant simplement la définition de la première moitié au besoin.

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

Définir les informations nécessaires pour envoyer un e-mail

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

C’est là que vous définissez différentes valeurs en fonction du serveur de messagerie (serveur SMTP) que vous utilisez. Je voudrais expliquer quelques-unes des valeurs que je suis mise à la fin de cet article, mais essentiellement voir le site de mon serveur de messagerie.

À l’origine, il est écrit dans appsettigs.json, etc, mais il est avant coup qu’il devient redondant comme Conseils.

Définir le contenu d’un e-mail

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

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

Je pense que cette partie est la partie correspondante comme il est si vous utilisez normalement des expéditeurs, etc.

Comme il n’est pas disponible pour envoyer de déguisé dans les systèmes de messagerie récents, fondamentalement, vous définirez la même adresse e-mail que votre compte de messagerie.

TextFormat peuvent être envoyés en texte ou HTML. Si vous l’envoyez en HTML, intégriez des balises html dans la partie du corps.

Configurer les informations nécessaires au traitement de l’envoi de courriels

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

Fondamentalement, il s’agit d’une forme de réglage de la valeur définie ci-dessus.

Vous pouvez également définir plusieurs de et vers.

Il n’est pas inclus dans l’échantillon, mais il peut également inclure cc et BCC. Si vous souhaitez l’inclure, ajoutez-le de la même manière que From or To comme suit :

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

Vous pouvez également modifier le nom d’affichage de l’expéditeur ou de la destination si le destinataire de l’e-mail est pris en charge. Dans ce cas, modifiez le code comme suit :

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

Envoyer un e-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);

Lorsque vous avez terminé de définir votre e-mail, vous avez fini de l’envoyer.

La soumission SmtpClient se fait dans un cas de la classe. Dispose Parce que using var c’est la cible, il est déclaré afin qu’il puisse être libéré automatiquement. Comme il s’agit d’une façon d’écrire C # 8.0, s’il vous plaît passer à using la description normale pour les versions antérieures.

SmtpClient.Connect méthode au serveur SMTP. Certains serveurs STMP nécessitent des connexions SSL ou TLS, mais SecureSocketOptions.Auto spécifier est généralement très bien.

Si le serveur SMTP nécessite une authentification, SmtpClient.Authenticate spécifiez un nom d’utilisateur et un mot de passe dans la méthode.

Lorsque la connexion est SmtpClient.Send terminée, envoyez un e-mail dans la méthode.

Lorsque tout est fait, SmtpClient.Disconnect déconnectez-le avec la méthode.

Notez que ces conseils effectuent tous ces opérations comme des opérations synchrones, mais chaque méthode peut également effectuer un traitement asynchrone sous le nom xxxxxAsync. Utilisez-le au besoin.

Comment envoyer des pièces jointes

Pour envoyer une MimeMessage.Body pièce jointe, modifiez la valeur définie comme suit :

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

Dans le code ci-dessus, le fichier stocké localement est une pièce jointe, mais les données peuvent être n’importe quoi parce qu’il ne doit être qu’un réseau d’au-delà ou stream. Envoi d’un fichier JPEG à titre d’exemple.

MimeMessage.Body La valeur que vous définissez BodyBuilder pour construire comme .

Le texte TextPart du corps diffère de, et les propriétés auxquelles il est défini sont différentes, qu’il s’agisse de texte ou html. Veuillez noter que même si vous définissez les deux, le premier paramètre sera effacé.

La pièce jointe BodyBuilder.Attachments est ajoutée à la propriété. Les arguments sont « nom de pièce jointe », « données de pièce jointe » et « type de contenu (MIME) ».

Notez que le nom de la pièce jointe ne peut pas être identifié par la partie qui reçoit à moins d’ajouter une extension.

ContentType la valeur que vous définissez varie en fonction du format du fichier. Si vous recherchez sur Internet autour du « format de fichier MIME », vous serez peut voir la combinaison.

BodyBuilder.ToMessageBodyEnfin, appelez la méthode et réglez-la à MimeMessage.Body .

À propos de la spécifier un serveur SMTP

Le serveur SMTP pour l’envoi de courrier a des paramètres différents selon le serveur de messagerie que vous utilisez. Ce qui suit est un exemple, donc s’il n’y a pas une telle chose, s’il vous plaît vérifier l’aide du serveur que vous utilisez.

De plus, comme l’information est en avril 2021, l’information a peut-être changé à l’heure actuelle.

le
Authentification du port serveur SMTP de service postal Si vous utilisezchiffrement de vérification en deux étapes
Outlook.com partie 1 smtp.office365.com 587 Nom d’utilisateur et mot de passe ?? STARTTLS (starttls)
Outlook.com partie 2 smtp-mail.outlook.com 587 Nom d’utilisateur et mot de passe Obtenez le mot de passe de l’application et définissez-le sur mot de passe STARTTLS (starttls)
Gmail (Gmail) smtp.gmail.com 465 (SSL) ou 587 (TLS) Nom d’utilisateur et mot de passe Obtenez le mot de passe de l’application et définissez-le sur mot de passe SSL ou TLS ou STARTTLS
Yahoo! Courrier smtp.mail.yahoo.co.jp 465 Nom d’utilisateur et mot de passe ?? Type inconnu
OCN (OCN) smtp.ocn.ne.jp 465 Nom d’utilisateur et mot de passe ?? SSL ou TLS