E-mails verzenden met MailKit
milieu
- .NET
-
- .NET 5.0
- MailKit
-
- 2.11.1
eerst
Voorheen werd smtpClient, een klasse voor het verzenden van e-mails, standaard opgenomen, maar is nu afgeschaft vanwege niet-specificaties.
Dit betekent dat .NET geen standaard mailingbibliotheek heeft, dus u gebruikt een bibliotheek van derden.
Momenteel is er "MailKit" als een reguliere bibliotheek, dus ik wil deze keer een e-mail sturen.
Maak kennis met MailKit
Start Visual Studio 2019 en maak een nieuw console-appproject (.NET). Als je .NET gebruikt, heb je wat vrijheid in het projecttype, dus ik zal de details voor-kennen.
Wanneer u het project opent, klikt u met de rechtermuisknop op Afhankelijkheden uit Solution Explorer en selecteert u NuGet-pakketten beheren.
Klik op het tabblad Bladeren en typ MailKit in het zoekveld om MailKit in de onderstaande lijst weer te geven.
Selecteer MailKit in de lijst, controleer of de nieuwste versie is geselecteerd en klik vervolgens op de knop Installeren.
Klik op de knop OK.
Controleer of het pakket MailKit bevat.
programma
Hieronder volgt de minimale code voor het verzenden van e-mails.
U definieert de informatie die u nodig hebt voor uw e-mails in de eerste helft van uw code en gebruikt deze waarden om e-mail in de tweede helft te verzenden. U moet de tweede helft van de code op een vaste manier kunnen gebruiken door simpelweg de definitie van de eerste helft naar behoefte te wijzigen.
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);
}
}
}
Definieer de informatie die nodig is om een e-mail te verzenden
var smtpHostName = "[SMTP サーバー名]";
var smtpPort = 587; // or 25
var smtpAuthUser = "[認証ユーザー名]";
var smtpAuthPassword = "[認証パスワードまたはアプリパスワード]";
Hier stelt u verschillende waarden in, afhankelijk van de e-mailserver (SMTP-server) die u gebruikt. Ik wil graag een paar van de waarden uitleggen die ik aan het einde van dit artikel stel, maar in feite de site van mijn e-mailserver bekijken.
Oorspronkelijk is het geschreven in appsettigs.json, enz., maar het is voorbeschouwd dat het overbodig wordt als Tips.
De inhoud van een e-mail definiëren
var from = "[送信者メールアドレス]";
var to = "[送り先メールアドレス]";
var subject = "テストメールの件名です。";
var body = "テストメールの本文です。\n改行です。";
var textFormat = TextFormat.Text;
Ik denk dat dit deel het overeenkomstige deel is zoals het is als je normaal mailers etc. gebruikt.
Omdat het niet beschikbaar is om vermomd te verzenden in recente e-mailsystemen, stelt u in principe hetzelfde e-mailadres in als uw e-mailaccount.
TextFormat
kan worden verzonden in tekst of HTML. Als u het in HTML verzendt, sluit u html-tags in het hoofdgedeelte in.
De informatie instellen die nodig is om het verzenden van e-mails te verwerken
// 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;
Kortom, het is een vorm van het instellen van de hierboven gedefinieerde waarde.
U kunt ook meerdere van en naar instellen.
Het is niet opgenomen in het monster, maar het kan ook CC en BCC bevatten. Als u het wilt opnemen, voegt u het als volgt toe als Van of Aan:
message.Cc.Add(MailboxAddress.Parse(cc));
message.Bcc.Add(MailboxAddress.Parse(bcc));
U kunt ook de weergavenaam van de afzender of bestemming wijzigen als de ontvanger van de e-mail wordt ondersteund. Wijzig in dat geval de code als volgt:
message.From.Add(new MailboxAddress("送信者の名前", from));
message.To.Add(new MailboxAddress("送り先の名前", to));
E-mail verzenden
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);
Als u klaar bent met het definiëren van uw e-mail, bent u klaar met het verzenden ervan.
Inzending SmtpClient
gebeurt in een instantie van de klas. Dispose
Omdat het using var
het doel is, wordt het gedeclareerd zodat het automatisch kan worden vrijgegeven.
Aangezien het een manier is om C # 8.0 te schrijven, kunt u overschakelen naar de using
normale beschrijving voor eerdere versies.
SmtpClient.Connect
naar de SMTP-server. Sommige STMP-servers vereisen SSL- of TLS-verbindingen, maar SecureSocketOptions.Auto
opgeven is meestal prima.
Als de SMTP-server verificatie vereist, SmtpClient.Authenticate
geeft u een gebruikersnaam en wachtwoord op in de methode.
Wanneer de verbinding is SmtpClient.Send
voltooid, verzendt u een e-mail in de methode.
Wanneer alles klaar is, SmtpClient.Disconnect
koppelt u het los met de methode.
Houd er rekening mee dat deze tips al deze bewerkingen uitvoeren als synchrone bewerkingen, maar dat elke methode ook asynchrone verwerking kan uitvoeren onder de naam xxxxxAsync. Gebruik indien nodig.
Bijlagen verzenden
Als u een MimeMessage.Body
bijlage wilt verzenden, wijzigt u de ingestelde waarde als volgt:
// 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();
In de bovenstaande code is het bestand dat lokaal is opgeslagen een bijlage, maar de gegevens kunnen van alles zijn omdat het alleen een bytearray of stream hoeft te zijn. Een JPEG-bestand verzenden als voorbeeld.
MimeMessage.Body
De waarde die u instelt om te BodyBuilder
bouwen als .
Hoofdtekst TextPart
verschilt van en de eigenschappen waaraan deze is ingesteld, verschillen, of het nu tekst of HTML is.
Houd er rekening mee dat zelfs als u beide instelt, de eerste instelling wordt gewist.
De bijlage wordt BodyBuilder.Attachments
aan de eigenschap toegevoegd.
De argumenten zijn "bijlagenaam", "bijlagegegevens" en "inhoudstype (MIME)".
Houd er rekening mee dat de naam van de bijlage mogelijk niet wordt geïdentificeerd door de ontvangende partij, tenzij u een extensie toevoegt.
ContentType
de waarde die u instelt, is afhankelijk van de bestandsindeling.
Als u op internet zoekt rond de "bestandsformaat MIME", ziet u de combinatie.
BodyBuilder.ToMessageBody
Roep ten slotte de methode aan en stel deze in op MimeMessage.Body
.
Informatie over het opgeven van een SMTP-server
De SMTP-server voor het verzenden van e-mail heeft verschillende instellingen, afhankelijk van de e-mailserver die u gebruikt. Het volgende is een voorbeeld, dus als er niet zoiets bestaat, controleer dan de hulp van de server die u gebruikt.
Aangezien de informatie vanaf april 2021 is, kan de informatie op dit moment zijn gewijzigd.
gebruiktSmtp-serverpoortverificatie van | e-mailservice | Als u | verificatieversleuteling | in twee stappen | |
---|---|---|---|---|---|
Outlook.com deel 1 | smtp.office365.com | 587 | Gebruikersnaam en wachtwoord | ?? | STARTTLS |
Outlook.com deel 2 | smtp-mail.outlook.com | 587 | Gebruikersnaam en wachtwoord | App-wachtwoord kregen en instellen op wachtwoord | STARTTLS |
Gmail | smtp.gmail.com | 465(SSL) of 587(TLS) | Gebruikersnaam en wachtwoord | App-wachtwoord kregen en instellen op wachtwoord | SSL of TLS of STARTTLS |
Yahoo! E-mail | smtp.mail.yahoo.co.jp | 465 | Gebruikersnaam en wachtwoord | ?? | Onbekend type |
OCN | smtp.ocn.ne.jp | 465 | Gebruikersnaam en wachtwoord | ?? | SSL of TLS |