Meilisõnumite saatmine MailKiti abil
keskkond
- .NET
-
- .NET 5.0
- MailKit
-
- 2.11.1
Alguses
Varem lisati smtpClient, e-kirjade saatmise klass, standardiks, kuid on nüüd aegunud spetsifikatsioonide tõttu.
See tähendab, et .NET-il pole standardset postitusteeki, seega kasutate mõne muu tootja teeki.
Praegu on peavoolu teegina "MailKit", nii et ma tahaksin saata e-kirja, kasutades seda aega.
MailKiti tutvustus
Käivitage Visual Studio 2019 ja looge uus konsooli rakenduse (.NET) projekt. Kui kasutate .NET-i, on teil projekti tüübis vabadus, nii et ma tean üksikasju.
Projekti avamisel paremklõpsake Solution Exploreris sõltuvusi ja valige Käsk Halda NuGeti pakette.
MailKiti kuvamiseks allolevas loendis klõpsake vahekaarti Sirvi ja tippige otsinguväljale mailKit.
Valige loendist MailKit, veenduge, et valitud on uusim versioon, ja seejärel klõpsake nuppu Installi.
Klõpsake nuppu OK.
Veenduge, et pakett sisaldab MailKit.
programm
Järgnev on e-kirjade saatmise miinimumkood.
Määratlete koodi esimesel poolel oma e-kirjade jaoks vajaliku teabe ja kasutate neid väärtusi teisel poolel meilisõnumite saatmiseks. Koodi teist poolt peaks olema võimalik kasutada kindlal viisil, muutes lihtsalt esimese poole määratlust vastavalt vajadusele.
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);
}
}
}
Meilisõnumi saatmiseks vajaliku teabe määratlemine
var smtpHostName = "[SMTP サーバー名]";
var smtpPort = 587; // or 25
var smtpAuthUser = "[認証ユーザー名]";
var smtpAuthPassword = "[認証パスワードまたはアプリパスワード]";
Siin saate määrata erinevad väärtused sõltuvalt sellest, millist meiliserverit (SMTP-serverit) kasutate. Tahaksin selgitada mõningaid väärtusi, mida ma selle artikli lõpus sean, kuid põhimõtteliselt vaadake minu meiliserveri saiti.
Algselt on see kirjutatud rakendustes appsettigs.json jne, kuid see on ette nähtud, kuigi see muutub üleliigseks kui Näpunäited.
Meilisõnumi sisu määratlemine
var from = "[送信者メールアドレス]";
var to = "[送り先メールアドレス]";
var subject = "テストメールの件名です。";
var body = "テストメールの本文です。\n改行です。";
var textFormat = TextFormat.Text;
Ma arvan, et see osa on vastav osa, nagu see on siis, kui te tavaliselt kasutate postitajaid jne.
Kuna hiljutistes meilisüsteemides ei ole võimalik varjatult saata, määrate põhimõtteliselt oma e-posti kontoga sama e-posti aadressi.
TextFormat
saab saata teksti või HTML-ina. Kui saadate selle HTML-vormingus, manustage HTML-sildid kehaosasse.
Saate häälestada meilisõnumite saatmiseks vajalikku teavet.
// 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;
Põhimõtteliselt on see eespool määratletud väärtuse seadmise vorm.
Samuti saate määrata mitu alates ja kuni.
See ei sisaldu valimis, kuid võib hõlmata ka cc ja BCC. Kui soovite selle kaasata, lisage see samamoodi nagu alates või Kuni järgmiselt.
message.Cc.Add(MailboxAddress.Parse(cc));
message.Bcc.Add(MailboxAddress.Parse(bcc));
Kui meilisõnumi adressaati toetatakse, saate muuta ka saatja või sihtkoha kuvatavat nime. Sellisel juhul muutke koodi järgmiselt:
message.From.Add(new MailboxAddress("送信者の名前", from));
message.To.Add(new MailboxAddress("送り先の名前", to));
Saada e-kiri
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);
Kui olete meilisõnumi määratlemise lõpetanud, olete selle saatmise lõpetanud.
Esitamine SmtpClient
toimub klassi eksemplaris. Dispose
Kuna see using var
on sihtmärk, deklareeritakse see nii, et seda saab automaatselt vabastada.
Kuna see on c# 8.0 kirjutamise viis, muutke using
varasemate versioonide tavalist kirjeldust.
SmtpClient.Connect
SMTP-serverisse. Mõned STMP-serverid vajavad SSL- või TLS-ühendusi, kuid SecureSocketOptions.Auto
määramine on tavaliselt hea.
Kui SMTP-server nõuab autentimist, SmtpClient.Authenticate
määrake meetodis kasutajanimi ja parool.
Kui ühendus on SmtpClient.Send
lõpule jõudnud, saatke meetodis meilisõnum.
Kui kõik on tehtud, SmtpClient.Disconnect
ühendage see meetodiga lahti.
Pange tähele, et kõik need näpunäited sooritavad neid toiminguid sünkroonsete toimingutena, kuid iga meetod võib teha ka asünkroonset töötlemist nime xxxxxAsync all. Kasutage vastavalt vajadusele.
Manuste saatmine
Manuse saatmiseks MimeMessage.Body
muutke seatud väärtuseks järgmiselt:
// 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();
Ülaltoodud koodis on kohalikult talletatud fail manus, kuid andmed võivad olla mis iganes, kuna see peab olema ainult byte array või Stream. JPEG-faili saatmine näitena.
MimeMessage.Body
Väärtus, mille määrasite BodyBuilder
loomiseks väärtusena .
TextPart
Kehatekst erineb väärtusest ja atribuudid, millele see on seatud, on erinevad (kas tekst või HTML).
Pange tähele, et isegi kui seate mõlemad, kustutatakse esimene säte.
Manus BodyBuilder.Attachments
lisatakse atribuudile.
Argumendid on "manuse nimi", "manuse andmed" ja "sisutüüp (MIME)".
Pange tähele, et vastuvõttev pool ei pruugi manuse nime tuvastada, kui te ei lisa laiendust.
ContentType
teie seatud väärtus sõltub failivormingust.
Kui otsite Internetist "failivormingu MIME" ümber, näete kombinatsiooni.
BodyBuilder.ToMessageBody
Lõpuks helistage meetodile ja seadke see MimeMessage.Body
.
SMTP-serveri määramine
Meilisõnumite saatmise SMTP-serveril on erinevad sätted sõltuvalt kasutatavast meiliserverist. Järgnev on näide, nii et kui sellist asja ei ole, kontrollige teie serveri abi.
Kuna teave on esitatud alates 2021. aasta aprillist, võib teave olla praegu muutunud.
kasutateMeiliteenuse | SMTP-serveri pordi | autentimine | Kui | kaheastmelist kinnituskrüptimist | |
---|---|---|---|---|---|
Outlook.com 1. osa | smtp.office365.com | 587 | Kasutajanimi ja parool | ?? | STARTTLID |
Outlook.com 2. osa | smtp-mail.outlook.com | 587 | Kasutajanimi ja parool | Hankige rakenduse parool ja seadke see parooliks | STARTTLID |
Gmail | smtp.gmail.com | 465(SSL) või 587(TLS) | Kasutajanimi ja parool | Hankige rakenduse parool ja seadke see parooliks | SSL või TLS või STARTTLS |
Yahoo! e-post | smtp.mail.yahoo.co.jp | 465 | Kasutajanimi ja parool | ?? | Tundmatu tüüp |
OCN | smtp.ocn.ne.jp | 465 | Kasutajanimi ja parool | ?? | SSL või TLS |