Sähköpostien lähettäminen MailKitin avulla
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ä .
TextPart
Kehysteksti 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.ToMessageBody
Kutsu 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 |