Wysyłanie wiadomości e-mail przy użyciu zestawu MailKit
środowisko
- .NET (NET)
-
- .NET 5,0
- Zestaw mailkit
-
- 2.11.1
Na początku
Wcześniej smtpClient, klasa do wysyłania wiadomości e-mail, została uwzględniona w standardzie, ale jest teraz przestarzała ze względu na brak specyfikacji.
Oznacza to, że .NET nie ma standardowej biblioteki mailingowej, więc będzie używana biblioteka innej firmy.
Obecnie istnieje "MailKit" jako biblioteka głównego nurtu, więc chciałbym wysłać e-mail za pomocą tego czasu.
Wprowadzenie MailKit
Uruchom program Visual Studio 2019 i utwórz nowy projekt aplikacji konsoli (.NET). Jeśli używasz .NET, będziesz miał trochę swobody w typie projektu, więc będę fore-znać szczegóły.
Po otwarciu projektu kliknij prawym przyciskiem myszy zależności z Eksploratora rozwiązań i wybierz pozycję Zarządzaj pakietami NuGet.
Kliknij kartę Przeglądaj i wpisz mailkit w polu wyszukiwania, aby wyświetlić zestaw MailKit na poniższej liście.
Wybierz pozycję MailKit z listy, sprawdź, czy jest wybrana najnowsza wersja, a następnie kliknij przycisk Zainstaluj.
Kliknij przycisk OK.
Sprawdź, czy pakiet zawiera Zestaw MailKit.
program
Poniżej znajduje się minimalny kod do wysyłania wiadomości e-mail.
Definiujesz informacje potrzebne do obsługi wiadomości e-mail w pierwszej połowie kodu i używasz tych wartości do wysyłania poczty w drugiej połowie. Powinieneś być w stanie korzystać z drugiej połowy kodu w stały sposób, po prostu zmieniając definicję pierwszej połowy w razie potrzeby.
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);
}
}
}
Definiowanie informacji potrzebnych do wysłania wiadomości e-mail
var smtpHostName = "[SMTP サーバー名]";
var smtpPort = 587; // or 25
var smtpAuthUser = "[認証ユーザー名]";
var smtpAuthPassword = "[認証パスワードまたはアプリパスワード]";
W tym miejscu ustawia się różne wartości w zależności od używanego serwera poczty (serwera SMTP). Chciałbym wyjaśnić kilka wartości, które ustawiam na końcu tego artykułu, ale w zasadzie zobacz witrynę mojego serwera pocztowego.
Pierwotnie jest napisany w appsettigs.json, itp., ale jest forethough staje się zbędne jako Porady.
Definiowanie zawartości wiadomości e-mail
var from = "[送信者メールアドレス]";
var to = "[送り先メールアドレス]";
var subject = "テストメールの件名です。";
var body = "テストメールの本文です。\n改行です。";
var textFormat = TextFormat.Text;
Myślę, że ta część jest odpowiednia część jak to jest, jeśli normalnie używać listonoszy itp.
Ponieważ nie jest dostępny do wysyłania w przebraniu w ostatnich systemach pocztowych, w zasadzie ustawisz ten sam adres e-mail co twoje konto e-mail.
TextFormat
mogą być wysyłane w tekście lub html. Jeśli wyślesz go w formacie HTML, osadź tagi html w części treści.
Konfigurowanie informacji potrzebnych do przetwarzania wysyłania wiadomości e-mail
// 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;
Zasadniczo jest to forma ustawienia wartości zdefiniowanej powyżej.
Można również ustawić wiele od i do.
Nie jest uwzględniony w próbce, ale może również zawierać CC i BCC. Jeśli chcesz go dołączyć, dodaj go w taki sam sposób, jak od lub do w następujący sposób:
message.Cc.Add(MailboxAddress.Parse(cc));
message.Bcc.Add(MailboxAddress.Parse(bcc));
Możesz również zmienić nazwę wyświetlaną nadawcy lub miejsca docelowego, jeśli adresat wiadomości e-mail jest obsługiwany. W takim przypadku zmień kod w następujący sposób:
message.From.Add(new MailboxAddress("送信者の名前", from));
message.To.Add(new MailboxAddress("送り先の名前", to));
Wyślij wiadomość 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);
Po zakończeniu definiowania wiadomości e-mail, skończysz ją wysyłać.
Przesyłanie odbywa SmtpClient
się w wystąpieniu klasy. Dispose
Ponieważ jest to using var
cel, jest zadeklarowany w taki sposób, że może być zwolniony automatycznie.
Ponieważ jest to sposób pisania języka C# 8.0, należy zmienić using
normalny opis dla wcześniejszych wersji.
SmtpClient.Connect
do serwera SMTP. Niektóre serwery STMP wymagają połączeń SSL lub TLS, ale SecureSocketOptions.Auto
określenie jest zwykle w porządku.
Jeśli serwer SMTP wymaga uwierzytelniania, SmtpClient.Authenticate
określ nazwę użytkownika i hasło w metodzie.
Po zakończeniu połączenia SmtpClient.Send
wyślij wiadomość e-mail w metodzie.
Gdy wszystko zostanie zrobione, SmtpClient.Disconnect
odłącz go od metody.
Należy zauważyć, że wszystkie te porady wykonują te operacje jako operacje synchroniczne, ale każda metoda może również wykonywać przetwarzanie asynchroniczne pod nazwą xxxxxAsync. Użyj w razie potrzeby.
Jak wysyłać załączniki
Aby wysłać MimeMessage.Body
załącznik, zmień ustawioną wartość na następującą:
// 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();
W powyższym kodzie plik przechowywany lokalnie jest załącznikiem, ale dane mogą być wszystkim, ponieważ musi to być tylko tablica bajtów lub Strumień. Wysyłanie pliku JPEG jako przykład.
MimeMessage.Body
Wartość ustawiona na BodyBuilder
kompilację jako .
Tekst podstawowy TextPart
różni się od tekstu , a właściwości, do których jest ustawiony, różnią się, czy to tekst, czy html.
Należy pamiętać, że nawet jeśli ustawisz oba, pierwsze ustawienie zostanie wymazane.
Załącznik zostanie BodyBuilder.Attachments
dodany do właściwości.
Argumenty to "nazwa załącznika", "dane załączników" i "typ zawartości (MIME)".
Należy zauważyć, że nazwa załącznika może nie być identyfikowana przez stronę odbierającą, chyba że dodasz rozszerzenie.
ContentType
ustawiona wartość będzie się różnić w zależności od formatu pliku.
Jeśli szukasz w Internecie wokół "format pliku MIME", będzie można zobaczyć kombinację.
BodyBuilder.ToMessageBody
Na koniec wywołaj metodę i ustaw ją na MimeMessage.Body
.
Określanie serwera SMTP — informacje
Serwer SMTP do wysyłania poczty ma różne ustawienia w zależności od używanego serwera poczty. Oto przykład, więc jeśli nie ma czegoś takiego, sprawdź pomoc serwera, którego używasz.
Ponadto, ponieważ informacje te są dostępne od kwietnia 2021 r., informacje te mogły ulec zmianie w chwili obecnej.
usługi poczty szyfrowaniaUwierzytelnianie | portu serwera SMTP | Jeśli używasz | weryfikacji dwuetapowej | ||
---|---|---|---|---|---|
Outlook.com część 1 | smtp.office365.com | 587 | Nazwa użytkownika i hasło | ?? | STARTTLS |
Outlook.com część 2 | smtp-mail.outlook.com | 587 | Nazwa użytkownika i hasło | Pobierz hasło aplikacji i ustaw hasło | STARTTLS |
Gmail | smtp.gmail.com | 465(SSL) lub 587(TLS) | Nazwa użytkownika i hasło | Pobierz hasło aplikacji i ustaw hasło | SSL lub TLS lub STARTTLS |
Poczta Yahoo! | smtp.mail.yahoo.co.jp | 465 | Nazwa użytkownika i hasło | ?? | Nieznany typ |
ZOC | smtp.ocn.ne.jp | 465 | Nazwa użytkownika i hasło | ?? | SSL lub TLS |