Sử dụng MailKit để gửi email

Ngày tạo trang :

môi trường

.NET
  • .NET 5.0
MailKit
  • 2.11.1

Bắt đầu

Trước đây, các tiêu chuẩn bao gồm các lớp học "SmtpClient" để gửi e-mail, nhưng bây giờ không được chấp nhận vì đặc điểm kỹ thuật cũ hơn.

Điều này cho phép .NET sử dụng thư viện của bên thứ ba vì nó không có thư viện gửi thư tiêu chuẩn.

Hiện tại, MailKit là thư viện chính thống, vì vậy lần này tôi muốn sử dụng điều này để gửi email.

Giới thiệu về MailKit

Khởi động Visual Studio 2019 và tạo dự án ứng dụng bảng điều khiển mới (.NET). Nếu bạn sử dụng .NET, loại dự án là miễn phí ở một mức độ nào đó, vì vậy tôi thích các chi tiết rất nhiều.

Sau khi bạn mở dự án, bấm chuột phải vào Phụ thuộc từ Trình khám phá Giải pháp, rồi chọn Quản lý gói NuGet.

Bấm tab Duyệt, sau đó nhập MailKit vào trường tìm kiếm và MailKit xuất hiện trong danh sách bên dưới.

Chọn MailKit từ danh sách để đảm bảo rằng bạn đã chọn phiên bản mới nhất, rồi bấm nút Cài đặt.

Bấm nút OK.

Đảm bảo rằng gói chứa MailKit.

chương trình

Dưới đây là mã tối thiểu để gửi email:

Xác định thông tin cần thiết cho email trong nửa đầu của mã và sử dụng các giá trị này để gửi email sau mã. Bạn chỉ cần thay đổi định nghĩa trước đó khi cần thiết, có nghĩa là bạn có thể sử dụng mã tiếp theo theo cách thông thường.

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);
    }
  }
}

Xác định thông tin cần thiết để gửi email

var smtpHostName = "[SMTP サーバー名]";
var smtpPort = 587;                         // or 25
var smtpAuthUser = "[認証ユーザー名]";
var smtpAuthPassword = "[認証パスワードまたはアプリパスワード]";

Tùy thuộc vào máy chủ thư được sử dụng (máy chủ SMTP), giá trị được thiết lập sẽ khác nhau. Ở phần cuối của bài viết này, chúng ta sẽ thảo luận về một số giá trị để thiết lập, nhưng về cơ bản xem trang web máy chủ thư mà chúng tôi sử dụng.

Ban đầu tôi đã viết nó trong appsettigs.json, nhưng tôi thích nó vì nó sẽ trở nên dư thừa như một gợi ý.

Xác định nội dung của email

var from = "[送信者メールアドレス]";
var to = "[送り先メールアドレス]";

var subject = "テストメールの件名です。";
var body = "テストメールの本文です。\n改行です。";
var textFormat = TextFormat.Text;

Tôi nghĩ rằng phần này là phần tương ứng bởi vì nó là nếu bạn thường sử dụng chương trình thư, vv

Vì bạn không thể mạo danh người gửi trong hệ thống nhắn tin hiện đại, về cơ bản bạn sẽ thiết lập cùng một địa chỉ email như tài khoản email của mình.

TextFormat Gửi ở định dạng văn bản hoặc HTML. Nếu được gửi ở định dạng HTML, hãy điền vào phần nội dung, chẳng hạn như thẻ HTML.

Thông tin cần thiết để thiết lập quá trình gửi thư

// 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;

Về cơ bản, nó đặt các giá trị được xác định ở trên.

Bạn cũng có thể thiết lập nhiều từ và đến.

Nó không được bao gồm trong ví dụ, nhưng cũng có thể chứa CC hoặc BCC. Thêm theo cách tương tự như Từ hoặc Đến, như sau:

message.Cc.Add(MailboxAddress.Parse(cc));
message.Bcc.Add(MailboxAddress.Parse(bcc));

Nếu người nhận hỗ trợ email, bạn cũng có thể thay đổi tên hiển thị của người gửi hoặc người nhận. Trong trường hợp này, thay đổi mã như sau:

