Odosielanie e-mailov pomocou aplikácie MailKit
životné prostredie
- .NET (Sieť)
-
- .NET 5.0
- MailKit (Poštový komit)
-
- 2.11.1
najskôr
Predtým, smtpClient, trieda pre odosielanie e-mailov, bol zahrnutý ako štandard, ale teraz je zastaraný kvôli out-of-špecifikácie.
To znamená, že .NET nemá štandardnú poštovú knižnicu, takže budete používať knižnicu tretej strany.
V súčasnosti existuje "MailKit" ako bežná knižnica, takže by som chcel poslať e-mail pomocou tohto času.
Predstavujeme mailKit
Spustite Visual Studio 2019 a vytvorte nový projekt aplikácie konzoly (.NET). Ak používate .NET, budete mať nejakú slobodu v type projektu, takže budem vedieť podrobnosti.
Po otvorení projektu kliknite pravým tlačidlom myši na položku Závislosti v Prieskumníkovi riešení a vyberte položku Spravovať balíky NuGet.
Kliknite na kartu Prehľadávať a do vyhľadávacieho poľa zadajte výraz MailKit, aby sa mailKit zobrazil v zozname nižšie.
V zozname vyberte položku MailKit, overte, či je vybratá najnovšia verzia, a potom kliknite na tlačidlo Inštalovať.
Kliknite na tlačidlo OK.
Overte, či balík obsahuje MailKit.
program
Nasleduje minimálny kód pre odosielanie e-mailov.
Definujete informácie, ktoré potrebujete pre svoje e-maily v prvej polovici kódu, a tieto hodnoty použijete na odoslanie pošty v druhej polovici. Druhú polovicu kódu by ste mali mať možnosť používať pevným spôsobom jednoduchou zmenou definície prvej polovice podľa potreby.
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);
}
}
}
Definovanie informácií potrebných na odoslanie e-mailu
var smtpHostName = "[SMTP サーバー名]";
var smtpPort = 587; // or 25
var smtpAuthUser = "[認証ユーザー名]";
var smtpAuthPassword = "[認証パスワードまたはアプリパスワード]";
Tu nastavíte rôzne hodnoty v závislosti od toho, ktorý poštový server (SMTP server) používate. Rád by som vysvetlil niekoľko hodnôt, ktoré nastavujem na konci tohto článku, ale v podstate sa mi zobrazí stránka môjho poštového servera.
Pôvodne je napísaná v appsettigs.json atď., ale je to predvídavosť, že sa stane nadbytočnou ako tipy.
Definovanie obsahu e-mailu
var from = "[送信者メールアドレス]";
var to = "[送り先メールアドレス]";
var subject = "テストメールの件名です。";
var body = "テストメールの本文です。\n改行です。";
var textFormat = TextFormat.Text;
Myslím si, že táto časť je zodpovedajúca časť, ako je to, ak bežne používate poštov atď.
Keďže nie je k dispozícii na odosielanie v prestrojení v nedávnych poštových systémoch, v podstate nastavíte rovnakú e-mailovú adresu ako váš e-mailový účet.
TextFormat
môžu byť odoslané v texte alebo HTML. Ak ho odošlete vo formáte HTML, vloženie značiek HTML do časti tela.
Nastavenie informácií potrebných na spracovanie odosielaných e-mailov
// 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 podstate je to forma nastavenia hodnoty definovanej vyššie.
Môžete tiež nastaviť viacero od a do.
Nie je zahrnutá vo vzorke, ale môže zahŕňať aj CC a Skrytú kópiu. Ak ho chcete zahrnúť, pridajte ho rovnakým spôsobom ako od alebo do takto:
message.Cc.Add(MailboxAddress.Parse(cc));
message.Bcc.Add(MailboxAddress.Parse(bcc));
Môžete tiež zmeniť zobrazované meno odosielateľa alebo cieľové miesto, ak je príjemca e-mailu podporovaný. V takom prípade zmeňte kód takto:
message.From.Add(new MailboxAddress("送信者の名前", from));
message.To.Add(new MailboxAddress("送り先の名前", to));
Odoslanie e-mailu
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);
Po definovaní e-mailu ste ho už odovznie.
Podanie SmtpClient
sa vykonáva v inštancii triedy. Dispose
Pretože je using var
to cieľ, je deklarovaný tak, aby sa mohol automaticky uvoľniť.
Vzhľadom k tomu, že je to spôsob písania C# 8.0, prejdite na using
normálny popis pre staršie verzie.
SmtpClient.Connect
metódu na server SMTP. Niektoré servery STMP vyžadujú pripojenia SSL alebo TLS, ale SecureSocketOptions.Auto
zadanie je zvyčajne v poriadku.
Ak server SMTP vyžaduje overenie, SmtpClient.Authenticate
zadajte meno používateľa a heslo v metóde.
Po dokončení pripojenia SmtpClient.Send
odošlite e-mail v metóde.
Keď je všetko hotové, SmtpClient.Disconnect
odpojte ho metódou.
Všimnite si, že všetky tieto tipy vykonávať tieto operácie ako synchrónne operácie, ale každá metóda môže tiež vykonávať asynchrónne spracovanie pod názvom xxxxxAsync. Používajte podľa potreby.
Ako odosielať prílohy
Ak chcete odoslať MimeMessage.Body
prílohu, zmeňte hodnotu nastavenú takto:
// 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();
Vo vyššie uvedenom kóde je súbor uložený lokálne prílohou, ale údaje môžu byť čokoľvek, pretože to musí byť len bajtové pole alebo prúd. Odoslanie súboru JPEG ako príkladu.
MimeMessage.Body
Hodnotu, ktorú nastavíte na BodyBuilder
vytvorenie ako .
Základný text TextPart
sa líši od a vlastnosti, na ktoré je nastavený, sa líšia, či už ide o text alebo HTML.
Upozorňujeme, že aj keď nastavíte obe, prvé nastavenie sa vymaže.
Príloha sa BodyBuilder.Attachments
pridá do vlastnosti.
Argumenty sú "názov prílohy", "údaje prílohy" a "typ obsahu (MIME)".
Upozorňujeme, že prijímajúca strana nemusí identifikovať názov prílohy, pokiaľ nepridáte rozšírenie.
ContentType
hodnota, na ktorú ste nastavili, sa bude líšiť v závislosti od formátu súboru.
Ak vyhľadávate na internete okolo "formátu súboru MIME", uvidíte kombináciu.
BodyBuilder.ToMessageBody
Nakoniec zavolajte metódu a nastavte ju na MimeMessage.Body
.
Zadanie servera SMTP
Server SMTP na odosielanie pošty má rôzne nastavenia v závislosti od poštového servera, ktorý používate. Nasleduje príklad, takže ak nič také neexistuje, skontrolujte pomoc servera, ktorý používate.
Okrem toho, keďže informácie sú z apríla 2021, informácie sa v súčasnosti mohli zmeniť.
službyOverenie | portu servera SMTP poštovej | Ak používate | dvojstupňové overenie šifrovania | ||
---|---|---|---|---|---|
Outlook.com časť 1 | smtp.office365.com | 587 | Meno používateľa a heslo | ?? | STARTTLS (ŠTARTTLS) |
Outlook.com časť 2 | smtp-mail.outlook.com | 587 | Meno používateľa a heslo | Získanie hesla aplikácie a jeho nastavenie na heslo | STARTTLS (ŠTARTTLS) |
Gmail | smtp.gmail.com | 465(SSL) alebo 587(TLS) | Meno používateľa a heslo | Získanie hesla aplikácie a jeho nastavenie na heslo | SSL alebo TLS alebo STARTTLS |
Yahoo! Pošta | smtp.mail.yahoo.co.jp | 465 | Meno používateľa a heslo | ?? | Neznámy typ |
OCN (OCN) | smtp.ocn.ne.jp | 465 | Meno používateľa a heslo | ?? | Protokol SSL alebo TLS |