Skicka e-post med MailKit

Datum för skapande av sida :

miljö

.NET (på alla)
  • .NET 5,0
MailKit (e-post)
  • 2.11.1

först

Tidigare inkluderades smtpClient, en klass för att skicka e-postmeddelanden, som standard, men är nu inaktuell på grund av out-of-specifications.

Det innebär att .NET inte har något vanligt utskicksbibliotek, så du kommer att använda ett bibliotek från tredje part.

För närvarande finns det "MailKit" som ett vanligt bibliotek, så jag skulle vilja skicka ett e-postmeddelande med den här tiden.

Vi presenterar MailKit

Starta Visual Studio 2019 och skapa ett nytt konsolappsprojekt (.NET). Om du använder .NET har du viss frihet i projekttypen, så jag förgrundsbeser dig till detaljerna.

När du öppnar projektet högerklickar du på Beroenden från Solution Explorer och väljer Hantera nuget-paket.

Klicka på fliken Bläddra och skriv MailKit i sökfältet för att visa MailKit i listan nedan.

Välj MailKit i listan, kontrollera att den senaste versionen är markerad och klicka sedan på knappen Installera.

Klicka på ok-knappen.

Kontrollera att paketet innehåller MailKit.

program

Följande är minimikoden för att skicka e-postmeddelanden.

Du definierar den information du behöver för dina e-postmeddelanden under den första halvan av koden och använder dessa värden för att skicka e-post under andra halvåret. Du bör kunna använda den andra halvan av koden på ett fast sätt genom att helt enkelt ändra definitionen av den första halvleken efter behov.

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

Definiera den information som behövs för att skicka ett e-postmeddelande

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

Här anger du olika värden beroende på vilken e-postserver (SMTP-server) du använder. Jag vill förklara några av de värden jag anger i slutet av den här artikeln, men i princip se webbplatsen för min e-postserver.

Ursprungligen är det skrivet i appsettigs.json, etc., men det är försynt att det blir överflödigt som Tips.

Definiera innehållet i ett e-postmeddelande

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

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

Jag tror att denna del är motsvarande del som den är om du normalt använder mailers etc.

Eftersom det inte är tillgängligt att skicka från förklädd i de senaste e-postsystemen, kommer du i princip att ställa in samma e-postadress som ditt e-postkonto.

TextFormat kan skickas i text eller HTML. Om du skickar den i HTML bäddar du in html-taggar i brödtextdelen.

Konfigurera den information som behövs för att behandla e-postmeddelanden

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

I grund och botten är det en form av att ställa in värdet som definieras ovan.

Du kan också ställa in flera Från och Till.

Det ingår inte i provet, men det kan också inkludera CC och BCC. Om du vill inkludera det lägger du till det på samma sätt som Från eller Till enligt följande:

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

Du kan också ändra visningsnamnet för avsändaren eller målet om mottagaren av e-postmeddelandet stöds. Ändra i så fall koden på följande sätt:

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

Skicka e-post

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

När du är klar med att definiera din e-post är du klar med att skicka den.

Inlämning SmtpClient sker i en instans av klassen. Dispose Eftersom using var det är målet deklareras det i så att det kan släppas automatiskt. Eftersom det är ett sätt att skriva C # 8.0, vänligen ändra till den using normala beskrivningen för tidigare versioner.

SmtpClient.Connect metoden till SMTP-servern. Vissa STMP-servrar kräver SSL- eller TLS-anslutningar, SecureSocketOptions.Auto men det går vanligtvis bra att ange.

Om SMTP-servern kräver SmtpClient.Authenticate autentisering anger du ett användarnamn och lösenord i metoden.

När anslutningen är klar SmtpClient.Send skickar du ett e-postmeddelande i metoden.

När allt är klart, SmtpClient.Disconnect koppla bort det med metoden.

Observera att detta tips alla utför dessa åtgärder som synkrona åtgärder, men varje metod kan också utföra asynkron bearbetning under namnet xxxxxAsync. Använd efter behov.

Så här skickar du bifogade filer

Om du vill skicka MimeMessage.Body en bifogad fil ändrar du värdet till följande:

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

I koden ovan är filen som lagras lokalt en bifogad fil, men data kan vara vad som helst eftersom det bara behöver vara en bytematris eller Stream. Skicka en JPEG-fil som ett exempel.

MimeMessage.Body Värdet du anger ska BodyBuilder byggas som .

Brödtext TextPart skiljer sig från och egenskaperna som den är inställd på är olika, oavsett om det gäller text eller HTML. Observera att även om du ställer in båda raderas den första inställningen.

Den bifogade BodyBuilder.Attachments filen läggs till i egenskapen. Argumenten är "bifogat namn", "bifogade data" och "innehållstyp (MIME)".

Observera att namnet på den bifogade filen kanske inte identifieras av den mottagande parten om du inte lägger till ett tillägg.

ContentType Värdet du anger varierar beroende på filformatet. Om du söker på Internet runt "filformatet MIME" kan du se kombinationen.

BodyBuilder.ToMessageBodySlutligen anropar du metoden och ställer in den på MimeMessage.Body .

Om att ange en SMTP-server

SMTP-servern för att skicka e-post har olika inställningar beroende på vilken e-postserver du använder. Följande är ett exempel, så om det inte finns något sådant, vänligen kontrollera hjälpen på servern du använder.

Eftersom informationen är från och med april 2021 kan informationen dessutom ha ändrats för närvarande.

Autentisering av SMTP-serverport för e-posttjänst Om du använder tvåstegsverifieringskryptering
Outlook.com del 1 smtp.office365.com 587 Användarnamn och lösenord ?? STARTTLS (STARTTLS)
Outlook.com del 2 smtp-mail.outlook.com 587 Användarnamn och lösenord Hämta applösenord och ställ in det på lösenord STARTTLS (STARTTLS)
Gmail (gmail) smtp.gmail.com 465 (SSL) eller 587(TLS) Användarnamn och lösenord Hämta applösenord och ställ in det på lösenord SSL eller TLS eller STARTTLS
Yahoo, skicka post smtp.mail.yahoo.co.jp 465 Användarnamn och lösenord ?? Okänd typ
OCN (ocn) smtp.ocn.ne.jp 465 Användarnamn och lösenord ?? SSL eller TLS