Envie e-mails usando MailKit
ambiente
- .NET
-
- .NET 5.0
- MailKit
-
- 2.11.1
inicialmente
Anteriormente, o smtpClient, uma classe para envio de e-mails, foi incluído como padrão, mas agora está preterido devido a desordenados.
Isso significa que o .NET não tem uma biblioteca de e-mail padrão, então você usará uma biblioteca de terceiros.
Atualmente, existe o "MailKit" como uma biblioteca mainstream, então eu gostaria de enviar um e-mail usando desta vez.
Apresentando o MailKit
Inicie o Visual Studio 2019 e crie um novo projeto de aplicativo para console (.NET). Se você estiver usando .NET, você terá alguma liberdade no tipo de projeto, então eu vou conhecer os detalhes.
Ao abrir o projeto, clique com o botão direito do mouse em Dependências do Solution Explorer e selecione Gerenciar pacotes NuGet.
Clique na guia Procurar e digite MailKit no campo de pesquisa para exibir o MailKit na lista abaixo.
Selecione MailKit na lista, verifique se a versão mais recente está selecionada e clique no botão Instalar.
Clique no botão OK.
Verifique se o pacote contém MailKit.
programa
A seguir, o código mínimo para envio de e-mails.
Você define as informações que precisa para seus e-mails na primeira metade do seu código e usa esses valores para enviar e-mails no segundo semestre. Você deve ser capaz de usar a segunda metade do código de forma fixa, simplesmente alterando a definição do primeiro semestre conforme necessário.
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);
}
}
}
Defina as informações necessárias para enviar um e-mail
var smtpHostName = "[SMTP サーバー名]";
var smtpPort = 587; // or 25
var smtpAuthUser = "[認証ユーザー名]";
var smtpAuthPassword = "[認証パスワードまたはアプリパスワード]";
É aqui que você define valores diferentes dependendo de qual servidor de e-mail (servidor SMTP) você usa. Eu gostaria de explicar alguns dos valores que estou definindo no final deste artigo, mas basicamente ver o site do meu servidor de e-mail.
Originalmente, ele é escrito em appsettigs.json, etc., mas é premeditado, mas se torna redundante como Dicas.
Defina o conteúdo de um e-mail
var from = "[送信者メールアドレス]";
var to = "[送り先メールアドレス]";
var subject = "テストメールの件名です。";
var body = "テストメールの本文です。\n改行です。";
var textFormat = TextFormat.Text;
Eu acho que esta parte é a parte correspondente como é se você normalmente usar carteiros etc.
Uma vez que não está disponível para enviar disfarçado em sistemas de e-mail recentes, basicamente você definirá o mesmo endereço de e-mail que sua conta de e-mail.
TextFormat
pode ser enviado em texto ou HTML. Se você enviá-lo em HTML, incorpore tags html na parte do corpo.
Configure as informações necessárias para processar o envio de e-mails
// 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;
Basicamente, é uma forma de definir o valor definido acima.
Você também pode definir vários De e Para.
Não está incluído na amostra, mas também pode incluir CC e BCC. Se você quiser incluí-lo, adicione-o da mesma forma que De ou Para o seguinte:
message.Cc.Add(MailboxAddress.Parse(cc));
message.Bcc.Add(MailboxAddress.Parse(bcc));
Você também pode alterar o nome de exibição do remetente ou destino se o destinatário do e-mail for suportado. Nesse caso, altere o código da seguinte forma:
message.From.Add(new MailboxAddress("送信者の名前", from));
message.To.Add(new MailboxAddress("送り先の名前", to));
Enviar e-mail
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);
Quando você terminar de definir seu e-mail, você está feito para enviá-lo.
A submissão é SmtpClient
feita em uma instância da classe. Dispose
Por ser using var
o alvo, ele é declarado para que possa ser liberado automaticamente.
Uma vez que é uma maneira de escrever C# 8.0, por favor mude para a using
descrição normal para versões anteriores.
SmtpClient.Connect
método para o servidor SMTP. Alguns servidores STMP requerem conexões SSL ou TLS, mas SecureSocketOptions.Auto
especificar geralmente é bom.
Se o servidor SMTP exigir autenticação, SmtpClient.Authenticate
especifique um nome de usuário e senha no método.
Quando a conexão estiver SmtpClient.Send
concluída, envie um e-mail no método.
Quando tudo estiver feito, SmtpClient.Disconnect
desconecte-o com o método.
Observe que todas essas dicas executam essas operações como operações síncronias, mas cada método também pode realizar processamento assíncrocros sob o nome xxxxxAsync. Use conforme necessário.
Como enviar anexos
Para enviar um MimeMessage.Body
anexo, altere o valor definido para o seguinte:
// 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();
No código acima, o arquivo armazenado localmente é um anexo, mas os dados podem ser qualquer coisa porque ele só tem que ser um conjunto de byte ou Stream. Enviando um arquivo JPEG como exemplo.
MimeMessage.Body
O valor que você define para BodyBuilder
construir como .
O texto do corpo TextPart
difere de , e as propriedades para as quais ele está definido são diferentes, seja texto ou HTML.
Por favor, note que mesmo que você defina ambos, a primeira configuração será apagada.
O anexo é BodyBuilder.Attachments
adicionado à propriedade.
Os argumentos são "nome de anexo", "dados de anexo" e "tipo de conteúdo (MIME)".
Observe que o nome do anexo não pode ser identificado pela parte receptora, a menos que você adicione uma extensão.
ContentType
o valor que você definiu varia de acordo com o formato do arquivo.
Se você pesquisar na Internet em torno do "FORMATO DE ARQUIVO MIME", você poderá ver a combinação.
BodyBuilder.ToMessageBody
Finalmente, chame o método e configure-o para MimeMessage.Body
.
Sobre a especificação de um servidor SMTP
O servidor SMTP para envio de e-mails tem configurações diferentes dependendo do servidor de e-mail que você usa. A seguir, um exemplo, então se não houver tal coisa, verifique a ajuda do servidor que você está usando.
Além disso, como as informações são de abril de 2021, as informações podem ter mudado no momento.
serviço de estiver usandoAutenticação | da porta do servidor SMTP do | correio | Se você | criptografia | de verificação em duas etapas |
---|---|---|---|---|---|
Outlook.com Parte 1 | smtp.office365.com | 587 | Nome de usuário e senha | ?? | STARTTLS |
Outlook.com Parte 2 | smtp-mail.outlook.com | 587 | Nome de usuário e senha | Obtenha a senha do aplicativo e defina-a como senha | STARTTLS |
Gmail | smtp.gmail.com | 465(SSL) ou 587(TLS) | Nome de usuário e senha | Obtenha a senha do aplicativo e defina-a como senha | SSL ou TLS ou STARTTLS |
Yahoo! Correio | smtp.mail.yahoo.co.jp | 465 | Nome de usuário e senha | ?? | Tipo desconhecido |
OCN | smtp.ocn.ne.jp | 465 | Nome de usuário e senha | ?? | SSL ou TLS |