Αποστολή μηνυμάτων ηλεκτρονικού ταχυδρομείου με χρήση του MailKit

Ημερομηνία δημιουργίας σελίδας :

περιβάλλον

.NET
  • .NET 5,0
MailKit
  • 2.11.1

αρχικά

Προηγουμένως, το smtpClient, μια κατηγορία για την αποστολή μηνυμάτων ηλεκτρονικού ταχυδρομείου, συμπεριλήφθηκε ως πρότυπο, αλλά τώρα υποτιμάται λόγω των εκτός προδιαγραφών.

Αυτό σημαίνει ότι το .NET δεν διαθέτει τυπική βιβλιοθήκη αλληλογραφίας, επομένως θα χρησιμοποιήσετε μια βιβλιοθήκη άλλου κατασκευαστών.

Επί του παρόντος, υπάρχει το "MailKit" ως κύρια βιβλιοθήκη, οπότε θα ήθελα να στείλω ένα μήνυμα ηλεκτρονικού ταχυδρομείου χρησιμοποιώντας αυτή τη φορά.

Παρουσίαση του MailKit

Ξεκινήστε το Visual Studio 2019 και δημιουργήστε ένα νέο έργο εφαρμογής κονσόλας (.NET). Αν χρησιμοποιείτε το .NET, θα έχετε κάποια ελευθερία στον τύπο του έργου, οπότε θα γνωρίζω τις λεπτομέρειες.

Όταν ανοίγετε το έργο, κάντε δεξί κλικ στην επιλογή Εξαρτήσεις από την Εξερεύνηση λύσεων και επιλέξτε Διαχείριση πακέτων NuGet.

Κάντε κλικ στην καρτέλα Αναζήτηση και πληκτρολογήστε 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;

Νομίζω ότι αυτό το μέρος είναι το αντίστοιχο μέρος όπως είναι αν χρησιμοποιείτε κανονικά mailers κλπ.

Δεδομένου ότι δεν είναι διαθέσιμο να στείλετε μεταμφιεσμένοι σε πρόσφατα συστήματα αλληλογραφίας, βασικά θα ορίσετε την ίδια διεύθυνση ηλεκτρονικού ταχυδρομείου με το λογαριασμό ηλεκτρονικού ταχυδρομείου σας.

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

Στον παραπάνω κώδικα, το αρχείο που αποθηκεύεται τοπικά είναι ένα συνημμένο, αλλά τα δεδομένα μπορεί να είναι οτιδήποτε, επειδή πρέπει να είναι μόνο ένας πίνακας byte ή ροή. Αποστολή αρχείου JPEG ως παράδειγμα.

MimeMessage.Body Η τιμή που ορίσετε για να BodyBuilder δημιουργήσετε ως .

Το κείμενο σώματος TextPart διαφέρει από το , και οι ιδιότητες στις οποίες έχει οριστεί είναι διαφορετικές, είτε κείμενο είτε HTML. Σημειώστε ότι ακόμα και αν ορίσετε και τα δύο, η πρώτη ρύθμιση θα διαγραφεί.

Το συνημμένο BodyBuilder.Attachments προστίθεται στην ιδιότητα. Τα ορίσματα είναι "όνομα συνημμένου", "δεδομένα συνημμένου" και "τύπος περιεχομένου (MIME)".

Σημειώστε ότι το όνομα του συνημμένου ενδέχεται να μην αναγνωρίζεται από τον παραλαμβάνων, εκτός εάν προσθέσετε μια επέκταση.

ContentType Η τιμή στην οποία ορίσετε θα διαφέρει ανάλογα με τη μορφή αρχείου. Εάν κάνετε αναζήτηση στο Internet γύρω από τη "μορφή αρχείου MIME", θα μπορείτε να δείτε το συνδυασμό.

BodyBuilder.ToMessageBodyΤέλος, καλέστε τη μέθοδο και ρυθμίστε την σε MimeMessage.Body .

Πληροφορίες για τον καθορισμό ενός διακομιστή SMTP

Ο διακομιστής SMTP για την αποστολή αλληλογραφίας έχει διαφορετικές ρυθμίσεις ανάλογα με το διακομιστή αλληλογραφίας που χρησιμοποιείτε. Το παρακάτω είναι ένα παράδειγμα, οπότε αν δεν υπάρχει τέτοιο πράγμα, ελέγξτε τη βοήθεια του διακομιστή που χρησιμοποιείτε.

Επιπλέον, δεδομένου ότι οι πληροφορίες είναι από τον Απρίλιο του 2021, οι πληροφορίες ενδέχεται να έχουν αλλάξει επί του παρόντος.

Εάν
Έλεγχος ταυτότητας θύρας διακομιστή SMTP υπηρεσίας αλληλογραφίαςχρησιμοποιείτε κρυπτογράφηση επαλήθευσης σε δύο βήματα
Outlook.com Μέρος 1 smtp.office365.com 587 Όνομα χρήστη και κωδικός πρόσβασης ?? ΕΚΚΙΝΗΜΑΤΑ
Outlook.com Μέρος 2 smtp-mail.outlook.com 587 Όνομα χρήστη και κωδικός πρόσβασης Αποκτήστε κωδικό πρόσβασης εφαρμογής και ορίστε τον σε κωδικό πρόσβασης ΕΚΚΙΝΗΜΑΤΑ
Γκιλ 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