Надсилання повідомлень електронної пошти за допомогою MailKit
середовище
- .NET (Мережа)
-
- .NET 5.0
- Набір повідомлень
-
- 2.11.1
Спочатку
Раніше smtpClient, клас для відправки електронних листів, був включений як стандартний, але тепер застарілий через застарілі специфікації.
Це означає, що .NET не має стандартної бібліотеки розсилки, тому ви будете використовувати бібліотеку сторонніх постачальників.
В даний час є "MailKit" в якості основної бібліотеки, тому я хотів би відправити електронний лист за допомогою цього разу.
Представляємо MailKit
Запустіть Visual Studio 2019 і створіть новий консольний додаток (.NET). Якщо ви використовуєте .NET, у вас буде певна свобода в типі проекту, тому я буду знати деталі.
Відкривши проект, клацніть правою кнопкою миші елемент Залежності з Провідника рішень і виберіть пункт Керування nuGet Packages.
Перейдіть на вкладку Огляд і введіть MailKit у поле пошуку, щоб відобразити MailKit у списку нижче.
Виберіть MailKit зі списку, переконайтеся, що вибрано останню версію, а потім натисніть кнопку Встановити.
Натисніть кнопку OK.
Переконайтеся, що пакунок містить MailKit.
програма
Нижче наведено мінімальний код для надсилання електронних листів.
Ви визначаєте інформацію, необхідну для ваших електронних листів у першій половині коду, і використовуєте ці значення для надсилання пошти у другій половині. Ви повинні мати можливість використовувати другу половину коду фіксованим способом, просто змінюючи визначення першої половини в міру необхідності.
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);
}
}
}
Визначення відомостей, необхідних для надсилання повідомлення електронної пошти
var smtpHostName = "[SMTP サーバー名]";
var smtpPort = 587; // or 25
var smtpAuthUser = "[認証ユーザー名]";
var smtpAuthPassword = "[認証パスワードまたはアプリパスワード]";
Тут ви встановлюєте різні значення в залежності від того, який поштовий сервер (СЕРВЕР SMTP) ви використовуєте. Я хотів би пояснити кілька значень, які я встановлюю в кінці цієї статті, але в основному побачити сайт мого поштового сервера.
Спочатку він написаний в appsettigs.json і т.д., але це передумови, він стає зайвим, як Поради.
Визначення вмісту повідомлення електронної пошти
var from = "[送信者メールアドレス]";
var to = "[送り先メールアドレス]";
var subject = "テストメールの件名です。";
var body = "テストメールの本文です。\n改行です。";
var textFormat = TextFormat.Text;
Я думаю, що ця частина є відповідною частиною, як це, якщо ви зазвичай використовуєте поштові розсилки і т.д.
Оскільки він недоступний для надсилання в маскуванні в останніх поштових системах, в основному ви вказате ту саму адресу електронної пошти, що і ваш обліковий запис електронної пошти.
TextFormat
можна надіслати в тексті або HTML. Якщо ви надсилаєте його у форматі HTML, вбудувати html-теги у основну частину.
Настроювання відомостей, необхідних для обробки надсилання повідомлень електронної пошти
// 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;
В основному, це форма встановлення значення, визначеного вище.
Також можна встановити кілька "Від" і "До".
Він не входить до вибірки, але також може включати CC і BCC. Якщо ви хочете включити його, додайте його так само, як Від або До наступним чином:
message.Cc.Add(MailboxAddress.Parse(cc));
message.Bcc.Add(MailboxAddress.Parse(bcc));
Ви також можете змінити коротке ім'я відправника або місця призначення, якщо одержувач електронної пошти підтримується. У такому разі змініть код наступним чином:
message.From.Add(new MailboxAddress("送信者の名前", from));
message.To.Add(new MailboxAddress("送り先の名前", to));
Надіслати повідомлення електронної пошти
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);
Коли ви визначите свою електронну пошту, ви будете надсилати її.
Надсилання SmtpClient
здійснюється в екземплярі класу. Dispose
Оскільки це using var
ціль, вона оголошена таким чином, щоб її можна було звільнити автоматично.
Оскільки це спосіб написання C# 8.0, будь ласка, змініть його на using
звичайний опис для попередніх версій.
SmtpClient.Connect
до сервера SMTP. Деякі сервери STMP вимагають з'єднань SSL або TLS, SecureSocketOptions.Auto
але зазвичай це добре.
Якщо сервер SMTP вимагає автентифікації, SmtpClient.Authenticate
укажіть ім'я користувача та пароль у методі.
Коли з'єднання буде SmtpClient.Send
завершено, надішліть повідомлення електронної пошти в методі.
Коли все буде зроблено, SmtpClient.Disconnect
від'єднайте його за допомогою методу.
Зауважте, що за допомогою цих підказок всі ці операції виконуються як синхронні операції, але кожен з методів також може виконувати асинхронну обробку під назвою xxxxxAsync. Використовуйте в міру необхідності.
Як надіслати вкладення
Щоб надіслати MimeMessage.Body
вкладення, змініть набір значень таким чином:
// 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();
У вищенаведеньому коді файл, що зберігається локально, є вкладенням, але дані можуть бути будь-чим, оскільки він повинен бути лише байт-масивом або потоком. Надсилання файлу JPEG як прикладу.
MimeMessage.Body
Значення, створене BodyBuilder
як .
Основний TextPart
текст відрізняється від , і властивості, до яких він встановлений, відрізняються, будь то текст або HTML.
Будь ласка, зауважте, що навіть якщо ви встановите обидва параметри, перший параметр буде стерто.
Вкладення BodyBuilder.Attachments
додається до властивості.
Аргументи: «ім'я вкладення», «дані вкладення» та «тип вмісту (MIME)».
Зауважте, що ім'я вкладення може не ідентифікуватися стороною-отримувачем, доки ви не додам розширення.
ContentType
значення, для яке встановлено, буде відрізнятися залежно від формату файлу.
Якщо ви шукаєте в Інтернеті навколо "формат файлу MIME", ви зможете побачити комбінацію.
BodyBuilder.ToMessageBody
Нарешті, викликати метод і встановити його в MimeMessage.Body
.
Відомості про визначення сервера SMTP
Сервер SMTP для надсилання пошти має різні параметри залежно від поштового сервера, який ви використовуєте. Нижче наведено приклад, тому, якщо такого немає, будь ласка, перевірте допомогу сервера, який ви використовуєте.
Крім того, оскільки інформація станом на квітень 2021 року, інформація, можливо, змінилася в даний час.
Автентифікація порту | сервера пошти SMTP | Якщо використовується | двостунакторне шифрування перевірки | ||
---|---|---|---|---|---|
Outlook.com частина 1 | smtp.office365.com | 587 | Ім'я користувача та пароль | ?? | ПОЧАТКОВІ TLS |
Outlook.com частина 2 | smtp-mail.outlook.com | 587 | Ім'я користувача та пароль | Отримання пароля програми та встановлення пароля | ПОЧАТКОВІ TLS |
Gmail (Іва | smtp.gmail.com | 465(SSL) або 587(TLS) | Ім'я користувача та пароль | Отримання пароля програми та встановлення пароля | SSL або TLS або STARTTLS |
Пошта Yahoo! | smtp.mail.yahoo.co.jp | 465 | Ім'я користувача та пароль | ?? | Невідомий тип |
OCN (ОКН) | smtp.ocn.ne.jp | 465 | Ім'я користувача та пароль | ?? | SSL або TLS |