Αποστολή μηνυμάτων ηλεκτρονικού ταχυδρομείου με χρήση του 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 |