Pošiljanje e-poštnih sporočil s programom MailKit
okolje
- .NET
-
- .NET 5.0
- MailKit
-
- 2.11.1
Sprva
Prej je bil smtpClient, razred za pošiljanje e-poštnih sporočil, vključen kot standarden, vendar je zdaj prikrajšan zaradi zunaj specifikacij.
To pomeni, da .NET nima standardne poštne knjižnice, zato boste uporabili knjižnico drugih ponudnikov.
Trenutno obstaja "MailKit" kot mainstream knjižnica, tako da bi rad poslal e-poštno sporočilo s tem časom.
Predstavitev MailKit
Zaženite Visual Studio 2019 in ustvarite nov projekt konzolne aplikacije (.NET). Če uporabljate .NET, boste imeli nekaj svobode v vrsti projekta, tako da bom vedel podrobnosti.
Ko odprete projekt, z desno tipko miške kliknite Odvisnosti iz Raziskovalca rešitev in izberite Upravljanje paketov NuGet.
Kliknite zavihek Prebrskaj in v iskalno polje vnesite MailKit, da prikažete MailKit na spodnjem seznamu.
Na seznamu izberite MailKit, preverite, ali je izbrana najnovejša različica in kliknite gumb Namesti.
Kliknite gumb V redu.
Preverite, ali paket vsebuje MailKit.
program
Sledi minimalna koda za pošiljanje e-poštnih sporočil.
Določite informacije, ki jih potrebujete za e-poštna sporočila v prvi polovici kode, in uporabite te vrednosti za pošiljanje pošte v drugi polovici. Drugo polovico kode bi morali uporabljati na fiksni način tako, da preprosto spremenite definicijo prve polovice, kot je potrebno.
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);
}
}
}
Določanje informacij, ki so potrebne za pošiljanje e-poštnega sporočila
var smtpHostName = "[SMTP サーバー名]";
var smtpPort = 587; // or 25
var smtpAuthUser = "[認証ユーザー名]";
var smtpAuthPassword = "[認証パスワードまたはアプリパスワード]";
Tukaj nastavite različne vrednosti, odvisno od tega, kateri poštni strežnik (SMTP strežnik) uporabljate. Rad bi pojasnil nekaj vrednosti, ki jih postavljam na koncu tega članka, v bistvu pa si oglejte mesto mojega poštnega strežnika.
Prvotno je napisana v appsettigs.json, itd, vendar je predpostavka, da postane odveč kot Nasveti.
Določanje vsebine e-poštnega sporočila
var from = "[送信者メールアドレス]";
var to = "[送り先メールアドレス]";
var subject = "テストメールの件名です。";
var body = "テストメールの本文です。\n改行です。";
var textFormat = TextFormat.Text;
Mislim, da je ta del ustrezen del, kot je, če običajno uporabljate mailerje itd.
Ker ni na voljo za pošiljanje od v prekrivnem v nedavnih poštnih sistemih, v bistvu boste nastavili isti e-poštni naslov kot vaš e-poštni račun.
TextFormat
lahko pošljete v besedilu ali HTML. Če ga pošljete v HTML, v telo vdelajte html oznake.
Nastavitev informacij, ki so potrebne za obdelavo pošiljanja e-poštnih sporočil
// 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;
V bistvu gre za obliko določanja zgoraj opredeljene vrednosti.
Nastavite lahko tudi več od in do.
Ni vključen v vzorec, lahko pa vključuje tudi CC in BCC. Če ga želite vključiti, ga dodajte na enak način kot od ali Za, kot sledi:
message.Cc.Add(MailboxAddress.Parse(cc));
message.Bcc.Add(MailboxAddress.Parse(bcc));
Če je prejemnik e-poštnega sporočila podprt, lahko spremenite tudi prikazano ime pošiljatelja ali cilja. V tem primeru spremenite kodo na naslednji način:
message.From.Add(new MailboxAddress("送信者の名前", from));
message.To.Add(new MailboxAddress("送り先の名前", to));
Pošlji e-pošto
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);
Ko končate z določanjem e-pošte, ste končali s pošiljanjem.
Predložitev se opravi v SmtpClient
primeru razreda. Ker je cilj, je prijavljen v tako, da se lahko sprosti Dispose
using var
samodejno.
Ker gre za način pisanja C# 8.0, spremenite v običajen opis za starejše using
različice.
SmtpClient.Connect
na strežnik SMTP. Nekateri stmp strežniki zahtevajo SSL ali TLS povezave, vendar je določanje običajno SecureSocketOptions.Auto
v redu.
Če strežnik SMTP zahteva preverjanje pristnosti, v metodi navedite uporabniško SmtpClient.Authenticate
ime in geslo.
Ko je povezava SmtpClient.Send
končana, pošljite e-poštno sporočilo v metodi.
Ko je vse narejeno, SmtpClient.Disconnect
ga odklopite z metodo.
Upoštevajte, da ti nasveti izvajajo vse te operacije kot sinhrone operacije, vendar lahko vsaka metoda izvaja tudi asinkrono obdelavo pod imenom xxxxxAsync. Uporabite, kot je potrebno.
Pošiljanje prilog
Če želite poslati MimeMessage.Body
prilogo, spremenite vrednost, nastavljeno na naslednje:
// 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();
V zgornji kodi je lokalno shranjena datoteka priloga, vendar so podatki lahko karkoli, ker morajo biti le byte array ali Stream. Pošiljanje datoteke JPEG kot primer.
MimeMessage.Body
Vrednost, ki ste jo nastavili BodyBuilder
za izgradnjo kot .
Telo besedila se razlikuje od , in lastnosti, na katere je nastavljen, so različne, bodisi TextPart
besedilo ali HTML.
Upoštevajte, da tudi če nastavite oboje, bo prva nastavitev izbrisana.
Priloga je BodyBuilder.Attachments
dodana v lastnost.
Argumenti so »ime priloge«, »podatki o prilogi« in »vrsta vsebine (MIME)«.
Upoštevajte, da prejemnik morda ne bo identificiral imena priloge, razen če dodate razširitev.
ContentType
vrednost, ki ste jo nastavili, se bo spreminjala glede na obliko datoteke.
Če po internetu poiščete »format datoteke MIME«, boste lahko videli kombinacijo.
Na BodyBuilder.ToMessageBody
koncu pokličite metodo in jo nastavite na MimeMessage.Body
.
O določanju strežnika SMTP
Strežnik SMTP za pošiljanje pošte ima različne nastavitve glede na poštni strežnik, ki ga uporabljate. To je primer, zato če tega ni, preverite pomoč strežnika, ki ga uporabljate.
Ker so informacije od aprila 2021, so se informacije trenutno morda spremenile.
Preverjanje vrat poštne storitve uporabljate šifriranje preverjanja v dvehpristnosti strežniških | SMTP | Če | korakih | ||
---|---|---|---|---|---|
Outlook.com del 1 | smtp.office365.com | 587 | Uporabniško ime in geslo | ?? | STARTTLS |
Outlook.com del 2 | smtp-mail.outlook.com | 587 | Uporabniško ime in geslo | Dobi geslo za aplikacijo in ga nastavi na geslo | STARTTLS |
Gmail | smtp.gmail.com | 465(SSL) ali 587(TLS) | Uporabniško ime in geslo | Dobi geslo za aplikacijo in ga nastavi na geslo | SSL ali TLS ali STARTTLS |
Yahoo! Mail | smtp.mail.yahoo.co.jp | 465 | Uporabniško ime in geslo | ?? | Neznana vrsta |
OCN | smtp.ocn.ne.jp | 465 | Uporabniško ime in geslo | ?? | SSL ali TLS |