Siųsti el. laiškus naudojant MailKit
Aplinkos
- .NET
-
- .NET 5,0
- MailKit
-
- 2.11.1
Iš pradžių
Anksčiau smtpClient, el. laiškų siuntimo klasė, buvo įtraukta kaip standartinė, tačiau dabar yra pasenusi dėl specifikacijų.
Tai reiškia, kad .NET neturi standartinės adresų bibliotekos, todėl naudosite trečiosios šalies biblioteką.
Šiuo metu yra "MailKit" kaip pagrindinės bibliotekos, todėl norėčiau siųsti laišką naudojant šį kartą.
Pristatome MailKit
Paleiskite "Visual Studio 2019" ir sukurkite naują konsolės programos (.NET) projektą. Jei naudojate .NET, projekto tipe turėsite šiek tiek laisvės, todėl iš anksto žinosiu išsamią informaciją.
Atidarę projektą dešiniuoju pelės mygtuku spustelėkite priklausomybes iš sprendimų naršyklės ir pasirinkite Tvarkyti NuGet paketus.
Spustelėkite skirtuką Naršyti ir ieškos lauke įveskite MailKit, kad žemiau esančiame sąraše būtų rodomas MailKit.
Sąraše pasirinkite MailKit, patikrinkite, ar pasirinkta naujausia versija, tada spustelėkite mygtuką Diegti.
Spustelėkite mygtuką Gerai (OK).
Patikrinkite, ar pakete yra MailKit.
programa
Toliau pateikiamas minimalus el. laiškų siuntimo kodas.
Pirmoje kodo pusėje nustatote informaciją, kurios reikia el. laiškams, ir naudojate šias reikšmes laiškams siųsti antroje pusėje. Antrąją kodo pusę turėtumėte naudoti fiksuotu būdu, jei reikia, tiesiog pakeisdami pirmosios pusės apibrėžimą.
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);
}
}
}
Informacijos, reikalingos el. laiškui siųsti, apibrėžimas
var smtpHostName = "[SMTP サーバー名]";
var smtpPort = 587; // or 25
var smtpAuthUser = "[認証ユーザー名]";
var smtpAuthPassword = "[認証パスワードまたはアプリパスワード]";
Čia galite nustatyti skirtingas reikšmes, priklausomai nuo to, kurį pašto serverį (SMTP serverį) naudojate. Norėčiau paaiškinti keletą reikšmių, kurias nustatau šio straipsnio pabaigoje, bet iš esmės pamatyti mano pašto serverio svetainę.
Iš pradžių jis parašytas appsettigs.json ir tt, tačiau jis tampa nereikalingas kaip patarimai.
El. laiško turinio apibrėžimas
var from = "[送信者メールアドレス]";
var to = "[送り先メールアドレス]";
var subject = "テストメールの件名です。";
var body = "テストメールの本文です。\n改行です。";
var textFormat = TextFormat.Text;
Manau, kad ši dalis yra atitinkama dalis, nes ji yra, jei paprastai naudojate mailers ir tt
Kadangi ji negali siųsti iš užmaskuoti neseniai pašto sistemas, iš esmės jums bus nustatyti tą patį elektroninio pašto adresą, kaip savo elektroninio pašto adresą.
TextFormat
gali būti siunčiami tekstu arba HTML formatu. Jei siunčiate jį HTML formatu, įdėkite html žymes į kūno dalį.
Nustatyti informaciją, reikalingą el. laiškų siuntimui apdoroti
// 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š esmės tai yra pirmiau apibrėžtos reikšmės nustatymo forma.
Taip pat galite nustatyti kelis Nuo ir Iki.
Jis nėra įtrauktas į imtį, tačiau jis taip pat gali apimti CC ir BCC. Jei norite jį įtraukti, įtraukite jį taip pat, kaip nuo arba Iki taip:
message.Cc.Add(MailboxAddress.Parse(cc));
message.Bcc.Add(MailboxAddress.Parse(bcc));
Taip pat galite pakeisti rodomą siuntėjo vardą arba paskirties vietą, jei palaikomas el. laiško gavėjas. Tokiu atveju pakeiskite kodą taip:
message.From.Add(new MailboxAddress("送信者の名前", from));
message.To.Add(new MailboxAddress("送り先の名前", to));
Siųsti el. laišką
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);
Baigę apibrėžti el. paštą, baigsite jį siųsti.
Pateikimas SmtpClient
atliekamas klasės egzemplioriuje. Dispose
Kadangi tai using var
yra tikslas, jis deklaruojamas taip, kad jį būtų galima paleisti automatiškai.
Kadangi tai yra būdas rašyti C # 8.0, pakeiskite į using
įprastą ankstesnių versijų aprašymą.
SmtpClient.Connect
smtp serverio metodą. Kai kuriems STMP serveriams reikia SSL arba TLS ryšių, tačiau SecureSocketOptions.Auto
nurodyti paprastai yra gerai.
Jei SMTP serveris reikalauja autentifikavimo, SmtpClient.Authenticate
metode nurodykite vartotojo vardą ir slaptažodį.
Kai ryšys SmtpClient.Send
bus baigtas, siųskite el. laišką tokiu būdu.
Kai viskas bus padaryta, SmtpClient.Disconnect
atjunkite jį su metodu.
Atkreipkite dėmesį, kad visi šie patarimai atlieka šias operacijas kaip sinchronines operacijas, tačiau kiekvienas metodas taip pat gali atlikti asinchroninį apdorojimą pavadinimu xxxxxAsync. Naudokite, jei reikia.
Kaip siųsti priedus
Norėdami siųsti MimeMessage.Body
priedą, pakeiskite reikšmę, nustatytą taip:
// 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();
Aukščiau pateiktame kode vietoje saugomas failas yra priedas, tačiau duomenys gali būti bet kas, nes jie turi būti tik baitų masyvas arba srautas. JPEG failo siuntimas kaip pavyzdys.
MimeMessage.Body
Reikšmė, kurią nustatėte BodyBuilder
sukurti kaip .
Pagrindinis tekstas TextPart
skiriasi nuo , o ypatybės, į kurias jis nustatytas, skiriasi, nesvarbu, ar tekstas, ar HTML.
Atkreipkite dėmesį, kad net jei nustatysite abu, pirmasis parametras bus ištrintas.
Priedas BodyBuilder.Attachments
įtraukiamas į ypatybę.
Argumentai yra "priedo pavadinimas", "priedo duomenys" ir "turinio tipas (MIME)".
Atminkite, kad gaunančioji šalis negali nustatyti priedo pavadinimo, nebent pridedate plėtinį.
ContentType
reikšmė, kurią nustatėte, skirsis priklausomai nuo failo formato.
Jei ieškote internete aplink "failo formato MIME", galėsite pamatyti derinį.
BodyBuilder.ToMessageBody
Galiausiai paskambinkite metodui ir nustatykite jį MimeMessage.Body
į .
Apie SMTP serverio nurodymą
SMTP serveris laiškams siųsti turi skirtingus parametrus, priklausomai nuo jūsų naudojamos pašto serverio. Toliau pateikiamas pavyzdys, todėl, jei tokio dalyko nėra, patikrinkite, ar naudojamas serveris.
Be to, kadangi informacija teikiama nuo 2021 m. balandžio mėn., šiuo metu informacija gali būti pakeista.
naudojate patvirtinimo dviemPašto tarnyba | SMTP serverio prievado | autentifikavimas | Jei | veiksmais | šifravimą |
---|---|---|---|---|---|
Outlook.com 1 dalis | smtp.office365.com | 587 | Vartotojo vardas ir slaptažodis | ?? | STARTTLS |
Outlook.com 2 dalis | smtp-mail.outlook.com | 587 | Vartotojo vardas ir slaptažodis | Gaukite programos slaptažodį ir nustatykite slaptažodį | STARTTLS |
"Gmail" | smtp.gmail.com | 465(SSL) arba 587(TLS) | Vartotojo vardas ir slaptažodis | Gaukite programos slaptažodį ir nustatykite slaptažodį | SSL arba TLS arba STARTTLS |
Yahoo! Paštas | smtp.mail.yahoo.co.jp | 465 | Vartotojo vardas ir slaptažodis | ?? | Nežinomas tipas |
OKS | smtp.ocn.ne.jp | 465 | Vartotojo vardas ir slaptažodis | ?? | SSL arba TLS |