כיצד לשלוח מיילים ב- ASP.NET Core

לרוב יהיה לך צורך לשלוח מיילים דרך היישום שלך. אתה יכול לנצל את חבילת MailKit NuGet כדי לשלוח מיילים ב- ASP.NET Core. MailKit היא ספריית לקוח דואר עם קוד פתוח שניתן להשתמש בה ביישומי .NET או .NET Core הפועלים במערכות Windows, Linux או Mac. מאמר זה מציג דיון כיצד אנו יכולים להשתמש בחבילת MailKit NuGet לשליחת מיילים ב- ASP.NET Core.

כדי לעבוד עם דוגמאות הקוד המופיעות במאמר זה, עליך להתקין במערכת Visual Studio 2019 שלך. אם עדיין אין לך עותק, תוכל להוריד את Visual Studio 2019 כאן. 

צור פרויקט ASP.NET Core API

ראשית, בואו ניצור פרויקט ליבה של ASP.NET ב- Visual Studio. בהנחה ש- Visual Studio 2019 מותקן במערכת שלך, בצע את הצעדים המתוארים להלן כדי ליצור פרויקט ASP.NET Core חדש ב- Visual Studio.

  1. הפעל את Visual Studio IDE.
  2. לחץ על "צור פרויקט חדש".
  3. בחלון "צור פרויקט חדש" בחר "ASP.NET יישום אינטרנט ליבה" מרשימת התבניות המוצגות.
  4. הקש "הבא.
  5. בחלון "הגדר את הפרויקט החדש שלך" שמוצג הבא, ציין את השם והמיקום של הפרויקט החדש.
  6. לחץ על צור.
  7. בחלון "צור יישום אינטרנט חדש של ASP.Net Core" בחר .NET Core בתור זמן הריצה ו- ASP.NET Core 2.2 (או מאוחר יותר) מהרשימה הנפתחת בחלק העליון. אני אשתמש כאן ב- ASP.NET Core 3.0.
  8. בחר "API" כתבנית הפרויקט ליצירת יישום API חדש של ASP.NET Core. 
  9. ודא שתיבות הסימון "אפשר תמיכה ב- Docker" ו- "הגדר עבור HTTPS" אינן מסומנות מכיוון שלא נשתמש בתכונות אלה כאן.
  10. ודא שהאימות מוגדר כ"אין אימות "מכיוון שלא נשתמש גם באימות.
  11. לחץ על צור. 

זה ייצור פרוייקט ASP.NET Core API חדש ב- Visual Studio. בחר בתיקיית הפיתרון של בקרים בחלון סייר הפיתרון ולחץ על "הוסף -> בקר ..." כדי ליצור בקר חדש בשם DefaultController. נשתמש בפרויקט זה בחלקים הבאים של מאמר זה.

התקן את חבילת MailKit NuGet

כדי לעבוד עם MailKit, עליך להתקין את חבילת MailKit מ- NuGet. באפשרותך לעשות זאת באמצעות מנהל החבילות של NuGet בתוך Visual Studio 2019 IDE, או על ידי ביצוע הפקודה הבאה במסוף מנהל החבילות של NuGet:

התקנת חבילה NETCore.MailKit

יהיה עליך להוסיף הפניות למרחבי השמות הבאים בקוד שלך:

באמצעות MailKit.Net.Smtp;

שימוש ב- MimeKit;

ציין מטא נתונים של תצורת דוא"ל ב- ASP.NET Core

קטע הקוד הבא מראה כיצד ניתן לציין את פרטי תצורת הדוא"ל בקובץ appsettings.json.

"NotificationMetadata": {

    "שולח": "[email protected]",

    "SmtpServer": "smtp.gmail.com",

    "מקבל": "[email protected]",

    "נמל": 465,

    "שם משתמש": "[email protected]",

    "סיסמה": "ציין את הסיסמה שלך כאן"

  }

לקריאת נתוני תצורת הדוא"ל, ננצל את המחלקה הבאה.

NotificationMetadata בכיתה ציבורית

    {

        שולח מחרוזת ציבורי {get; מַעֲרֶכֶת; }

        מקלט מחרוזות ציבורי {get; מַעֲרֶכֶת; }

        מחרוזת ציבורית SmtpServer {get; מַעֲרֶכֶת; }

        נמל ציבורי אינטל {get; מַעֲרֶכֶת; }

        מחרוזת ציבורית UserName {get; מַעֲרֶכֶת; }

        סיסמא מחרוזת ציבורית {get; מַעֲרֶכֶת; }

    }

