Meilisõnumite saatmine MailKiti abil

Lehe loomise kuupäev :

keskkond

.NET
  • .NET 5.0
MailKit
  • 2.11.1

Alguses

Varem lisati smtpClient, e-kirjade saatmise klass, standardiks, kuid on nüüd aegunud spetsifikatsioonide tõttu.

See tähendab, et .NET-il pole standardset postitusteeki, seega kasutate mõne muu tootja teeki.

Praegu on peavoolu teegina "MailKit", nii et ma tahaksin saata e-kirja, kasutades seda aega.

MailKiti tutvustus

Käivitage Visual Studio 2019 ja looge uus konsooli rakenduse (.NET) projekt. Kui kasutate .NET-i, on teil projekti tüübis vabadus, nii et ma tean üksikasju.

Projekti avamisel paremklõpsake Solution Exploreris sõltuvusi ja valige Käsk Halda NuGeti pakette.

MailKiti kuvamiseks allolevas loendis klõpsake vahekaarti Sirvi ja tippige otsinguväljale mailKit.

Valige loendist MailKit, veenduge, et valitud on uusim versioon, ja seejärel klõpsake nuppu Installi.

Klõpsake nuppu OK.

Veenduge, et pakett sisaldab MailKit.

programm

Järgnev on e-kirjade saatmise miinimumkood.

Määratlete koodi esimesel poolel oma e-kirjade jaoks vajaliku teabe ja kasutate neid väärtusi teisel poolel meilisõnumite saatmiseks. Koodi teist poolt peaks olema võimalik kasutada kindlal viisil, muutes lihtsalt esimese poole määratlust vastavalt vajadusele.

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

Meilisõnumi saatmiseks vajaliku teabe määratlemine

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

Siin saate määrata erinevad väärtused sõltuvalt sellest, millist meiliserverit (SMTP-serverit) kasutate. Tahaksin selgitada mõningaid väärtusi, mida ma selle artikli lõpus sean, kuid põhimõtteliselt vaadake minu meiliserveri saiti.

Algselt on see kirjutatud rakendustes appsettigs.json jne, kuid see on ette nähtud, kuigi see muutub üleliigseks kui Näpunäited.

Meilisõnumi sisu määratlemine

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

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

Ma arvan, et see osa on vastav osa, nagu see on siis, kui te tavaliselt kasutate postitajaid jne.

Kuna hiljutistes meilisüsteemides ei ole võimalik varjatult saata, määrate põhimõtteliselt oma e-posti kontoga sama e-posti aadressi.

TextFormat saab saata teksti või HTML-ina. Kui saadate selle HTML-vormingus, manustage HTML-sildid kehaosasse.

Saate häälestada meilisõnumite saatmiseks vajalikku teavet.

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

Põhimõtteliselt on see eespool määratletud väärtuse seadmise vorm.

Samuti saate määrata mitu alates ja kuni.

See ei sisaldu valimis, kuid võib hõlmata ka cc ja BCC. Kui soovite selle kaasata, lisage see samamoodi nagu alates või Kuni järgmiselt.

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

Kui meilisõnumi adressaati toetatakse, saate muuta ka saatja või sihtkoha kuvatavat nime. Sellisel juhul muutke koodi järgmiselt:

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

Saada e-kiri

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

Kui olete meilisõnumi määratlemise lõpetanud, olete selle saatmise lõpetanud.

Esitamine SmtpClient toimub klassi eksemplaris. Dispose Kuna see using var on sihtmärk, deklareeritakse see nii, et seda saab automaatselt vabastada. Kuna see on c# 8.0 kirjutamise viis, muutke using varasemate versioonide tavalist kirjeldust.

SmtpClient.Connect SMTP-serverisse. Mõned STMP-serverid vajavad SSL- või TLS-ühendusi, kuid SecureSocketOptions.Auto määramine on tavaliselt hea.

Kui SMTP-server nõuab autentimist, SmtpClient.Authenticate määrake meetodis kasutajanimi ja parool.

Kui ühendus on SmtpClient.Send lõpule jõudnud, saatke meetodis meilisõnum.

Kui kõik on tehtud, SmtpClient.Disconnect ühendage see meetodiga lahti.

Pange tähele, et kõik need näpunäited sooritavad neid toiminguid sünkroonsete toimingutena, kuid iga meetod võib teha ka asünkroonset töötlemist nime xxxxxAsync all. Kasutage vastavalt vajadusele.

Manuste saatmine

Manuse saatmiseks MimeMessage.Body muutke seatud väärtuseks järgmiselt:

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

Ülaltoodud koodis on kohalikult talletatud fail manus, kuid andmed võivad olla mis iganes, kuna see peab olema ainult byte array või Stream. JPEG-faili saatmine näitena.

MimeMessage.Body Väärtus, mille määrasite BodyBuilder loomiseks väärtusena .

TextPartKehatekst erineb väärtusest ja atribuudid, millele see on seatud, on erinevad (kas tekst või HTML). Pange tähele, et isegi kui seate mõlemad, kustutatakse esimene säte.

Manus BodyBuilder.Attachments lisatakse atribuudile. Argumendid on "manuse nimi", "manuse andmed" ja "sisutüüp (MIME)".

Pange tähele, et vastuvõttev pool ei pruugi manuse nime tuvastada, kui te ei lisa laiendust.

ContentType teie seatud väärtus sõltub failivormingust. Kui otsite Internetist "failivormingu MIME" ümber, näete kombinatsiooni.

BodyBuilder.ToMessageBodyLõpuks helistage meetodile ja seadke see MimeMessage.Body .

SMTP-serveri määramine

Meilisõnumite saatmise SMTP-serveril on erinevad sätted sõltuvalt kasutatavast meiliserverist. Järgnev on näide, nii et kui sellist asja ei ole, kontrollige teie serveri abi.

Kuna teave on esitatud alates 2021. aasta aprillist, võib teave olla praegu muutunud.

kasutate
Meiliteenuse SMTP-serveri pordi autentimine Kuikaheastmelist kinnituskrüptimist
Outlook.com 1. osa smtp.office365.com 587 Kasutajanimi ja parool ?? STARTTLID
Outlook.com 2. osa smtp-mail.outlook.com 587 Kasutajanimi ja parool Hankige rakenduse parool ja seadke see parooliks STARTTLID
Gmail smtp.gmail.com 465(SSL) või 587(TLS) Kasutajanimi ja parool Hankige rakenduse parool ja seadke see parooliks SSL või TLS või STARTTLS
Yahoo! e-post smtp.mail.yahoo.co.jp 465 Kasutajanimi ja parool ?? Tundmatu tüüp
OCN smtp.ocn.ne.jp 465 Kasutajanimi ja parool ?? SSL või TLS