Odesílání e-mailů pomocí MailKitu
životní prostředí
- .NET
-
- .NET 5.0
- MailKit
-
- 2.11.1
nejprve
Dříve byla třída smtpClient, třída pro odesílání e-mailů, zahrnuta jako standardní, ale nyní je zastaralá kvůli mimo specifikace.
To znamená, že rozhraní .NET nemá standardní poštovní knihovnu, takže budete používat knihovnu třetí strany.
V současné době existuje "MailKit" jako běžná knihovna, takže bych chtěl poslat e-mail pomocí této doby.
Představujeme MailKit
Spusťte Visual Studio 2019 a vytvořte nový projekt konzolové aplikace (.NET). Pokud používáte rozhraní .NET, budete mít v typu projektu určitou svobodu, takže se sejdu s podrobnostmi.
Když otevřete projekt, klikněte pravým tlačítkem myši na Závislosti z Průzkumníka řešení a vyberte Spravovat balíčky NuGet.
Klikněte na kartu Procházet a do vyhledávacího pole zadejte MailKit, abyste mailkit zobrazili v níže uvedeném seznamu.
Ze seznamu vyberte MailKit, ověřte, zda je vybrána nejnovější verze, a klikněte na tlačítko Instalovat.
Klepněte na tlačítko OK.
Ověřte, zda balíček obsahuje MailKit.
program
Následuje minimální kód pro odesílání e-mailů.
Definujete informace, které potřebujete pro své e-maily v první polovině kódu, a tyto hodnoty používáte k odesílání pošty ve druhé polovině. Druhou polovinu kódu byste měli být schopni používat pevným způsobem jednoduše změnou definice první poloviny podle potřeby.
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);
}
}
}
Definování informací potřebných k odeslání e-mailu
var smtpHostName = "[SMTP サーバー名]";
var smtpPort = 587; // or 25
var smtpAuthUser = "[認証ユーザー名]";
var smtpAuthPassword = "[認証パスワードまたはアプリパスワード]";
Zde nastavíte různé hodnoty v závislosti na tom, který poštovní server (server SMTP) používáte. Rád bych vysvětlil několik hodnot, které nastavuji na konci tohoto článku, ale v podstatě viz web poštovního serveru.
Původně se píše v appsettigs.json atd., Ale je to pro předmísť, že se stává nadbytečným jako Tipy.
Definování obsahu e-mailu
var from = "[送信者メールアドレス]";
var to = "[送り先メールアドレス]";
var subject = "テストメールの件名です。";
var body = "テストメールの本文です。\n改行です。";
var textFormat = TextFormat.Text;
Myslím, že tato část je odpovídající část, jak je, pokud běžně používáte mailery atd.
Vzhledem k tomu, že není k dispozici pro odesílání v přestrojení v nedávných poštovních systémech, v podstatě nastavíte stejnou e-mailovou adresu jako váš e-mailový účet.
TextFormat
lze odeslat v textovém nebo HTML. Pokud ji odešlete v HTML, vložíte do části těla značky HTML.
Nastavení informací potřebných ke zpracování odesílání e-mailů
// 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 podstatě se jedná o formu nastavení výše definované hodnoty.
Můžete také nastavit více od a do.
Není zahrnuta do vzorku, ale může zahrnovat i CC a BCC. Pokud ji chcete zahrnout, přidejte ji stejným způsobem jako Od nebo Do následujícím způsobem:
message.Cc.Add(MailboxAddress.Parse(cc));
message.Bcc.Add(MailboxAddress.Parse(bcc));
Pokud je příjemce e-mailu podporován, můžete také změnit zobrazované jméno odesílatele nebo cíl. V takovém případě změňte kód takto:
message.From.Add(new MailboxAddress("送信者の名前", from));
message.To.Add(new MailboxAddress("送り先の名前", to));
Odeslat e-mail
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);
Až skončíte s definováním e-mailu, skončíte s jeho odesíláním.
Odeslání SmtpClient
se provádí v instanci třídy. Dispose
Protože se using var
jedná o cíl, je deklarován, aby mohl být automaticky uvolněn.
Vzhledem k tomu, že se jedná o způsob psaní jazyka C# 8.0, změňte using
prosím normální popis pro starší verze.
SmtpClient.Connect
na server SMTP. Některé servery STMP vyžadují připojení SSL nebo TLS, ale SecureSocketOptions.Auto
určení je obvykle v pořádku.
Pokud server SMTP vyžaduje ověření, SmtpClient.Authenticate
zadejte do metody uživatelské jméno a heslo.
Po dokončení připojení SmtpClient.Send
odešlete e-mail v metodě.
Když je vše hotovo, SmtpClient.Disconnect
odpojte ji metodou.
Všimněte si, že všechny tyto tipy provádějí tyto operace jako synchronní operace, ale každá metoda může také provádět asynchronní zpracování pod názvem xxxxxAsync. Používejte podle potřeby.
Jak odesílat přílohy
Chcete-li MimeMessage.Body
odeslat přílohu, změňte nastavenou hodnotu 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();
Ve výše uvedeném kódu je soubor uložený místně přílohou, ale data mohou být cokoli, protože to musí být pouze bajtové pole nebo datový proud. Odeslání souboru JPEG jako příkladu.
MimeMessage.Body
Hodnota, kterou nastavíte BodyBuilder
na sestavení jako .
Text textu TextPart
se liší od aplikace a vlastnosti, na které je nastaven, se liší, ať už se jedná o text nebo html.
Vezměte prosím na vědomí, že i když nastavíte obě, první nastavení bude vymazáno.
Příloha je BodyBuilder.Attachments
přidána k vlastnosti.
Argumenty jsou "název přílohy", "data přílohy" a "typ obsahu (MIME)".
Mějte na paměti, že přijímající strana nesmí identifikovat název přílohy, pokud nepřidáte rozšíření.
ContentType
hodnota, na kterou jste nastavili, se bude lišit v závislosti na formátu souboru.
Pokud vyhledáte na Internetu kolem "formátu souboru MIME", uvidíte kombinaci.
BodyBuilder.ToMessageBody
Nakonec zavolejte metodu a nastavte ji na MimeMessage.Body
.
Určení serveru SMTP
Server SMTP pro odesílání pošty má různá nastavení v závislosti na poštovním serveru, který používáte. Následuje příklad, takže pokud taková věc neexistuje, zkontrolujte prosím pomoc serveru, který používáte.
Vzhledem k tomu, že informace jsou k dubnu 2021, mohly se tyto informace v současné době změnit.
Ověřování portu | serveru SMTP poštovní | služby | Pokud používáte | dvoufázové ověřovací | šifrování |
---|---|---|---|---|---|
Outlook.com Část 1 | smtp.office365.com | 587 | Uživatelské jméno a heslo | ?? | STARTTLS |
Outlook.com část 2 | smtp-mail.outlook.com | 587 | Uživatelské jméno a heslo | Získání hesla aplikace a jeho nastavení na heslo | STARTTLS |
Gmail | smtp.gmail.com | 465 (SSL) nebo 587 (TLS) | Uživatelské jméno a heslo | Získání hesla aplikace a jeho nastavení na heslo | SSL nebo TLS nebo STARTTLS |
Yahoo! Pošta | smtp.mail.yahoo.co.jp | 465 | Uživatelské jméno a heslo | ?? | Neznámý typ |
OCN | smtp.ocn.ne.jp | 465 | Uživatelské jméno a heslo | ?? | SSL nebo TLS |