כך תוכל לקרוא את נתוני תצורת הדוא"ל מקובץ appsettings.json למופע של מחלקת NotificationMetadata.

חלל ציבורי ConfigureServices (שירותי ISCollection)

{

     var notificationMetadata =

     Configuration.GetSection ("NotificationMetadata").

     לקבל();

     services.AddSingleton (notificationMetadata);

     services.AddControllers ();

}

צור מופע של המחלקה EmailMessage בליבת ASP.NET

צור מחלקה חדשה בשם EmailMessage עם הקוד הבא:

מחלקה ציבורית EmailMessage

    {

        השולח הציבורי של MailboxAddress {get; מַעֲרֶכֶת; }

        מקבל תיבת הדואר הציבורי של Mailbox {get; מַעֲרֶכֶת; }

        מחרוזת ציבורית נושא {get; מַעֲרֶכֶת; }

        תוכן ציבורי מחרוזת {get; מַעֲרֶכֶת; }

    }

צור מופע של מחלקת MimeMessage ב- ASP.NET Core

השיטה הבאה ממחישה כיצד ניתן ליצור מופע MimeMessage ממופע של המחלקה המותאמת אישית EmailMessage.

פרטי MimeMessage CreateMimeMessageFromEmailMessage (הודעת EmailMessage)

{

     var mimeMessage = MimeMessage חדש ();

     mimeMessage.From.Add (message.Sender);

     mimeMessage.To.Add (message.Reciever);

     mimeMessage.Subject = message.Subject;

     mimeMessage.Body = TextPart חדש (MimeKit.Text.TextFormat.Text)

     {Text = message.Content};

     להחזיר mimeMessage;

}

שלח הודעות דוא"ל באופן סינכרוני באמצעות MailKit ב- ASP.NET Core

כדי לשלוח דוא"ל, עלינו לנצל את מחלקת SmtpClient הנוגעת למרחב השמות MailKit.Net.Smtp. קטע הקוד הבא ממחיש כיצד ניתן לעשות זאת.

באמצעות (SmtpClient smtpClient = SmtpClient חדש ())

{

  smtpClient.Connect (_notificationMetadata.SmtpServer,

  _notificationMetadata.Port, נכון);

  smtpClient.Authenticate (_notificationMetadata.UserName,

  _notificationMetadata.Password);

  smtpClient.Send (mimeMessage);

  smtpClient.Disconnect (נכון);

}

הנה הקוד המלא של שיטת הפעולה Get של מחלקת DefaultController שלנו לנוחיותך.

מחרוזת ציבורית קבל ()

{

הודעת EmailMessage = EmailMessage חדשה ();

message.Sender = MailboxAddress חדש ("עצמי", _notificationMetadata.Sender);

message.Reciever = MailboxAddress חדש ("עצמי", _notificationMetadata.Reciever);

message.Subject = "ברוך הבא";

message.Content = "שלום עולם!";

var mimeMessage = CreateEmailMessage (הודעה);

באמצעות (SmtpClient smtpClient = SmtpClient חדש ())

 {

    smtpClient.Connect (_notificationMetadata.SmtpServer,

    _notificationMetadata.Port, נכון);

    smtpClient.Authenticate (_notificationMetadata.UserName,

    _notificationMetadata.Password);

    smtpClient.Send (mimeMessage);

    smtpClient.Disconnect (נכון);

  }

 החזיר "דוא"ל נשלח בהצלחה";

}

שלח אימיילים בצורה אסינכרונית באמצעות MailKit ב- Core ASP.NET

קטע הקוד הבא ממחיש גרסה אסינכרונית של הקוד שכתבנו זה עתה כדי לשלוח מיילים באופן סינכרוני.

באמצעות (SmtpClient smtpClient = SmtpClient חדש ())

 {

      המתן ל- smtpClient.ConnectAsync (_notificationMetadata.SmtpServer,

      _notificationMetadata.Port, נכון);

      המתן ל- smtpClient.AuthenticateAsync (_notificationMetadata.UserName,

      _notificationMetadata.Password);

      המתן ל- smtpClient.SendAsync (mimeMessage);

      המתן ל- smtpClient.DisconnectAsync (נכון);

 }

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