E-pasta ziņojumu sūtīšana, izmantojot MailKit

Lapas izveides datums :

vide

.NET (Net)
  • .NET 5.0
Pasta sūtījumsKit
  • 2.11.1

Sākumā

Iepriekš smtpClient, klase e-pasta ziņojumu sūtīšanai, tika iekļauta kā standarts, bet tagad ir novecojusi specifikāciju dēļ.

Tas nozīmē, ka .NET nav standarta pasta sūtījumu bibliotēkas, tāpēc izmantosiet trešās puses bibliotēku.

Pašlaik ir "MailKit" kā galvenā bibliotēka, tāpēc es vēlos nosūtīt e-pastu, izmantojot šo laiku.

Iepazīšanās ar MailKit

Palaidiet Visual Studio 2019 un izveidojiet jaunu konsoles programmas (.NET) projektu. Ja jūs izmantojat .NET, jums būs zināma brīvība projekta veidā, tāpēc es pare labi pārzināšu detaļas.

Atverot projektu, ar peles labo pogu noklikšķiniet uz Atkarības no risinājumu pārlūka un atlasiet Pārvaldīt NuGet pakotnes.

Noklikšķiniet uz cilnes Pārlūkot un meklēšanas laukā ierakstiet MailKit, lai zemāk redzamajā sarakstā parādītu MailKit.

Sarakstā atlasiet MailKit, pārbaudiet, vai ir atlasīta jaunākā versija, un pēc tam noklikšķiniet uz pogas Instalēt.

Noklikšķiniet uz pogas Labi.

Pārbaudiet, vai pakotnē ir MailKit.

programma

Tālāk norādīts minimālais kods e-pasta ziņojumu sūtīšanai.

Jūs definējat informāciju, kas nepieciešama jūsu e-pasta ziņojumiem koda pirmajā pusē, un izmantojat šīs vērtības, lai nosūtītu pastu otrajā pusē. Jums vajadzētu būt iespējai izmantot koda otro pusi fiksētā veidā, vienkārši mainot pirmās puses definīciju pēc vajadzības.

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

E-pasta ziņojuma nosūtīšanai nepieciešamās informācijas definēšanu

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

Šeit tiek iestatītas dažādas vērtības atkarībā no izmantotā pasta servera (SMTP servera). Es gribētu paskaidrot dažas vērtības, kuras es iestatu šī raksta beigās, bet būtībā redzēt mana pasta servera vietni.

Sākotnēji tas ir rakstīts appsettigs.json utt., bet tas ir pareģojums, ka tas kļūst lieks kā Tips.

E-pasta ziņojuma satura definēšana

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

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

Es domāju, ka šī daļa ir atbilstoša daļa, kā tas ir, ja jūs parasti izmantojat pasta sūtījumus utt.

Tā kā pēdējās pasta sistēmās nav iespējams nosūtīt maskējoties, būtībā jūs iestatīsiet tādu pašu e-pasta adresi kā jūsu e-pasta konts.

TextFormat var nosūtīt tekstā vai HTML formātā. Ja to nosūtāt HTML formātā, ieguliet html tagus pamatteksta daļā.

E-pasta ziņojumu sūtīšanai nepieciešamās informācijas iestatīšana

// 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ūtībā tas ir iepriekš definētās vērtības iestatīšanas veids.

Varat arī iestatīt vairākus vienumus No un Līdz.

Tas nav iekļauts izlasē, bet tajā var iekļaut arī CC un BCC. Ja vēlaties to iekļaut, pievienojiet to tāpat kā No vai Līdz šādi:

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

Varat arī mainīt sūtītāja vai adresāta parādāmo vārdu, ja e-pasta adresāts tiek atbalstīts. Šādā gadījumā mainiet kodu šādi:

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

Sūtīt e-pastu

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

Kad esat beidzis definēt savu e-pastu, esat beidzis to sūtīt.

