Skicka e-post med MailKit
miljö
- .NET (på alla)
-
- .NET 5,0
- MailKit (e-post)
-
- 2.11.1
först
Tidigare inkluderades smtpClient, en klass för att skicka e-postmeddelanden, som standard, men är nu inaktuell på grund av out-of-specifications.
Det innebär att .NET inte har något vanligt utskicksbibliotek, så du kommer att använda ett bibliotek från tredje part.
För närvarande finns det "MailKit" som ett vanligt bibliotek, så jag skulle vilja skicka ett e-postmeddelande med den här tiden.
Vi presenterar MailKit
Starta Visual Studio 2019 och skapa ett nytt konsolappsprojekt (.NET). Om du använder .NET har du viss frihet i projekttypen, så jag förgrundsbeser dig till detaljerna.
När du öppnar projektet högerklickar du på Beroenden från Solution Explorer och väljer Hantera nuget-paket.
Klicka på fliken Bläddra och skriv MailKit i sökfältet för att visa MailKit i listan nedan.
Välj MailKit i listan, kontrollera att den senaste versionen är markerad och klicka sedan på knappen Installera.
Klicka på ok-knappen.
Kontrollera att paketet innehåller MailKit.
program
Följande är minimikoden för att skicka e-postmeddelanden.
Du definierar den information du behöver för dina e-postmeddelanden under den första halvan av koden och använder dessa värden för att skicka e-post under andra halvåret. Du bör kunna använda den andra halvan av koden på ett fast sätt genom att helt enkelt ändra definitionen av den första halvleken efter behov.
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);
}
}
}
Definiera den information som behövs för att skicka ett e-postmeddelande
var smtpHostName = "[SMTP サーバー名]";
var smtpPort = 587; // or 25
var smtpAuthUser = "[認証ユーザー名]";
var smtpAuthPassword = "[認証パスワードまたはアプリパスワード]";
Här anger du olika värden beroende på vilken e-postserver (SMTP-server) du använder. Jag vill förklara några av de värden jag anger i slutet av den här artikeln, men i princip se webbplatsen för min e-postserver.
Ursprungligen är det skrivet i appsettigs.json, etc., men det är försynt att det blir överflödigt som Tips.
Definiera innehållet i ett e-postmeddelande
var from = "[送信者メールアドレス]";
var to = "[送り先メールアドレス]";
var subject = "テストメールの件名です。";
var body = "テストメールの本文です。\n改行です。";
var textFormat = TextFormat.Text;
Jag tror att denna del är motsvarande del som den är om du normalt använder mailers etc.
Eftersom det inte är tillgängligt att skicka från förklädd i de senaste e-postsystemen, kommer du i princip att ställa in samma e-postadress som ditt e-postkonto.
TextFormat
kan skickas i text eller HTML. Om du skickar den i HTML bäddar du in html-taggar i brödtextdelen.
Konfigurera den information som behövs för att behandla e-postmeddelanden
// 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;
I grund och botten är det en form av att ställa in värdet som definieras ovan.
Du kan också ställa in flera Från och Till.
Det ingår inte i provet, men det kan också inkludera CC och BCC. Om du vill inkludera det lägger du till det på samma sätt som Från eller Till enligt följande:
message.Cc.Add(MailboxAddress.Parse(cc));
message.Bcc.Add(MailboxAddress.Parse(bcc));
Du kan också ändra visningsnamnet för avsändaren eller målet om mottagaren av e-postmeddelandet stöds. Ändra i så fall koden på följande sätt:
message.From.Add(new MailboxAddress("送信者の名前", from));
message.To.Add(new MailboxAddress("送り先の名前", to));
Skicka e-post
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);
När du är klar med att definiera din e-post är du klar med att skicka den.
Inlämning SmtpClient
sker i en instans av klassen. Dispose
Eftersom using var
det är målet deklareras det i så att det kan släppas automatiskt.
Eftersom det är ett sätt att skriva C # 8.0, vänligen ändra till den using
normala beskrivningen för tidigare versioner.
SmtpClient.Connect
metoden till SMTP-servern. Vissa STMP-servrar kräver SSL- eller TLS-anslutningar, SecureSocketOptions.Auto
men det går vanligtvis bra att ange.
Om SMTP-servern kräver SmtpClient.Authenticate
autentisering anger du ett användarnamn och lösenord i metoden.
När anslutningen är klar SmtpClient.Send
skickar du ett e-postmeddelande i metoden.
När allt är klart, SmtpClient.Disconnect
koppla bort det med metoden.
Observera att detta tips alla utför dessa åtgärder som synkrona åtgärder, men varje metod kan också utföra asynkron bearbetning under namnet xxxxxAsync. Använd efter behov.
Så här skickar du bifogade filer
Om du vill skicka MimeMessage.Body
en bifogad fil ändrar du värdet till följande:
// 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();
I koden ovan är filen som lagras lokalt en bifogad fil, men data kan vara vad som helst eftersom det bara behöver vara en bytematris eller Stream. Skicka en JPEG-fil som ett exempel.
MimeMessage.Body
Värdet du anger ska BodyBuilder
byggas som .
Brödtext TextPart
skiljer sig från och egenskaperna som den är inställd på är olika, oavsett om det gäller text eller HTML.
Observera att även om du ställer in båda raderas den första inställningen.
Den bifogade BodyBuilder.Attachments
filen läggs till i egenskapen.
Argumenten är "bifogat namn", "bifogade data" och "innehållstyp (MIME)".
Observera att namnet på den bifogade filen kanske inte identifieras av den mottagande parten om du inte lägger till ett tillägg.
ContentType
Värdet du anger varierar beroende på filformatet.
Om du söker på Internet runt "filformatet MIME" kan du se kombinationen.
BodyBuilder.ToMessageBody
Slutligen anropar du metoden och ställer in den på MimeMessage.Body
.
Om att ange en SMTP-server
SMTP-servern för att skicka e-post har olika inställningar beroende på vilken e-postserver du använder. Följande är ett exempel, så om det inte finns något sådant, vänligen kontrollera hjälpen på servern du använder.
Eftersom informationen är från och med april 2021 kan informationen dessutom ha ändrats för närvarande.
Autentisering av | SMTP-serverport för e-posttjänst | Om du använder | tvåstegsverifieringskryptering | ||
---|---|---|---|---|---|
Outlook.com del 1 | smtp.office365.com | 587 | Användarnamn och lösenord | ?? | STARTTLS (STARTTLS) |
Outlook.com del 2 | smtp-mail.outlook.com | 587 | Användarnamn och lösenord | Hämta applösenord och ställ in det på lösenord | STARTTLS (STARTTLS) |
Gmail (gmail) | smtp.gmail.com | 465 (SSL) eller 587(TLS) | Användarnamn och lösenord | Hämta applösenord och ställ in det på lösenord | SSL eller TLS eller STARTTLS |
Yahoo, skicka post | smtp.mail.yahoo.co.jp | 465 | Användarnamn och lösenord | ?? | Okänd typ |
OCN (ocn) | smtp.ocn.ne.jp | 465 | Användarnamn och lösenord | ?? | SSL eller TLS |