Enviar correus electrònics amb el MailKit
entorn
- .NET
-
- .NET 5.0
- MailKit
-
- 2.11.1
Al principi
Anteriorment, smtpClient, una classe per a l'enviament de correus electrònics, s'incloïa com a estàndard, però ara està obsoleta a causa de les especificacions no especificades.
Això vol dir que .NET no té una biblioteca de correu estàndard, de manera que utilitzareu una biblioteca de tercers.
Actualment, hi ha "MailKit" com a biblioteca principal, així que m'agradaria enviar un correu electrònic utilitzant aquest temps.
Introducció del MailKit
Inicieu el Visual Studio 2019 i creeu un nou projecte d'aplicació de consola (.NET). Si utilitzeu .NET, tindreu una mica de llibertat en el tipus de projecte, així que coneixeré els detalls.
Quan obriu el projecte, feu clic amb el botó dret del ratolí a Dependències de l'Explorador de solucions i seleccioneu Administra els paquets NuGet.
Feu clic a la pestanya Navega i escriviu MailKit al camp de cerca per visualitzar el MailKit a la llista següent.
Seleccioneu MailKit de la llista, comproveu que la versió més recent estigui seleccionada i feu clic al botó Instal·la.
Feu clic al botó D'acord.
Verifiqueu que el paquet contingui MailKit.
programa
A continuació es troba el codi mínim per a l'enviament de correus electrònics.
Definiu la informació que necessiteu per als vostres correus electrònics a la primera meitat del codi i utilitzeu aquests valors per enviar correu a la segona meitat. Hauríeu de ser capaços d'utilitzar la segona meitat del codi de manera fixa simplement canviant la definició de la primera meitat segons sigui necessari.
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);
}
}
}
Definir la informació necessària per enviar un correu electrònic
var smtpHostName = "[SMTP サーバー名]";
var smtpPort = 587; // or 25
var smtpAuthUser = "[認証ユーザー名]";
var smtpAuthPassword = "[認証パスワードまたはアプリパスワード]";
Aquí és on definiu valors diferents en funció del servidor de correu (servidor SMTP) que utilitzeu. M'agradaria explicar alguns dels valors que estic establint al final d'aquest article, però bàsicament veure el lloc del meu servidor de correu.
Originalment, està escrit en appsettigs.json, etc., però és probable que es torni redundant com Consells.
Definir el contingut d'un correu electrònic
var from = "[送信者メールアドレス]";
var to = "[送り先メールアドレス]";
var subject = "テストメールの件名です。";
var body = "テストメールの本文です。\n改行です。";
var textFormat = TextFormat.Text;
Crec que aquesta part és la part corresponent, ja que és si normalment utilitzeu mailers, etc.
Atès que no està disponible per enviar des de disfressa en sistemes de correu recents, bàsicament establireu la mateixa adreça de correu electrònic que el vostre compte de correu electrònic.
TextFormat
es pot enviar en text o HTML. Si l'envieu en HTML, incrusteu etiquetes html a la part del cos.
Configurar la informació necessària per processar l'enviament de correus electrònics
// 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;
Bàsicament, és una forma de definir el valor definit anteriorment.
També podeu definir diversos De i Per a.
No està inclosa en la mostra, però també pot incloure CC i CCC. Si voleu incloure-la, afegiu-la de la mateixa manera que De o A de la manera següent:
message.Cc.Add(MailboxAddress.Parse(cc));
message.Bcc.Add(MailboxAddress.Parse(bcc));
També podeu canviar el nom de visualització del remitent o de la destinació si el destinatari del correu electrònic és compatible. En aquest cas, canvieu el codi de la manera següent:
message.From.Add(new MailboxAddress("送信者の名前", from));
message.To.Add(new MailboxAddress("送り先の名前", to));
Enviar correu electrònic
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);
Quan hàgiu acabat de definir el correu electrònic, l'heu acabat d'enviar.
La presentació SmtpClient
es fa en una instància de la classe. Dispose
Com using var
que és l'objectiu, es declara perquè es pugui alliberar automàticament.
Com que és una manera d'escriure C# 8.0, canvieu a la using
descripció normal de les versions anteriors.
SmtpClient.Connect
al servidor SMTP. Alguns servidors STMP requereixen connexions SSL o TLS, però SecureSocketOptions.Auto
l'especificació sol estar bé.
Si el servidor SMTP requereix autenticació, SmtpClient.Authenticate
especifiqueu un nom d'usuari i una contrasenya al mètode.
Quan s'hagi completat la SmtpClient.Send
connexió, envieu un correu electrònic al mètode.
Quan tot estigui fet, SmtpClient.Disconnect
desconnecta'l amb el mètode.
Tingueu en compte que tots aquests consells realitzen aquestes operacions com a operacions síncrones, però cada mètode també pot realitzar processament asíncron sota el nom xxxxxAsync. Utilitzeu-lo segons calgui.
Com enviar fitxers adjunts
Per enviar un MimeMessage.Body
fitxer adjunt, canvieu el valor definit de la manera següent:
// 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();
En el codi anterior, el fitxer emmagatzemat localment és un fitxer adjunt, però les dades poden ser qualsevol cosa perquè només ha de ser una matriu de bytes o una seqüència. Enviament d'un fitxer JPEG com a exemple.
MimeMessage.Body
El valor que heu definit com a BodyBuilder
.
El text del cos TextPart
difereix del i les propietats a les quals està definit són diferents, ja siguin text o HTML.
Tingueu en compte que, fins i tot si establiu ambdues, la primera opció s'esborrarà.
El fitxer adjunt BodyBuilder.Attachments
s'afegeix a la propietat.
Els arguments són "nom del fitxer adjunt", "dades adjuntes" i "tipus de contingut (MIME)".
Tingueu en compte que és possible que la part receptora no identifiqui el nom del fitxer adjunt tret que afegiu una extensió.
ContentType
el valor al qual esteu definiu variarà en funció del format de fitxer.
Si cerqueu a Internet al voltant del "format de fitxer MIME", podreu veure la combinació.
BodyBuilder.ToMessageBody
Finalment, truqueu al mètode i establiu-lo al MimeMessage.Body
.
Quant a l'especificació d'un servidor SMTP
El servidor SMTP per a l'enviament de correu té una configuració diferent en funció del servidor de correu que utilitzeu. El següent és un exemple, de manera que si no hi ha tal cosa, comproveu l'ajuda del servidor que esteu utilitzant.
A més, atès que la informació és a partir d'abril de 2021, la informació pot haver canviat en l'actualitat.
servei correu el de verificació passosAutenticació | del port del servidor SMTP del | de | Si utilitzeu | xifratge | en dos |
---|---|---|---|---|---|
Outlook.com Part 1 | smtp.office365.com | 587 | Nom d'usuari i contrasenya | ?? | STARTTLS |
Outlook.com Part 2 | smtp-mail.outlook.com | 587 | Nom d'usuari i contrasenya | Obtenir la contrasenya de l'aplicació i definir-la com a contrasenya | STARTTLS |
Gmail | smtp.gmail.com | 465(SSL) o 587(TLS) | Nom d'usuari i contrasenya | Obtenir la contrasenya de l'aplicació i definir-la com a contrasenya | SSL o TLS o STARTTLS |
Yahoo! Correu | smtp.mail.yahoo.co.jp | 465 | Nom d'usuari i contrasenya | ?? | Tipus desconegut |
OCN | smtp.ocn.ne.jp | 465 | Nom d'usuari i contrasenya | ?? | SSL o TLS |