สร้างข้อความอีเมลด้วยตัวเลือกที่กำหนดเองใน C#

สร้างข้อความอีเมลใหม่

เพื่อสร้างข้อความอีเมลใหม่คุณสามารถใช้ MailMessage คลาส. คลาส MailMessage ยังเริ่มต้นคุณสมบัติของข้อความอีเมลที่สร้างขึ้น เช่น ที่อยู่อีเมลของผู้ส่ง, ที่อยู่อีเมลของผู้รับ, หัวเรื่องของอีเมล, และเนื้อหาข้อความอีเมลในรูปแบบ HTML.

พิจารณาโค้ดต่อไปนี้พร้อมขั้นตอนละเอียดเพื่อสร้างข้อความอีเมลใหม่และตั้งค่าคุณสมบัติต่างๆ.

  1. สร้างอินสแตนซ์ใหม่ของ MailMessage คลาส.
  2. ตั้งค่า From คุณสมบัติสำหรับที่อยู่อีเมลของผู้ส่ง.
  3. ตั้งค่า ถึง คุณสมบัติสำหรับรายการที่อยู่อีเมลของผู้รับที่คั่นด้วยเครื่องหมายจุลภาค.
  4. ตั้งค่า Subject คุณสมบัติสำหรับหัวเรื่องของอีเมล.
  5. ตั้งค่า HtmlBody คุณสมบัติสำหรับเนื้อหา HTML ของข้อความอีเมล.
