שליחת הודעות דואר אלקטרוני באמצעות MailKit

תאריך יצירת דף :

סביבה

.NET
  • .NET 5.0
כך גם MailKit
  • 2.11.1

בהתחלה

בעבר, smtpClient, מחלקה לשליחת הודעות דואר אלקטרוני, נכלל כסטנדרט, אך כעת הוא הוצא משימוש עקב מחוץ למפרטים.

משמעות הדבר היא של- .NET אין ספריית דיוור רגילה, כך שתשתמש בספריה של ספק חיצוני.

נכון לעכשיו, יש "MailKit" כספרייה רגילה, אז אני רוצה לשלוח דוא"ל באמצעות הפעם.

היכרות עם MailKit

הפעל את Visual Studio 2019 וצור פרוייקט חדש של אפליקציית מסוף ( .NET). אם אתה משתמש ב- .NET, יהיה לך קצת חופש בסוג הפרוייקט, אז אני אדע את הפרטים מראש.

בעת פתיחת הפרוייקט, לחץ באמצעות לחצן העכבר הימני על יחסי תלות מסייר הפתרונות ובחר נהל חבילות NuGet.

לחץ על הכרטיסיה עיון והקלד MailKit בשדה החיפוש כדי להציג את MailKit ברשימה שלהלן.

בחר MailKit מהרשימה, ודא שהגירסה העדכנית ביותר נבחרה ולאחר מכן לחץ על לחצן התקן.

לחץ על לחצן אישור.

ודא שהחבילה מכילה 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;

בעיקרון, זוהי צורה של הגדרת הערך שהוגדר לעיל.

באפשרותך גם להגדיר מספר 'מ' ו'אל'.

הוא אינו כלול במדגם, אך הוא יכול לכלול גם עותק ועותק מוסתר. אם ברצונך לכלול אותו, הוסף אותו באותו אופן כמו מ או אל באופן הבא:

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 שם משתמש וסיסמה ?? אישורי הפעלה
Outlook.com חלק 2 smtp-mail.outlook.com 587 שם משתמש וסיסמה קבל סיסמת אפליקציה והגדר אותה לסיסמה אישורי הפעלה
ג'ימייל (10 smtp.gmail.com 465(SSL) או 587(TLS) שם משתמש וסיסמה קבל סיסמת אפליקציה והגדר אותה לסיסמה SSL או TLS או סטארט-אפים
יאהו, דואר! smtp.mail.yahoo.co.jp 465 שם משתמש וסיסמה ?? סוג לא ידוע
OCN (לא כולל) smtp.ocn.ne.jp 465 שם משתמש וסיסמה ?? SSL או TLS