Trimiterea e-mailurilor utilizând MailKit
mediu
- .NET
-
- .NET 5,0
- MailKit
-
- 2.11.1
La început
Anterior, smtpClient, o clasă pentru trimiterea de e-mailuri, a fost inclusă ca standard, dar acum este învechită din cauza specificațiilor învechite.
Aceasta înseamnă că .NET nu are o bibliotecă de corespondență standard, deci veți utiliza o bibliotecă terță parte.
În prezent, există "MailKit" ca bibliotecă mainstream, așa că aș dori să trimit un e-mail folosind acest timp.
Vă prezentăm MailKit
Lansați Visual Studio 2019 și creați un nou proiect de aplicație consolă (.NET). Dacă utilizați .NET, veți avea o anumită libertate în tipul de proiect, așa că voi cunoaște detaliile.
Când deschideți proiectul, faceți clic cu butonul din dreapta pe Dependențe din Exploratorul de soluții și selectați Gestionare pachete NuGet.
Faceți clic pe fila Răsfoire și tastați MailKit în câmpul de căutare pentru a afișa MailKit în lista de mai jos.
Selectați MailKit din listă, verificați dacă este selectată cea mai recentă versiune, apoi faceți clic pe butonul Instalare.
Faceți clic pe butonul OK.
Verificați dacă pachetul conține MailKit.
program
Următorul este codul minim pentru trimiterea e-mailurilor.
Definiți informațiile de care aveți nevoie pentru e-mailurile dvs., în prima jumătate a codului, și utilizați aceste valori pentru a trimite e-mailuri în a doua jumătate. Ar trebui să puteți utiliza a doua jumătate a codului într-un mod fix prin simpla schimbare a definiției primei jumătăți, după este necesar.
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);
}
}
}
Definirea informațiilor necesare pentru trimiterea unui e-mail
var smtpHostName = "[SMTP サーバー名]";
var smtpPort = 587; // or 25
var smtpAuthUser = "[認証ユーザー名]";
var smtpAuthPassword = "[認証パスワードまたはアプリパスワード]";
Aici setați valori diferite în funcție de serverul de e-mail (server SMTP) pe care îl utilizați. Aș dori să explice câteva dintre valorile sunt setarea la sfârșitul acestui articol, dar practic a se vedea site-ul serverului meu de mail.
Inițial, este scris în appsettigs.json etc., dar este mai înainte de a deveni redundant ca Sfaturi.
Definirea conținutului unui e-mail
var from = "[送信者メールアドレス]";
var to = "[送り先メールアドレス]";
var subject = "テストメールの件名です。";
var body = "テストメールの本文です。\n改行です。";
var textFormat = TextFormat.Text;
Cred că această parte este partea corespunzătoare, așa este, dacă utilizați în mod normal, mailers etc
Deoarece nu este disponibil pentru a trimite de la deghizat în sistemele de e-mail recente, practic va seta aceeași adresă de e-mail ca contul de e-mail.
TextFormat
pot fi trimise în text sau HTML. Dacă îl trimiteți în HTML, încorporați etichete html în partea corpului.
Configurarea informațiilor necesare pentru procesarea trimiterii e-mailurilor
// 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;
Practic, este o formă de setare a valorii definite mai sus.
De asemenea, puteți seta mai multe de la și de la.
Nu este inclus în eșantion, dar poate include și CC și CC. Dacă doriți să îl includeți, adăugați-l în același mod ca de la sau la, după urmează:
message.Cc.Add(MailboxAddress.Parse(cc));
message.Bcc.Add(MailboxAddress.Parse(bcc));
De asemenea, puteți modifica numele afișat al expeditorului sau al destinației dacă destinatarul e-mailului este acceptat. În acest caz, modificați codul după urmează:
message.From.Add(new MailboxAddress("送信者の名前", from));
message.To.Add(new MailboxAddress("送り先の名前", to));
Trimiterea e-mailului
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);
Când ați terminat de definit e-mailul, ați terminat de trimis.
Depunerea se SmtpClient
face într-o instanță a clasei. Dispose
Deoarece using var
este ținta, este declarată astfel încât să poată fi eliberată automat.
Deoarece este un mod de a scrie C # 8.0, vă rugăm să treceți la using
descrierea normală pentru versiunile anterioare.
SmtpClient.Connect
la serverul SMTP. Unele servere STMP necesită conexiuni SSL sau TLS, dar SecureSocketOptions.Auto
specificarea este de obicei în regulă.
Dacă serverul SMTP necesită autentificare, SmtpClient.Authenticate
specificați un nume de utilizator și o parolă în metodă.
Când conexiunea este SmtpClient.Send
finalizată, trimiteți un e-mail în metodă.
Când totul este făcut, SmtpClient.Disconnect
deconectați-l cu metoda.
Rețineți că toate aceste sfaturi efectuează aceste operațiuni ca operațiuni sincrone, dar fiecare metodă poate efectua, de asemenea, procesare asincronă sub numele xxxxxAsync. Utilizați după este necesar.
se trimit atașările
Pentru a trimite o MimeMessage.Body
atașare, modificați valoarea setată după urmează:
// 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();
În codul de mai sus, fișierul stocat local este o atașare, dar datele pot fi orice, deoarece trebuie să fie doar o matrice octet sau flux. Trimiterea unui fișier JPEG ca exemplu.
MimeMessage.Body
Valoarea pe care ați setat-o să BodyBuilder
se construiască ca .
Textul corpului TextPart
diferă de , iar proprietățile la care este setat sunt diferite, indiferent dacă este text sau HTML.
Vă rugăm să rețineți că, chiar dacă le setați pe ambele, prima setare va fi ștearsă.
Atașarea este BodyBuilder.Attachments
adăugată la proprietate.
Argumentele sunt "nume atașare", "date atașare" și "tip de conținut (MIME)".
Rețineți că numele atașării nu poate fi identificat de partea destinatară decât dacă adăugați o extensie.
ContentType
valoarea setată va varia în funcție de formatul de fișier.
Dacă căutați pe Internet în jurul "formatului de fișier MIME", veți putea vedea combinația.
BodyBuilder.ToMessageBody
În cele din urmă, apelați metoda și setați-o la MimeMessage.Body
.
Despre specificarea unui server SMTP
Serverul SMTP pentru trimiterea corespondenței are setări diferite în funcție de serverul de e-mail pe care îl utilizați. Următorul este un exemplu, deci dacă nu există un astfel de lucru, vă rugăm să verificați ajutorul serverului pe care îl utilizați.
În plus, întrucât informațiile sunt din aprilie 2021, este posibil ca informațiile să se fi modificat în prezent.
Autentificare port Dacăserver SMTP | serviciu de poștă electronică | utilizați | criptarea | verificării în doi pași | |
---|---|---|---|---|---|
Outlook.com partea 1 | smtp.office365.com | 587 | Numele de utilizator și parola | ?? | STARTTL-URI |
Outlook.com partea 2 | smtp-mail.outlook.com | 587 | Numele de utilizator și parola | Obțineți parola aplicației și setați-o la parolă | STARTTL-URI |
Gmail | smtp.gmail.com | 465(SSL) sau 587(TLS) | Numele de utilizator și parola | Obțineți parola aplicației și setați-o la parolă | SSL sau TLS sau STARTTLS |
Yahoo! Mail | smtp.mail.yahoo.co.jp | 465 | Numele de utilizator și parola | ?? | Tip necunoscut |
OCN | smtp.ocn.ne.jp | 465 | Numele de utilizator și parola | ?? | SSL sau TLS |