Enviar correos electrónicos usando MailKit
medio ambiente
- .NET
-
- .NET 5.0
- MailKit
-
- 2.11.1
al principio
Anteriormente, smtpClient, una clase para enviar correos electrónicos, se incluía de serie, pero ahora está en desuso debido a las especificaciones fuera de las especificaciones.
Esto significa que .NET no tiene una biblioteca de correo estándar, por lo que usará una biblioteca de terceros.
Actualmente, hay "MailKit" como biblioteca principal, así que me gustaría enviar un correo electrónico usando esta vez.
Presentación de MailKit
Inicie Visual Studio 2019 y cree un nuevo proyecto de aplicación de consola (.NET). Si usa .NET, tendrá cierta libertad en el tipo de proyecto, por lo que conoceré los detalles.
Al abrir el proyecto, haga clic con el botón secundario en Dependencias en el Explorador de soluciones y seleccione Administrar paquetes NuGet.
Haga clic en la pestaña Examinar y escriba MailKit en el campo de búsqueda para mostrar MailKit en la lista siguiente.
Seleccione MailKit en la lista, compruebe que la versión más reciente está seleccionada y, a continuación, haga clic en el botón Instalar.
Haga clic en el botón Aceptar.
Compruebe que el paquete contiene MailKit.
programa
El siguiente es el código mínimo para enviar correos electrónicos.
Defina la información que necesita para sus correos electrónicos en la primera mitad del código y utilice esos valores para enviar correo en la segunda mitad. Debería poder utilizar la segunda mitad del código de forma fija simplemente cambiando la definición de la primera mitad según sea necesario.
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ón necesaria para enviar un correo electrónico
var smtpHostName = "[SMTP サーバー名]";
var smtpPort = 587; // or 25
var smtpAuthUser = "[認証ユーザー名]";
var smtpAuthPassword = "[認証パスワードまたはアプリパスワード]";
Aquí es donde se establecen valores diferentes dependiendo del servidor de correo (servidor SMTP) que utilice. Me gustaría explicar algunos de los valores que estoy estableciendo al final de este artículo, pero básicamente ver el sitio de mi servidor de correo.
Originalmente, está escrito en appsettigs.json, etc., pero es anterior a través de que se vuelve redundante como Sugerencias.
Definir el contenido de un correo electrónico
var from = "[送信者メールアドレス]";
var to = "[送り先メールアドレス]";
var subject = "テストメールの件名です。";
var body = "テストメールの本文です。\n改行です。";
var textFormat = TextFormat.Text;
Creo que esta parte es la parte correspondiente como lo es si normalmente utiliza correos, etc.
Dado que no está disponible para enviar disfrazado en los sistemas de correo recientes, básicamente establecerá la misma dirección de correo electrónico que su cuenta de correo electrónico.
TextFormat
se puede enviar en texto o HTML. Si lo envía en HTML, incruste etiquetas html en la parte del cuerpo.
Configure la información necesaria para procesar el envío de correos electrónicos
// 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ásicamente, es una forma de establecer el valor definido anteriormente.
También puede establecer varios From y To.
No está incluido en la muestra, pero también puede incluir CC y BCC. Si desea incluirlo, agréguelo de la misma manera que From o To de la siguiente manera:
message.Cc.Add(MailboxAddress.Parse(cc));
message.Bcc.Add(MailboxAddress.Parse(bcc));
También puede cambiar el nombre para mostrar del remitente o destino si se admite el destinatario del correo electrónico. En ese caso, cambie el código de la siguiente manera:
message.From.Add(new MailboxAddress("送信者の名前", from));
message.To.Add(new MailboxAddress("送り先の名前", to));
Enviar correo electrónico
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);
Cuando haya terminado de definir su correo electrónico, ha terminado de enviarlo.
El envío SmtpClient
se realiza en una instancia de la clase. Dispose
Dado que using var
es el destino, se declara para que se pueda liberar automáticamente.
Puesto que es una forma de escribir C# 8.0, cambie a la using
descripción normal para versiones anteriores.
SmtpClient.Connect
método para el servidor SMTP. Algunos servidores STMP requieren conexiones SSL o TLS, pero SecureSocketOptions.Auto
especificar suele estar bien.
Si el servidor SMTP requiere autenticación, SmtpClient.Authenticate
especifique un nombre de usuario y una contraseña en el método.
Cuando se complete la SmtpClient.Send
conexión, envíe un correo electrónico en el método.
Cuando todo esté hecho, SmtpClient.Disconnect
desconécttelo con el método.
Tenga en cuenta que todas estas sugerencias realizan estas operaciones como operaciones sincrónicas, pero cada método también puede realizar un procesamiento asincrónico bajo el nombre xxxxxAsync. Úsalo según sea necesario.
Cómo enviar archivos adjuntos
Para enviar un MimeMessage.Body
archivo adjunto, cambie el valor establecido de la siguiente manera:
// 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 código anterior, el archivo almacenado localmente es un archivo adjunto, pero los datos pueden ser cualquier cosa porque solo tiene que ser una matriz de bytes o Stream. Enviar un archivo JPEG como ejemplo.
MimeMessage.Body
El valor que se establece para BodyBuilder
compilar como .
El texto del cuerpo TextPart
difiere de y las propiedades en las que se establece son diferentes, ya sea texto o HTML.
Tenga en cuenta que incluso si establece ambos, se borrará la primera configuración.
Los datos adjuntos se BodyBuilder.Attachments
agregan a la propiedad.
Los argumentos son "nombre adjunto", "datos adjuntos" y "tipo de contenido (MIME)".
Tenga en cuenta que el nombre del archivo adjunto no puede ser identificado por la parte receptora a menos que agregue una extensión.
ContentType
el valor al que establezca variará en función del formato de archivo.
Si busca en Internet alrededor del "formato de archivo MIME", verá la combinación.
BodyBuilder.ToMessageBody
Por último, llame al método y estad en MimeMessage.Body
.
Acerca de especificar un servidor SMTP
El servidor SMTP para enviar correo tiene diferentes configuraciones en función del servidor de correo que utilice. El siguiente es un ejemplo, por lo que si no existe tal cosa, compruebe la ayuda del servidor que está utilizando.
Además, dado que la información es a partir de abril de 2021, la información puede haber cambiado en la actualidad.
del servicio de está utilizando cifrado de verificación en dosAutenticación | de puerto de servidor SMTP | correo Si | pasos | ||
---|---|---|---|---|---|
Outlook.com Parte 1 | smtp.office365.com | 587 | Nombre de usuario y contraseña | ?? | STARTTLS |
Outlook.com Parte 2 | smtp-mail.outlook.com | 587 | Nombre de usuario y contraseña | Obtener la contraseña de la aplicación y establecerla en contraseña | STARTTLS |
Gmail | smtp.gmail.com | 465 (SSL) o 587(TLS) | Nombre de usuario y contraseña | Obtener la contraseña de la aplicación y establecerla en contraseña | SSL o TLS o STARTTLS |
Yahoo! Mail | smtp.mail.yahoo.co.jp | 465 | Nombre de usuario y contraseña | ?? | Tipo desconocido |
OCN | smtp.ocn.ne.jp | 465 | Nombre de usuario y contraseña | ?? | SSL o TLS |