E-mailek küldése a MailKit használatával
környezet
- .NET
-
- .NET 5.0
- MailKit
-
- 2.11.1
először
Korábban az smtpClient, az e-mailek küldésének osztálya volt a standard, de most elavult a specifikációkon kívüliek miatt.
Ez azt jelenti, hogy a .NET nem rendelkezik szabványos levelezőkönyvtárral, ezért harmadik féltől származó könyvtárat fog használni.
Jelenleg a "MailKit" mint mainstream könyvtár létezik, ezért szeretnék e-mailt küldeni ez alkalommal.
Bemutatkozik a MailKit
Indítsa el a Visual Studio 2019-et, és hozzon létre egy új konzolalkalmazást (.NET). Ha .NET-et használ, akkor a projekt típusában lesz némi szabadsága, ezért előre ismerem a részleteket.
A projekt megnyitásakor kattintson a jobb gombbal a Megoldáskezelő Függőségek parancsára, és válassza a NuGet csomagok kezelése lehetőséget.
Kattintson a Tallózás fülre, és írja be a MailKit-et a keresőmezőbe, hogy megjelenítse a MailKit-et az alábbi listában.
Válassza a MailKit lehetőséget a listából, ellenőrizze, hogy a legújabb verzió van-e kiválasztva, majd kattintson a Telepítés gombra.
Kattintson az OK gombra.
Ellenőrizze, hogy a csomag tartalmazza-e a MailKit-et.
program
Az alábbiakban az e-mailek küldésének minimális kódja található.
A kód első felében határozza meg az e-mailjeihez szükséges információkat, és ezeket az értékeket használja a levelek küldésére a második felében. Képesnek kell lennie arra, hogy a kód második felét rögzített módon használja, egyszerűen megváltoztatva az első felének meghatározását, ha szükséges.
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);
}
}
}
Az e-mail küldéséhez szükséges adatok megadása
var smtpHostName = "[SMTP サーバー名]";
var smtpPort = 587; // or 25
var smtpAuthUser = "[認証ユーザー名]";
var smtpAuthPassword = "[認証パスワードまたはアプリパスワード]";
Itt állíthat be különböző értékeket attól függően, hogy melyik levelezőkiszolgálót (SMTP-kiszolgálót) használja. Szeretnék elmagyarázni néhány értéket, amit a cikk végén beállítok, de alapvetően lásd a levelezőszerverem webhelyét.
Eredetileg appsettigs.json stb.
E-mail tartalmának meghatározása
var from = "[送信者メールアドレス]";
var to = "[送り先メールアドレス]";
var subject = "テストメールの件名です。";
var body = "テストメールの本文です。\n改行です。";
var textFormat = TextFormat.Text;
Úgy gondolom, hogy ez a rész a megfelelő rész, mivel általában levelezőket használ stb.
Mivel a legutóbbi levelezőrendszerekben nem érhető el álruhában küldeni, alapvetően ugyanazt az e-mail címet fogja beállítani, mint az e-mail fiókja.
TextFormat
szövegesen vagy HTML-ben is elküldhető. Ha HTML-ben küldi el, beágyazza a HTML-címkéket a testrészbe.
Az e-mailek küldéséhez szükséges információk beállítása
// 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;
Alapvetően ez a fent meghatározott érték beállításának egyik formája.
Több Be és Be is állíthatja.
Nem szerepel a mintában, de magában foglalhatja a CC-t és a BCC-t is. Ha be szeretné vonni, adja hozzá ugyanúgy, mint a From vagy a To az alábbiak szerint:
message.Cc.Add(MailboxAddress.Parse(cc));
message.Bcc.Add(MailboxAddress.Parse(bcc));
Módosíthatja a feladó vagy a rendeltetési hely megjelenítését is, ha az e-mail címzettje támogatott. Ebben az esetben módosítsa a kódot az alábbiak szerint:
message.From.Add(new MailboxAddress("送信者の名前", from));
message.To.Add(new MailboxAddress("送り先の名前", to));
E-mail küldése
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);
Ha végezte az e-mail definiálásán, kész a küldés.
A beküldés SmtpClient
az osztály egy példányában történik. Dispose
Mivel using var
ez a cél, azt be kell jelenteni, hogy automatikusan felszabadulhat.
Mivel ez egy módja annak, hogy írjon C # 8.0, kérjük, változtassa meg a using
szokásos leírást a korábbi verziók.
SmtpClient.Connect
módszer az SMTP-kiszolgálóra. Egyes STMP-kiszolgálók SSL- vagy TLS-kapcsolatokat igényelnek, de SecureSocketOptions.Auto
a megadás általában rendben van.
Ha az SMTP-kiszolgáló hitelesítést igényel, SmtpClient.Authenticate
adjon meg egy felhasználónevet és jelszót a módszerben.
Ha a kapcsolat SmtpClient.Send
befejeződött, küldjön egy e-mailt a módszerről.
Ha minden kész, SmtpClient.Disconnect
húzza ki a módszerrel.
Ne feledje, hogy ezek a tippek mind szinkronműveletként hajtják végre ezeket a műveleteket, de minden módszer xxxxxAsync néven is végezhet aszinkron feldolgozást. Szükség szerint használja.
Mellékletek küldése
Melléklet elküldéséhez MimeMessage.Body
módosítsa a beállított értéket a következőképpen:
// 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();
A fenti kódban a helyben tárolt fájl melléklet, de az adatok bármi lehetnek, mert csak byte tömbnek vagy adatfolyamnak kell lennie. JPEG-fájl küldése példaként.
MimeMessage.Body
Az az érték, amely a következőképpen BodyBuilder
van beállítva.
A szövegtörzs TextPart
különbözik a szövegtől , és a beállítás tulajdonságai eltérőek, legyen az szöveg vagy HTML.
Kérjük, vegye figyelembe, hogy még ha mindkettőt beállította is, az első beállítás törlődik.
A melléklet BodyBuilder.Attachments
hozzáadódik a tulajdonsághoz.
Az argumentumok a "attachment name", a "attachment data" és a "content type (MIME)".
Ne feledje, hogy a melléklet nevét az átvevő fél nem azonosíthatja, kivéve, ha hosszabbítást ad hozzá.
ContentType
a beállított érték a fájlformátumtól függően változik.
Ha az interneten a "MIME fájlformátum" körül keres, láthatja a kombinációt.
BodyBuilder.ToMessageBody
Végül hívja fel a módszert, és állítsa be MimeMessage.Body
.
SMTP-kiszolgáló megadása
A levélküldés SMTP-kiszolgálója a használt levelezőkiszolgálótól függően különböző beállításokkal rendelkezik. Az alábbiakban egy példa, így ha nincs ilyen dolog, kérjük, ellenőrizze a segítséget a szerveren használ.
Ezenkívül, mivel az információ 2021 áprilisában van, az információ jelenleg változhatott.
használLevelezőszolgáltatás | SMTP-kiszolgálóport-hitelesítése | Ha | kétlépcsős ellenőrző | titkosítást | |
---|---|---|---|---|---|
Outlook.com 1. rész | smtp.office365.com | 587 | Felhasználónév és jelszó | ?? | STARTTLS |
Outlook.com 2. rész | smtp-mail.outlook.com | 587 | Felhasználónév és jelszó | Alkalmazásjelszó beszerzése és jelszóra beállítása | STARTTLS |
Gmail | smtp.gmail.com | 465(SSL) vagy 587(TLS) | Felhasználónév és jelszó | Alkalmazásjelszó beszerzése és jelszóra beállítása | SSL vagy TLS vagy STARTTLS |
Yahoo! Mail | smtp.mail.yahoo.co.jp | 465 | Felhasználónév és jelszó | ?? | Ismeretlen típus |
OCN | smtp.ocn.ne.jp | 465 | Felhasználónév és jelszó | ?? | SSL vagy TLS |