Sähköpostien lähettäminen MailKitin avulla

Sivun luontipäivämäärä :

ympäristö

.NET-sivusto
  • .NET 5.0
MailKit-paketin avulla
  • 2.11.1

alun perin

Aiemmin smtpClient, sähköpostien lähetysluokka, sisällytettiin vakiona, mutta se on nyt vanhentunut määritysten vuoksi.

Tämä tarkoittaa, että .NET:llä ei ole tavallista postituskirjastoa, joten käytät kolmannen osapuolen kirjastoa.

Tällä hetkellä "MailKit" on valtavirran kirjasto, joten haluaisin lähettää sähköpostia tällä kertaa.

Esittelyssä MailKit

Käynnistä Visual Studio 2019 ja luo uusi konsolisovellusprojekti (.NET). Jos käytät .NET-tiedostoa, sinulla on jonkin verran vapautta projektityypissä, joten kerron yksityiskohdat.

Kun avaat projektin, napsauta Hiiren kakkospainikkeella Riippuvuudet Ratkaisunhallinnasta ja valitse NuGet-pakettien hallinta.

Napsauta Selaa-välilehteä ja kirjoita Hakukenttään MailKit, jos haluat näyttää MailKitin alla olevassa luettelossa.

Valitse luettelosta MailKit, varmista, että uusin versio on valittuna, ja napsauta sitten Asenna-painiketta.

Napsauta OK-painiketta.

Varmista, että paketti sisältää MailKitin.

ohjelma

Seuraava on sähköpostien lähettämisen vähimmäiskoodi.

Määrität sähköposteihin tarvitsemasi tiedot koodin ensimmäisellä puoliskolla ja käytät näitä arvoja postin lähettämiseen toisella puoliskolla. Koodin toista puoliskoa pitäisi voida käyttää kiinteästi yksinkertaisesti muuttamalla ensimmäisen puoliskon määritelmää tarpeen mukaan.

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

Sähköpostin lähettämiseen tarvittavien tietojen määrittäminen

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

Tässä voit määrittää eri arvot sen mukaan, mitä sähköpostipalvelinta (SMTP-palvelinta) käytät. Haluaisin selittää muutamia arvoja, jotka asetan tämän artikkelin lopussa, mutta periaatteessa nähdä sähköpostipalvelimeni sivuston.

Alun perin se on kirjoitettu appsettigs.json jne., mutta se on niin kauan kuin se tulee tarpeettomaksi tipeinä.

Sähköpostin sisällön määrittäminen

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

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

Mielestäni tämä osa on vastaava osa, koska se on, jos käytät yleensä postittajia jne.

Koska sitä ei voi lähettää valepuvussa viimeaikaisissa postijärjestelmissä, asetat periaatteessa saman sähköpostiosoitteen kuin sähköpostitilisi.

TextFormat voidaan lähettää tekstinä tai HTML-muodossa. Jos lähetät sen HTML-muodossa, upota html-tunnisteet ruumiiseen osaan.

Sähköpostien lähettämiseen tarvittavien tietojen määrittäminen

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

Pohjimmiltaan se on edellä määritellyn arvon asetusmuoto.

Voit myös määrittää useita From- ja To-nä- määrittää.

Se ei sisälly otokseen, mutta se voi sisältää myös CC:n ja BCC:n. Jos haluat sisällyttää sen, lisää se samalla tavalla kuin From tai To seuraavasti:

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

Voit myös muuttaa lähettäjän tai kohteen näyttönimeä, jos sähköpostin vastaanottajaa tuetaan. Muuta tässä tapauksessa koodi seuraavasti:

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

Lähetä sähköpostia

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

Kun olet määrittänyt sähköpostisi, olet lähettänyt sen.

Lähetys SmtpClient tehdään luokan esiintymässä. Dispose Koska se using var on kohde, se on määritetty sisään, jotta se voidaan vapauttaa automaattisesti. Koska se on tapa kirjoittaa C# 8.0, vaihda aiempien using versioiden normaaliin kuvaukseen.

SmtpClient.Connect smtp-palvelimeen. Jotkin STMP-palvelimet edellyttävät SSL- tai TLS-yhteyksiä, SecureSocketOptions.Auto mutta määrittäminen on yleensä hienoa.

Jos SMTP-palvelin edellyttää SmtpClient.Authenticate todennusta, määritä käyttäjänimi ja salasana menetelmässä.

Kun yhteys on SmtpClient.Send valmis, lähetä sähköpostia -menetelmällä.

Kun kaikki on tehty, SmtpClient.Disconnect irrota se menetelmällä.

Huomaa, että kaikki nämä vinkit suorittavat nämä toiminnot synkronina toimintona, mutta jokainen menetelmä voi suorittaa asynkronisen käsittelyn myös nimellä xxxxxAsync. Käytä tarpeen mukaan.

Liitteiden lähettäminen

Jos haluat lähettää MimeMessage.Body liitteen, muuta arvoksi seuraavasti:

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

Yllä olevassa koodissa paikallisesti tallennettu tiedosto on liitetiedosto, mutta tiedot voivat olla mitä tahansa, koska niiden on oltava vain tavutaulukko tai Stream. Esimerkiksi JPEG-tiedoston lähettäminen.

MimeMessage.Body Arvo, jonka määrität BodyBuilder rakennettavaksi nimellä .

TextPartKehysteksti eroaa -stä, ja ominaisuudet, joihin se on määritetty, eroavat toisistaan, olivatpa ne tekstiä tai HTML-koodia. Huomaa, että vaikka asettaisit molemmat, ensimmäinen asetus poistetaan.

Liite BodyBuilder.Attachments lisätään omaisuuteen. Argumentit ovat "liitteen nimi", "liitetiedot" ja "sisältötyyppi (MIME)".

Huomaa, että vastaanottava osapuoli ei välttämättä tunnista liitteen nimeä, ellet lisää laajennusta.

ContentType arvo, jonka olet määrittänyt, vaihtelee tiedostomuodon mukaan. Jos etsit Internetistä "tiedostomuodon MIME" ympärillä, näet yhdistelmän.

BodyBuilder.ToMessageBodyKutsu lopuksi menetelmää ja aseta sen arvoksi MimeMessage.Body .

Tietoja SMTP-palvelimen määrittäminen

Sähköpostin lähettämiseen käytettävällä SMTP-palvelimella on eri asetukset käytettävän sähköpostipalvelimen mukaan. Seuraava on esimerkki, joten jos tällaista ei ole, tarkista käyttämästäsi palvelimesta.

Lisäksi, koska tiedot ovat huhtikuusta 2021, tiedot ovat saattaneet muuttua tällä hetkellä.

Sähköpostipalvelun SMTP-palvelinportin todennus Jos käytät kaksivaiheista vahvistussalausa
Outlook.com osa 1 smtp.office365.com 587 Käyttäjänimi ja salasana ?? STARTTLS-YTE:t
Outlook.com osa 2 smtp-mail.outlook.com 587 Käyttäjänimi ja salasana Hanki sovelluksen salasana ja aseta se salasanaksi STARTTLS-YTE:t
Gmail-palvelu smtp.gmail.com 465(SSL) tai 587(TLS) Käyttäjänimi ja salasana Hanki sovelluksen salasana ja aseta se salasanaksi SSL tai TLS tai STARTTLS
Yahoo! Posti smtp.mail.yahoo.co.jp 465 Käyttäjänimi ja salasana ?? Tuntematon tyyppi
OCN smtp.ocn.ne.jp 465 Käyttäjänimi ja salasana ?? SSL tai TLS