अपडेट किया गया उत्तर :
SmtpClient
इस उत्तर में प्रयुक्त वर्ग, के लिए दस्तावेज़ीकरण , अब पढ़ता है, 'अप्रचलित ("SmtpClient और इसके प्रकार के नेटवर्क खराब रूप से डिज़ाइन किए गए हैं, हम दृढ़ता से आपको https://github.com/jstedfast/MailKit और https: github का उपयोग करने की सलाह देते हैं। .com / jstedfast / MimeKit के बजाय ") '।
स्रोत: https://www.infoq.com/news/2017/04/MailKit-MimeKit-Official
मूल उत्तर :
MailDefinition वर्ग का उपयोग करना गलत दृष्टिकोण है। हां, यह आसान है, लेकिन यह भी आदिम है और वेब यूआई नियंत्रण पर निर्भर करता है - जो कि आमतौर पर सर्वर-साइड कार्य के लिए कुछ नहीं करता है।
नीचे प्रस्तुत दृष्टिकोण MSDN प्रलेखन और कोडप्रोजेक्ट.कॉम पर कुरैशी की पोस्ट पर आधारित है ।
नोट: यह उदाहरण एम्बेडेड संसाधनों से HTML फ़ाइल, चित्र और अनुलग्नक को निकालता है, लेकिन इन तत्वों के लिए धाराएँ प्राप्त करने के लिए अन्य विकल्पों का उपयोग करना ठीक है, जैसे कि हार्ड-कोडिंग स्ट्रिंग्स, स्थानीय फ़ाइलें, और इसी तरह।
Stream htmlStream = null;
Stream imageStream = null;
Stream fileStream = null;
try
{
// Create the message.
var from = new MailAddress(FROM_EMAIL, FROM_NAME);
var to = new MailAddress(TO_EMAIL, TO_NAME);
var msg = new MailMessage(from, to);
msg.Subject = SUBJECT;
msg.SubjectEncoding = Encoding.UTF8;
// Get the HTML from an embedded resource.
var assembly = Assembly.GetExecutingAssembly();
htmlStream = assembly.GetManifestResourceStream(HTML_RESOURCE_PATH);
// Perform replacements on the HTML file (if you're using it as a template).
var reader = new StreamReader(htmlStream);
var body = reader
.ReadToEnd()
.Replace("%TEMPLATE_TOKEN1%", TOKEN1_VALUE)
.Replace("%TEMPLATE_TOKEN2%", TOKEN2_VALUE); // and so on...
// Create an alternate view and add it to the email.
var altView = AlternateView.CreateAlternateViewFromString(body, null, MediaTypeNames.Text.Html);
msg.AlternateViews.Add(altView);
// Get the image from an embedded resource. The <img> tag in the HTML is:
// <img src="pid:IMAGE.PNG">
imageStream = assembly.GetManifestResourceStream(IMAGE_RESOURCE_PATH);
var linkedImage = new LinkedResource(imageStream, "image/png");
linkedImage.ContentId = "IMAGE.PNG";
altView.LinkedResources.Add(linkedImage);
// Get the attachment from an embedded resource.
fileStream = assembly.GetManifestResourceStream(FILE_RESOURCE_PATH);
var file = new Attachment(fileStream, MediaTypeNames.Application.Pdf);
file.Name = "FILE.PDF";
msg.Attachments.Add(file);
// Send the email
var client = new SmtpClient(...);
client.Credentials = new NetworkCredential(...);
client.Send(msg);
}
finally
{
if (fileStream != null) fileStream.Dispose();
if (imageStream != null) imageStream.Dispose();
if (htmlStream != null) htmlStream.Dispose();
}