// Create a new instance of MailMessage class
var message = new MailMessage
{
    From = "from@domain.com",
    To = "to1@domain.com, to2@domain.com",
    Subject = "New message",
    HtmlBody = @"<!DOCTYPE html>
    <html>
     <head>
      <style>
       h3{font-family:Verdana, sans-serif;color:#000000;background-color:#ffffff;}
       p {font-family:Verdana, sans-serif;font-size:14px;font-style:normal;
         font-weight:normal;color:#000000;background-color:#ffffff;}
      </style>
     </head>
     <body>
       <h3>New message</h3>
       <p>This is a new message created by Aspose.Email.</p>
     </body>
    </html>"
};

ตั้งค่าการเข้ารหัสข้อความเริ่มต้น

ตั้งค่าการเข้ารหัสข้อความเริ่มต้นสำหรับคุณสมบัติต่อไปนี้:

  • จาก: ชื่อที่แสดง
  • ถึง: ชื่อที่แสดง
  • Subject
  • Body

ใช้ MailMessage.PreferredTextEncoding คุณสมบัติเพื่อให้มั่นใจว่าข้อความทั้งหมดในคุณสมบัติข้างต้นถูกเข้ารหัสอย่างถูกต้องในข้อความอีเมล ตัวอย่างโค้ดต่อไปนี้แสดงวิธีใช้คำภาษาฝรั่งเศสเป็นชื่อแสดงสำหรับที่อยู่อีเมล, หัวเรื่องและเนื้อหา.

ตั้งค่า Mail Body

ตั้งค่า Plain Text Body

เนื้อหาเมลสามารถระบุโดยใช้ Body คุณสมบัติของ MailMessage คลาส.

// Declare message as MailMessage instance
var eml = new MailMessage
{
    // Specify HtmlBody
    Body = "This is a plain text body"
};

ตั้งค่า HTML Body

เนื้อหาเมลยังสามารถระบุโดยใช้ HtmlBody คุณสมบัติของ MailMessage คลาส.

// Declare message as MailMessage instance
var eml = new MailMessage
{
    // Specify HtmlBody
    HtmlBody = "<html><body>This is the HTML body</body></html>"
};

ตั้งข้อความสำรอง

มุมมองสำรองในไฟล์ EML คือการแสดงผลเพิ่มเติมของเนื้อหาอีเมลที่สามารถใช้เพื่อให้การเรนเดอร์ข้อความอีเมลแตกต่างออกไป ตัวอย่างเช่น หากคุณส่งข้อความในรูปแบบ HTML คุณอาจต้องการให้เวอร์ชัน plain text ในกรณีที่ผู้รับบางคนใช้โปรแกรมอ่านเมลที่ไม่สามารถแสดงเนื้อหา HTML ได้ เพื่อวัตถุประสงค์นี้ให้ใช้ AlternateView class. คลาสนี้มีสองคุณสมบัติ, LinkedResources และ BaseUri, ซึ่งใช้เพื่อแก้ไข URL ภายในเนื้อหาอีเมล.

  • LinkedResources เป็นคอลเลกชันของ LinkedResource อ็อบเจ็กต์ เมื่อเรนเดอร์แล้ว URL ภายในเนื้อหาอีเมลจะถูกจับคู่อันดับแรกกับ URL ใน Content Link ของแต่ละ LinkedResource อ็อบเจ็กต์ใน LinkedResources คอลเลกชันและแก้ไขแล้ว
  • BaseUri ใช้โดยโปรแกรมอ่านเมลเพื่อแก้ไข URL ที่เป็น relative ภายในเนื้อหาและยังแก้ไข URL ของ Content Link ที่เป็น relative ใน LinkedResources คอลเลกชัน.

พิจารณาโค้ดต่อไปนี้พร้อมขั้นตอนละเอียดเพื่อกำหนดข้อความสำรอง

  1. สร้างอินสแตนซ์ของ MailMessage คลาส.
  2. สร้าง AlternateView เพื่อดูข้อความอีเมลโดยใช้เนื้อหาที่ระบุในสตริง
  3. เพิ่มข้อความสำรองโดยใช้ Add เมธอดของ MailMessage.AlternateViews คอลเลกชัน.
// Declare message as MailMessage instance
var eml = new MailMessage();

// Creates AlternateView to view an email message using the content specified in the //string
var alternate = AlternateView.CreateAlternateViewFromString("Alternate Text");

// Adding alternate text
 eml.AlternateViews.Add(alternate);

ระบุการเข้ารหัสเนื้อหาอีเมล

Aspose.Email ใช้ BodyEncoding คุณสมบัติของ MailMessage class เพื่อระบุการเข้ารหัสเนื้อหาอีเมล ตัวอย่างเช่น:

eml.BodyEncoding = Encoding.UTF8;

ระบุผู้รับหลายคน

มีสามวิธีในการระบุผู้รับของข้อความอีเมล: โดยใช้ฟิลด์ To, CC, หรือ BCC

  • ฟิลด์ To เป็นผู้รับหลักของข้อความของคุณ คุณสามารถใส่ที่อยู่อีเมลหนึ่งหรือหลายรายการในฟิลด์นี้คั่นด้วยเครื่องหมายจุลภาค ฟิลด์ To เป็นข้อบังคับสำหรับทุกข้อความอีเมล

  • ฟิลด์ CC ย่อมาจาก carbon copy ใช้ส่งสำเนาข้อความของคุณให้กับคนอื่นที่สนใจหรือเกี่ยวข้องกับหัวข้อ ฟิลด์ CC เป็นทางเลือกและสามารถมีหลายที่อยู่อีเมลได้ ผู้รับในฟิลด์ CC สามารถเห็นว่ามีใครรับข้อความอีกบ้าง

  • BCC ฟิลด์ย่อมาจาก blind carbon copy คล้ายกับฟิลด์ CC แต่ผู้รับในฟิลด์ BCC จะถูกซ่อนไว้จากผู้รับอื่น ๆ ฟิลด์ BCC มีประโยชน์เมื่อคุณต้องการปกป้องความเป็นส่วนตัวของผู้รับบางคนหรือหลีกเลี่ยงการกองทัพอินบ็อกซ์ของพวกเขาด้วยการตอบกลับ ฟิลด์ BCC ยังเป็นทางเลือกและสามารถมีหลายที่อยู่อีเมลได้

พิจารณาโค้ดต่อไปนี้พร้อมขั้นตอนละเอียด เพื่อระบุผู้รับหลายคนสำหรับข้อความอีเมล

ขั้นตอนโค้ด:

  1. สร้างอินสแตนซ์ใหม่ของ MailMessage คลาส.
  2. ตั้งค่า From คุณสมบัติสำหรับที่อยู่อีเมลของผู้ส่ง.
  3. ตั้งค่า ถึง คุณสมบัติเป็นอาร์เรย์ของที่อยู่อีเมลของผู้รับหลัก
  4. ตั้งค่า CC คุณสมบัติเป็นอาร์เรย์ของที่อยู่อีเมลของผู้รับที่ได้รับสำเนาอีเมล
  5. ตั้งค่า Bcc คุณสมบัติเป็นอาร์เรย์ของที่อยู่อีเมลของผู้รับที่ได้รับ blind carbon copy ของอีเมล

ตัวอย่างโค้ด:

var eml = new MailMessage
{
    // Specify From address
    From = "sender@sender.com",
    //  Specify recipients’ mail addresses
    To = {"receiver1@receiver.com", "receiver2@receiver.com", "receiver3@receiver.com"},
    // Specify CC addresses
    CC = {"CC1@receiver.com", "CC2@receiver.com"},
    // Specify BCC addresses
    Bcc = {"Bcc1@receiver.com", "Bcc2@receiver.com"}
};

เพิ่มชื่อแสดงให้กับที่อยู่อีเมล

นอกจากที่อยู่อีเมลแล้ว สามารถรวม display name เพื่อระบุผู้ส่งหรือผู้รับอีเมลได้ ซึ่งอาจเป็นชื่อเต็มของบุคคล, ชื่อเล่น, หรือข้อมูลระบุตัวอื่น

เมื่อข้อความอีเมลแสดงในไคลเอนต์อีเมลหรืออินเทอร์เฟซเว็บเมล ชื่อแสดงมักจะแสดงพร้อมกับที่อยู่อีเมล ทำให้ผู้ใช้ระบุได้ง่ายว่าข้อความมาจากใครหรือส่งถึงใคร เพื่อเพิ่มชื่อแสดงให้กับที่อยู่อีเมลในข้อความอีเมล ให้พิจารณาโค้ดต่อไปนี้พร้อมขั้นตอนละเอียด:

  1. โหลดข้อความอีเมลจากไฟล์โดยใช้ MailMessage.Load เมธอด.
  2. ตั้งค่าผู้ส่งอีเมลโดยใช้ From คุณสมบัติของอ็อบเจ็กต์ eml โดยสร้างใหม่ MailAddress อ็อบเจ็กต์ที่มีอีเมลและชื่อแสดงของผู้ส่ง
  3. เพิ่มผู้รับในอีเมลโดยใช้ To คุณสมบัติของอ็อบเจ็กต์ eml, หากจำเป็นให้เพิ่มรายการ CC (Carbon Copy) โดยใช้ CC คุณสมบัติ, รายการ BCC (Blind Carbon Copy) โดยใช้ Bcc คุณสมบัติและเรียก Add เมธอดกับใหม่ MailAddress อ็อบเจ็กต์ที่บรรจุอีเมลและชื่อแสดงของผู้รับ

ตัวอย่างโค้ด:

// Load eml from file
var eml = MailMessage.Load(Data.Email/"test.eml");

eml.From = new MailAddress("TimothyFairfield@from.com", "Timothy Fairfield");

// A To address with a friendly name can also be specified like this
eml.To.Add(new MailAddress("kyle@to.com", "Kyle Huang"));

// Specify Cc and Bcc email address along with a friendly name
eml.CC.Add(new MailAddress("guangzhou@cc.com", "Guangzhou Team"));
eml.Bcc.Add(new MailAddress("ahaq@bcc.com", "Ammad ulHaq "));

ตั้งค่าคุณสมบัติเพิ่มเติม

ด้วย Aspose.Email คุณสามารถใช้คุณสมบัติเพิ่มเติมของ MailMessage class เช่น:

  • Date property - ตั้งค่า date and time ของอีเมล โดยค่าเริ่มต้น วันที่คือวันที่จริงที่ข้อความถูกส่งและเวลาคือเวลาที่ส่งตามที่แสดงใน Microsoft Outlook อย่างไรก็ตาม เวลาในการส่งอีเมลจริงจะถูกเพิ่มโดยเซิร์ฟเวอร์ SMTP เองในหัวเมล ตัวอย่างเช่น ด้านล่างคือหัวเมลทั่วไปที่ Date ตั้งค่าฟิลด์ Date

    // For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
    
    // Add by SMTP server in delivery emails
    Received: from ip-123.56.99.216.dsl-cust.ca.inter.net ([216.99.56.123]) by Aspose.secureserver.net with MailEnable ESMTP; Thu, 22 Feb 2007 13:58:57 -0700
    
    // Add by SMTP server in delivery emails
    Return-Path: <xyz@oikoscucine.it>
    
    // Add by SMTP server in delivery emails
    Received: from 195.120.225.20 (HELO mail.oikoscucine.it)
    by aspose.com with esmtp (:1CYY+<LA*- *1WK@)
    id Q8,/O/-.N83@7-9M
    for abc@aspose.com; Thu, 22 Feb 2007 20:58:51 +0300
    From: "XYZ" <xyz@oikoscucine.it>
    To: <abc@aspose.com>
    Subject: For ABC
    
    // Date will set the Date field, outlook will show this as
    Date: Thu, 22 Feb 2007 20:58:51 +0300
    Message-ID: <01c756c4$41b554d0$6c822ecf@dishonestyinsufferably>
    MIME-Version: 1.0
    Content-Type: multipart/alternative;
    boundary="----=_NextPart_000_0006_01C7569A.58DF4CD0"
    X-Mailer: Microsoft Office Outlook, Build 11.0.5510
    X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106
    Thread-Index: Aca6Q:=ES0M(9-=(<.<1.<Q9@QE6CD==
    X-Read: 1
    
  • MailPriority enumeration- ระบุระดับความสำคัญสำหรับการส่งข้อความอีเมล สามารถเป็นต่ำ, ปกติ หรือสูง ความสำคัญมีผลต่อความเร็วในการส่งและการจัดส่ง

  • MailSensitivity enumeration - ระบุระดับความอ่อนไหวห้าระดับ

  • XMailer- ระบุซอฟต์แวร์ที่สร้างข้อความอีเมล

โค้ดสแนปด้านล่างแสดงวิธีใช้แต่ละคุณสมบัติที่กล่าวถึงข้างต้น

var eml = new MailMessage("sender@gmail.com", "receiver@gmail.com", "Some subject", "Some body text")
{
    Date = DateTime.Now,
    Priority = MailPriority.High,
    Sensitivity = MailSensitivity.Normal,
    Xmailer = "Aspose.Email"
};

ขอรับการอ่าน

เพื่อขอ การรับการอ่าน, ใช้ Aspose.Email DeliveryNotificationOptions คุณสมบัติของ MailMessage class. คุณสมบัตินี้ประกอบด้วยค่าาของ DeliveryNotificationOptions enumeration.

พิจารณา code sample ด้านล่าง:

// Create an Instance of MailMessage class
var eml = new MailMessage
{
    // Specify From, To, HtmlBody, DeliveryNotificationOptions field
    From = "sender@sender.com",
    To = "receiver@receiver.com",
    HtmlBody = "<html><body>This is the Html body</body></html>",
    DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess
};

eml.Headers.Add("Return-Receipt-To", "sender@sender.com");
eml.Headers.Add("Disposition-Notification-To", "sender@sender.com");

// Create an instance of SmtpClient Class
var client = new SmtpClient
{
    // Specify your mailing host server, Username, Password and Port No
    Host = "smtp.server.com",
    Username = "Username",
    Password = "Password",
    Port = 25
};

try
{
    // Client.Send will send this message
    client.Send(eml);
    // Display ‘Message Sent’, only if message sent successfully
    Console.WriteLine(@"Message sent");
}
catch (Exception ex)
{
    System.Diagnostics.Trace.WriteLine(ex.ToString());
}

Note: คำร้องขอรับการอ่านอาจไม่ได้รับการปฏิบัติเสมอเนื่องจาก:

  • ไคลเอนต์เมลอาจไม่ได้ทำงานฟังก์ชันนั้น.
  • ผู้ใช้ปลายทางอาจปิดการทำงานนั้นไว้
  • ผู้ใช้ปลายทางอาจเลือกที่จะไม่ส่ง

ปรับแต่งหัวข้ออีเมล

ส่วนหัวของอีเมลเป็นมาตรฐานอินเทอร์เน็ตและ RFC กำหนดฟิลด์ส่วนหัวที่รวมอยู่ในข้อความอีเมลบนอินเทอร์เน็ต สามารถระบุส่วนหัวอีเมลได้โดยใช้ MailMessage คลาส ชนิดส่วนหัวทั่วไปถูกกำหนดใน HeaderType class. เป็นคลาสที่ sealed ทำงานเป็น enumeration ปกติ

โดยปกติ หัวข้ออีเมลจะมีฟิลด์เหล่านี้:

  • To: สามารถระบุที่อยู่ผู้รับในช่อง To ได้ ผู้รับในช่อง To คือผู้ฟังหลักของข้อความ สามารถมีที่อยู่ผู้รับหลายรายได้
  • From: ฟิลด์นี้แสดงที่อยู่อีเมลของผู้ส่งข้อความ.
  • Cc: อนุญาตให้ผู้ใช้ส่งข้อความเป็น "Carbon Copy" หรือ "Courtesy Copy". ผู้รับไม่จำเป็นต้องตอบหรือดำเนินการ. ปกติแล้วผู้บังคับบัญชาจะได้รับการแจ้งผ่าน CC.
  • Bcc: ย่อมาจาก Blind Carbon Copy ซึ่งให้คุณส่งอีเมลไปยังผู้รับที่ซ่อนไว้จากผู้รับคนอื่น
  • ReplyTo: ฟิลด์ส่วนหัวนี้หมายถึงที่อยู่ที่ผู้ส่งต้องการให้การตอบกลับไปที่นั้น.
  • Subject: ชื่อเรื่อง, หัวข้อ, เรื่อง. มักใช้เป็นตัวบ่งชี้เธรดสำหรับข้อความที่ตอบหรือแสดงความคิดเห็นต่อข้อความอื่น
  • Date: หัวข้อนี้ระบุวันที่ (และเวลา) โดยทั่วไปจะเป็นวันที่ที่ข้อความถูกเขียนและส่ง
  • XMailer: ข้อมูลเกี่ยวกับซอฟต์แวร์คลไอเอนต์ของผู้ส่ง ตัวอย่าง: X-Mailer: Aspose.Email XMailer ถูกใช้โดยไคลเอนต์อีเมล ไคลเอนต์อีเมลต่าง ๆ จะมีค่า XMailer ที่แตกต่างกัน ค่า XMailer ของ MS Outlook คือ Microsoft Office Outlook, Build 11.0.5510 ซึ่งจะถูกละเลยโดยผู้รับอีเมลหรือโปรแกรมอ่านอีเมล

โดยปกติ ส่วนหัวของอีเมลจะมีลักษณะเช่นนี้:

Reply-To: reply@reply.com
From: sender@sender.com
To: guangzhou@guangzhoo.com
Subject: test mail
Date: 6 Mar 2006 8:2:2 +0800
X-Mailer: Aspose.Email

เพื่อปรับแต่งหัวข้ออีเมล ให้ทำตาม code steps นี้:

  • สร้างอินสแตนซ์ของ MailMessage คลาส.
  • ระบุ To, From, Cc, Bcc, ReplyTo, Subject, Date & XMailer โดยใช้อินสแตนซ์ของ MailMessage.
  • สร้างอินสแตนซ์ของ MimeHeader คลาสและระบุ header ที่กำหนดเอง.
  • เพิ่ม header ที่กำหนดเองไปยัง MailMessage อินสแตนซ์

ตัวอย่าง โค้ด ต่อไปนี้แสดงวิธีตั้งค่า header ของอีเมล.

var eml = new MailMessage
{
    ReplyToList = "reply@reply.com",
    From = "sender@sender.com",
    To = "receiver1@receiver.com",
    CC = "receiver2@receiver.com",
    Bcc = "receiver3@receiver.com",
    Subject = "test mail",
    Date = new System.DateTime(2006, 3, 6),
    XMailer = "Aspose.Email"
};

โค้ดตัวอย่างข้างบนจะสร้างส่วนหัวของอีเมลในรูปแบบต่อไปนี้:

Reply-To: reply@reply.com
From: sender@sender.com
To: receiver1@receiver.com
CC: receiver2@receiver.com
BCC: receiver3@receiver.com
Subject: test mail
Date: 6 Mar 2006 8:2:2 +0800
X-Mailer: Aspose.Email

แทรก Header ที่ตำแหน่งเฉพาะ

นี้ Add เมธอดของ HeaderCollection คลาสแทรก header ที่ท้ายของคอลเลคชัน อย่างไรก็ตามบางครั้งอาจจำเป็นต้องแทรก header ที่ตำแหน่งเฉพาะ ในกรณีนั้น, the Add เมธอดนี้จะไม่เป็นประโยชน์. เพื่อทำให้สำเร็จ, ใช้ Insert เมธอดของ HeaderCollection. หากคอลเลคชันมี header ชื่อเดียวกัน header นี้จะถูกแทรกก่อน header อื่นที่มีชื่อเดียวกัน ตัวอย่างโค้ดต่อไปนี้แสดงวิธีแทรก header ที่ตำแหน่งเฉพาะ.

eml.Headers.Insert("Received", "Value");

เพิ่ม Header ที่กำหนดเอง

ส่วนหัวของอีเมลสามารถระบุได้โดยใช้ MailMessage คลาส. เพื่อระบุ header ที่กำหนดเอง ในข้อความอีเมล ให้พิจารณาตัวอย่างโค้ดต่อไปนี้:

eml.Headers.Add("secret-header", "mystery");

โค้ดตัวอย่างข้างบนจะสร้างส่วนหัวของอีเมลในรูปแบบต่อไปนี้:

secret-header: mystery

สร้างข้อความที่ลงลายเซ็น

Aspose.Email API ให้ความสามารถในการสร้างข้อความที่ลงลายเซ็นโดยใช้ใบรับรอง. The AttachSignature เมธอดของ MailMessage คลาสสามารถใช้เพื่อเซ็นข้อความเพื่อบันทึกหรือแม้กระทั่งส่งโดยใช้ SmtpClient.

เซ็นข้อความ

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการเซ็นข้อความ

การใช้ตัวเลือกใบรับรองแยกส่วน

ไคลเอนต์อีเมลแบบเว็บอาจไม่สามารถแสดงเนื้อหาของข้อความที่เซ็นได้ สามารถแก้ไขได้โดยการแยกใบรับรองก่อนส่งไปยังไคลเอนต์แบบเว็บ ธ旗แยกส่วนในเมธอดที่โอเวอร์โหลดของ AttachSignature สามารถใช้เพื่อทำเช่นนี้ หากตั้งค่าเป็น true ใบรับรองจะถูกแยกออกจากอีเมลและในทางกลับกัน เพื่อให้เห็นเนื้อหาข้อความที่เซ็นในไคลเอนต์แบบเว็บ คุณต้องสร้าง MailMessage พร้อมลายเซ็นแยกส่วน ตัวอย่างโค้ดต่อไปนี้แสดงวิธีใช้ตัวเลือกใบรับรองแยกส่วน