Iesniegšana SmtpClient tiek veikta klases gadījumā. Dispose Tā kā using var tas ir mērķis, tas tiek deklarēts, lai to varētu izlaist automātiski. Tā kā tas ir veids, kā rakstīt C # 8.0, lūdzu, mainiet using uz parasto aprakstu iepriekšējām versijām.

SmtpClient.Connect metodi SMTP serverim . Dažiem STMP serveriem ir nepieciešami SSL vai TLS savienojumi, SecureSocketOptions.Auto bet norādīšana parasti ir laba.

Ja SMTP serveris pieprasa SmtpClient.Authenticate autentifikāciju, metodē norādiet lietotājvārdu un paroli.

Kad savienojums ir SmtpClient.Send pabeigts, nosūtiet e-pasta ziņojumu ar metodi.

Kad viss ir izdarīts, SmtpClient.Disconnect atvienojiet to ar metodi.

Ņemiet vērā, ka šie padomi visas veic šīs operācijas kā sinhronas operācijas, bet katra metode var veikt arī asinhronu apstrādi ar nosaukumu xxxxxAsync. Lietojiet pēc vajadzības.

Kā nosūtīt pielikumus

Lai nosūtītu MimeMessage.Body pielikumu, mainiet vērtību kopu uz šādu:

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

Iepriekšminētajā kodā lokāli saglabātais fails ir pielikums, bet dati var būt jebkas, jo tam ir jābūt tikai betātu masīvam vai straumei. JPEG faila nosūtīšana kā piemērs.

MimeMessage.Body Vērtība, kuru iestatīsiet BodyBuilder veidot kā .

Pamatteksts TextPart atšķiras no , un rekvizīti, uz kuriem tas ir iestatīts, atšķiras neatkarīgi no tā, vai tas ir teksts vai HTML. Lūdzu, ņemiet vērā, ka pat tad, ja iestatīsiet abus, pirmais iestatījums tiks izdzēsts.

Pielikums tiek BodyBuilder.Attachments pievienots rekvizītam. Argumenti ir "pielikuma nosaukums", "pielikuma dati" un "satura tips (MIME)".

Ņemiet vērā, ka saņēmēja puse nevar identificēt pielikuma nosaukumu, ja vien nepievienosiet paplašinājumu.

ContentType iestatītā vērtība atšķirsies atkarībā no faila formāta. Ja meklējat internetā ap "faila formātu MIME", jūs varēsiet redzēt kombināciju.

BodyBuilder.ToMessageBodyVisbeidzot, izsauciet metodi un iestatiet to MimeMessage.Body uz .

Par SMTP servera norādīšanu

Pasta sūtīšanas SMTP serverim ir atšķirīgi iestatījumi atkarībā no izmantotā pasta servera. Tālāk ir sniegts piemērs, tāpēc, ja šādas lietas nav, lūdzu, pārbaudiet jūsu lietotā servera palīdzību.

Turklāt, tā kā informācija ir no 2021. gada aprīļa, šobrīd informācija var būt mainījusies.

Pasta pakalpojuma SMTP servera porta autentifikācija Ja izmantojat divsoļu verifikācijas šifrēšanu
Outlook.com 1. daļa smtp.office365.com 587 Lietotājvārds un parole ?? SĀKUMALS (STARTTLS)
Outlook.com 2. daļa smtp-mail.outlook.com 587 Lietotājvārds un parole Lietotnes paroles iegūstšana un iestatīšana par paroli SĀKUMALS (STARTTLS)
Gmail (Gmail) smtp.gmail.com 465(SSL) vai 587(TLS) Lietotājvārds un parole Lietotnes paroles iegūstšana un iestatīšana par paroli SSL vai TLS, vai STARTTLS
Yahoo! Pasts smtp.mail.yahoo.co.jp 465 Lietotājvārds un parole ?? Nezināms tips
OCN (OCN) smtp.ocn.ne.jp 465 Lietotājvārds un parole ?? SSL vai TLS