मेलकिट का उपयोग करके ईमेल भेजें

पेज निर्माण की तारीख :

पर्यावरण

.NET
  • .NET 5.0
मेलकिट
  • 2.11.1

पहले

पहले, ईमेल भेजने के लिए एक वर्ग, smtpClient, मानक के रूप में शामिल किया गया था, लेकिन अब बाहर के विनिर्देशों के कारण बहिष्कृत है ।

इसका मतलब यह है कि .NET में एक मानक मेलिंग लाइब्रेरी नहीं है, इसलिए आप तीसरे पक्ष की लाइब्रेरी का उपयोग करेंगे।

वर्तमान में, मुख्यधारा की लाइब्रेरी के रूप में "मेलकिट" है, इसलिए मैं इस समय का उपयोग करके एक ईमेल भेजना चाहूंगा।

मेलकिट का परिचय

विजुअल स्टूडियो 2019 लॉन्च करें और एक नया कंसोल ऐप (.NET) प्रोजेक्ट बनाएं। यदि आप .NET का उपयोग कर रहे हैं, तो आपको परियोजना प्रकार में कुछ स्वतंत्रता होगी, इसलिए मैं विवरण को सामने करूंगा।

जब आप परियोजना खोलते हैं, तो समाधान एक्सप्लोरर से सही क्लिक निर्भरता और प्रबंधित NuGet संकुल का चयन करें।

नीचे दी गई सूची में मेलकिट प्रदर्शित करने के लिए सर्च फ़ील्ड में ब्राउज़ टैब और टाइप मेलकिट पर क्लिक करें.

सूची से मेलकिट का चयन करें, सत्यापित करें कि नवीनतम संस्करण का चयन किया गया है, और फिर इंस्टॉल बटन पर क्लिक करें।

ओके बटन पर क्लिक करें।

सत्यापित करें कि पैकेज में मेलकिट शामिल है।

प्रोग्राम

ईमेल भेजने के लिए न्यूनतम कोड निम्नलिखित है।

आप अपने कोड की पहली छमाही में अपने ईमेल के लिए आवश्यक जानकारी को परिभाषित करते हैं, और दूसरी छमाही में मेल भेजने के लिए उन मूल्यों का उपयोग करते हैं। आपको आवश्यकतानुसार पहली छमाही की परिभाषा को बदलकर कोड की दूसरी छमाही को एक निश्चित तरीके से उपयोग करने में सक्षम होना चाहिए।

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 = "[認証パスワードまたはアプリパスワード]";

यह वह जगह है जहां आप विभिन्न मूल्यों को सेट करते हैं, जिसके आधार पर आप किस मेल सर्वर (एसएमटीपी सर्वर) का उपयोग करते हैं। मैं इस लेख के अंत में स्थापित कर रहा हूं मूल्यों में से कुछ की व्याख्या करना चाहते हैं, लेकिन मूल रूप से मेरे मेल सर्वर की साइट देखते हैं ।

मूल रूप से, यह appsettigs.json, आदि में लिखा है, लेकिन यह पूर्वूथा है यह सुझाव के रूप में बेमानी हो जाता है ।

ईमेल की सामग्री को परिभाषित करें

var from = "[送信者メールアドレス]";
var to = "[送り先メールアドレス]";

var subject = "テストメールの件名です。";
var body = "テストメールの本文です。\n改行です。";
var textFormat = TextFormat.Text;

मुझे लगता है कि इस भाग के अनुरूप हिस्सा है के रूप में यह है अगर आप आम तौर पर मेलर्स आदि का उपयोग करें

चूंकि यह हाल के मेल सिस्टम में भेष में से भेजने के लिए उपलब्ध नहीं है, मूल रूप से आप अपने ईमेल खाते के रूप में एक ही ईमेल पता सेट करेंगे ।

TextFormat पाठ या 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 लक्ष्य है, इसे इसमें घोषित किया जाता है ताकि इसे स्वचालित रूप से जारी किया जा सके। चूंकि यह सी # 8.0 लिखने का एक तरीका है, कृपया पहले के using संस्करणों के लिए सामान्य विवरण में बदलें।

SmtpClient.Connect एसएमटीपी सर्वर के लिए विधि। कुछ एसटीएमपी सर्वरों को एसएसएल या टीएलएस कनेक्शन की आवश्यकता होती है, लेकिन SecureSocketOptions.Auto निर्दिष्ट करना आमतौर पर ठीक होता है।

यदि एसएमटीपी सर्वर को प्रमाणीकरण की आवश्यकता है, तो 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 सर्वर निर्दिष्ट करने के बारे में

मेल भेजने के लिए एसएमटीपी सर्वर में आपके द्वारा उपयोग किए जाने वाले मेल सर्वर के आधार पर अलग-अलग सेटिंग्स हैं। निम्नलिखित एक उदाहरण है, इसलिए यदि ऐसी कोई चीज नहीं है, तो कृपया आपके द्वारा उपयोग किए जा रहे सर्वर की मदद की जांच करें।

इसके अलावा चूंकि यह जानकारी अप्रैल 2021 की है, इसलिए हो सकता है कि फिलहाल जानकारी बदल गई हो।

दो कदम सत्यापन का उपयोग कर रहे
मेल सेवा SMTP सर्वर पोर्ट प्रमाणीकरण यदि आपएन्क्रिप्शनहैं
Outlook.com भाग 1 smtp.office365.com 587 उपयोगकर्ता नाम और पासवर्ड ?? स्टार्टअप्स
Outlook.com भाग 2 smtp-mail.outlook.com 587 उपयोगकर्ता नाम और पासवर्ड ऐप पासवर्ड प्राप्त करें और इसे पासवर्ड पर सेट करें स्टार्टअप्स
जीमेल smtp.gmail.com 465 (एसएसएल) या 587 (टीएलएस) उपयोगकर्ता नाम और पासवर्ड ऐप पासवर्ड प्राप्त करें और इसे पासवर्ड पर सेट करें एसएसएल या टीएलएस या स्टार्टअप
याहू! मेल smtp.mail.yahoo.co.jp 465 उपयोगकर्ता नाम और पासवर्ड ?? अज्ञात प्रकार
ओसीएन smtp.ocn.ne.jp 465 उपयोगकर्ता नाम और पासवर्ड ?? एसएसएल या टीएलएस