message.From.Add(new MailboxAddress("送信者の名前", from));
message.To.Add(new MailboxAddress("送り先の名前", to));

Gửi email

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);

Sau khi bạn đã hoàn thành định nghĩa liên quan đến thư, quá trình gửi được thực hiện.

Cam kết SmtpClient được thực hiện trên trường hợp của lớp. Disposeusing var vậy, chúng tôi tuyên bố nó để nó có thể được phát hành tự động. Bởi vì C # 8.0 là một phương pháp viết, ghi lại nó cho using các phiên bản trước đó.

SmtpClient.Connect Phương pháp kết nối với máy chủ SMTP. Một số máy chủ STMP yêu cầu kết nối SSL hoặc TLS, nhưng trong hầu hết các trường hợp, không có vấn đề SecureSocketOptions.Auto nếu được chỉ định.

Nếu máy chủ SMTP yêu cầu xác thực, sử dụng phương pháp SmtpClient.Authenticate để chỉ định tên người dùng và mật khẩu.

Khi kết nối hoàn SmtpClient.Send tất, sử dụng phương pháp để gửi email.

Sau khi tất cả các hoạt động được thực hiện, sử SmtpClient.Disconnect dụng phương pháp để ngắt kết nối.

Lưu ý rằng tất cả các hoạt động này được thực hiện trong Tips như đồng bộ hóa, nhưng mỗi phương pháp cho phép xử lý không đồng bộ với tên xxxxxxAsync. Nếu cần thiết, sử dụng.

Làm thế nào để gửi một tập

Để gửi phần đính kèm, MimeMessage.Body hãy thay đổi giá trị đã đặt thành:

// 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();

Mã trên sử dụng các tệp được lưu trữ cục bộ dưới dạng tệp đính kèm, nhưng dữ liệu có thể bao gồm mảng byte hoặc luồng. Ví dụ: gửi tệp JPEG.

MimeMessage.Body Giá trị được đặt thành BodyBuilder sẽ được xây dựng thành .

Văn bản trong Body khác với TextPart văn bản và thuộc tính của nó phụ thuộc vào văn bản hoặc HTML. Lưu ý rằng ngay cả khi cả hai được thiết lập cùng một lúc, nó sẽ được dễ dàng hơn để thiết lập cài đặt này đầu

Thêm phần đính BodyBuilder.Attachments kèm vào thuộc tính. Các tham số là Tên Tệp Đính kèm, Dữ liệu Tệp Đính kèm và Loại Nội dung (MIME).

Lưu ý rằng nếu tên tệp đính kèm không chứa phần mở rộng, người nhận có thể không nhận ra nó.

ContentType Giá trị được đặt phụ thuộc vào định dạng tệp. Trên Internet, "định dạng tệp MIME", tôi nghĩ rằng bạn có thể hiểu được sự kết hợp nếu bạn tìm kiếm xung quanh.

Cuối BodyBuilder.ToMessageBody cùng, gọi phương MimeMessage.Body pháp và thiết lập nó.

Giới thiệu về việc chỉ định một máy chủ SMTP

Thiết đặt máy chủ SMTP được sử dụng để gửi thư khác nhau tùy thuộc vào máy chủ thư. Vì ví dụ sau, nếu không, hãy xem Trợ giúp Máy chủ.

Ngoài ra, thông tin có thể thay đổi bất cứ lúc nào vì thông tin tính đến tháng 4 năm 2021.

Dịch vụ thư SMTP máy chủ cổng xác thực nếu bạn sử dụng hai bước xác minh mã hóa
Outlook.com phần 1 smtp.office365.com 587 Tên người dùng và mậ ?? STARTTLS
Outlook.com phần 2 smtp-mail.outlook.com 587 Tên người dùng và mậ Lấy mật khẩu ứng dụng và đặt mật khẩu STARTTLS
Gmail smtp.gmail.com 465(SSL) or 587(TLS) Tên người dùng và mậ Lấy mật khẩu ứng dụng và đặt mật khẩu SSL or TLS or STARTTLS
Yahoo Mail smtp.mail.yahoo.co.jp 465 Tên người dùng và mậ ?? Loại không xác định
OCN smtp.ocn.ne.jp 465 Tên người dùng và mậ ?? SSL or TLS