Sử dụng MailKit để gửi email
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. Dispose
Vì using 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 |