Tạo Tin Nhắn Email với Các Tùy Chọn Tùy Chỉnh trong C#
Tạo Tin Nhắn Email Mới
Để tạo một tin nhắn email mới bạn có thể sử dụng MailMessage lớp. Lớp MailMessage cũng khởi tạo các thuộc tính của tin nhắn email đã tạo như địa chỉ email người gửi, địa chỉ email người nhận, tiêu đề email và nội dung thân email ở định dạng HTML.
Xem xét đoạn mã sau, với các bước chi tiết, để tạo một tin nhắn email mới và thiết lập các thuộc tính của nó.
- Tạo một thể hiện mới của MailMessage lớp.
- Đặt Từ thuộc tính cho địa chỉ email của người gửi.
- Đặt Đến thuộc tính cho danh sách địa chỉ email của người nhận, ngăn cách bằng dấu phẩy.
- Đặt Tiêu đề thuộc tính cho tiêu đề của email.
- Đặt HtmlBody thuộc tính cho nội dung HTML của thân email.
// 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>"
};
Đặt Mã Hoá Văn Bản Mặc Định
Đặt mã hoá văn bản mặc định cho các thuộc tính sau:
- Từ: Tên hiển thị
- Đến: Tên hiển thị
- Tiêu đề
- Nội dung
Sử dụng MailMessage.PreferredTextEncoding thuộc tính để đảm bảo rằng toàn bộ văn bản trong các thuộc tính trên được mã hoá đúng trong tin nhắn email. Đoạn mã mẫu dưới đây cho bạn cách sử dụng một từ tiếng Pháp làm tên hiển thị cho địa chỉ email, tiêu đề và nội dung.
Đặt Phần Thân Email
Thiết lập nội dung văn bản thuần
Phần thân email có thể được chỉ định bằng cách sử dụng Nội dung thuộc tính của MailMessage lớp.
// Declare message as MailMessage instance
var eml = new MailMessage
{
// Specify HtmlBody
Body = "This is a plain text body"
};
Thiết lập nội dung HTML
Phần thân email cũng có thể được chỉ định bằng cách sử dụng HtmlBody thuộc tính của MailMessage lớp.
// Declare message as MailMessage instance
var eml = new MailMessage
{
// Specify HtmlBody
HtmlBody = "<html><body>This is the HTML body</body></html>"
};
Thiết lập văn bản thay thế
Một alternative view trong tệp EML là một biểu diễn bổ sung của nội dung email có thể được dùng để cung cấp một cách hiển thị khác cho tin nhắn email. Ví dụ, nếu bạn gửi một tin nhắn dưới dạng HTML, bạn cũng có thể muốn cung cấp phiên bản plain text trong trường hợp một số người nhận sử dụng trình đọc email không thể hiển thị nội dung HTML. Để mục đích này, hãy sử dụng AlternateView class. Lớp này có hai thuộc tính, LinkedResources và BaseUri, được sử dụng để giải quyết các URL trong nội dung email.
- LinkedResources là một bộ sưu tập của LinkedResource các đối tượng. Khi được hiển thị, các URL trong nội dung email đầu tiên được so sánh với các URL trong Content Link của mỗi LinkedResource đối tượng trong LinkedResources bộ sưu tập và được giải quyết.
- BaseUri được mail reader sử dụng để giải quyết các URL tương đối trong phần thân, và cũng để giải quyết các URL Content Link tương đối, trong LinkedResources bộ sưu tập.
Xem đoạn mã sau với các bước chi tiết để thiết lập văn bản thay thế.
- Tạo một thể hiện của MailMessage lớp.
- Create AlternateView để xem một tin nhắn email bằng nội dung được chỉ định trong chuỗi.
- Thêm văn bản thay thế bằng cách sử dụng Thêm phương thức của MailMessage.AlternateViews bộ sưu tập.
// 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);
Chỉ định mã hoá nội dung email
Aspose.Email sử dụng BodyEncoding thuộc tính của MailMessage class để chỉ định mã hoá phần thân email. Ví dụ:
eml.BodyEncoding = Encoding.UTF8;
Chỉ định nhiều người nhận
Có ba cách để chỉ định người nhận của một tin nhắn email: sử dụng các trường To, CC, hoặc BCC.
-
Trường To là người nhận chính của tin nhắn của bạn. Bạn có thể nhập một hoặc nhiều địa chỉ email trong trường này, ngăn cách bằng dấu phẩy. Trường To là bắt buộc đối với mọi tin nhắn email.
-
Trường CC là viết tắt của carbon copy. Nó được dùng để gửi một bản sao tin nhắn của bạn tới những người khác quan tâm hoặc tham gia vào chủ đề. Trường CC là tùy chọn và cũng có thể chứa nhiều địa chỉ email. Người nhận trong trường CC có thể thấy ai khác đã nhận được tin nhắn.
-
Trường BCC là viết tắt của blind carbon copy. Nó tương tự như trường CC, nhưng người nhận trong trường BCC được ẩn khỏi các người nhận khác. Trường BCC hữu ích khi bạn muốn bảo vệ tính riêng tư của một số người nhận hoặc tránh làm bận hộp thư đến của họ với các phản hồi. Trường BCC cũng là tùy chọn và có thể chứa nhiều địa chỉ email.
Xem đoạn mã sau, với các bước chi tiết, để chỉ định nhiều người nhận cho một tin nhắn email.
Các bước mã:
- Tạo một thể hiện mới của MailMessage lớp.
- Đặt Từ thuộc tính cho địa chỉ email của người gửi.
- Đặt Đến thuộc tính tới một mảng các địa chỉ email của người nhận chính.
- Đặt CC thuộc tính tới một mảng các địa chỉ email của người nhận sẽ nhận một bản sao của email.
- Đặt Bcc thuộc tính tới một mảng các địa chỉ email của người nhận sẽ nhận bản sao ẩn (blind carbon copy) của email.
Mẫu mã:
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"}
};
Thêm tên hiển thị vào địa chỉ email
Cùng với địa chỉ email, một display name có thể được bao gồm để xác định người gửi hoặc người nhận email. Nó có thể là tên đầy đủ, biệt danh hoặc định danh khác của người đó.
Khi một tin nhắn email được hiển thị trong client email hoặc giao diện webmail, tên hiển thị thường được hiển thị cùng với địa chỉ email, giúp người dùng dễ dàng xác định người gửi hoặc người nhận. Để thêm tên hiển thị vào địa chỉ email trong một tin nhắn email, hãy xem đoạn mã sau với các bước chi tiết:
- Tải tin nhắn email từ tệp bằng cách sử dụng
MailMessage.Loadphương thức. - Đặt người gửi email bằng cách sử dụng
Fromthuộc tính của đối tượng eml bằng cách tạo một mớiMailAddressđối tượng với địa chỉ email và tên hiển thị của người gửi. - Thêm người nhận vào email bằng cách sử dụng
Tothuộc tính của đối tượng eml, nếu cần thêm danh sách CC (Carbon Copy) bằngCCthuộc tính, danh sách BCC (Blind Carbon Copy) sử dụngBccthuộc tính và gọiAddphương thức với một mớiMailAddressđối tượng chứa địa chỉ email và tên hiển thị của người nhận.
Mẫu mã:
// 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 "));
Đặt các Thuộc tính Bổ sung
Với Aspose.Email bạn có thể sử dụng các thuộc tính bổ sung của MailMessage class như:
-
Ngày property - đặt date and time của một email. Mặc định, ngày là ngày thực tế khi tin nhắn được gửi, và thời gian là thời gian nó được gửi, như hiển thị trong Microsoft Outlook. Tuy nhiên, thời gian thực tế giao email được máy chủ SMTP thêm vào trong tiêu đề email. Ví dụ, dưới đây là một tiêu đề email phổ biến, nơi Ngày đặt trường 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- chỉ định các mức độ ưu tiên cho việc gửi email. Có thể là thấp, bình thường hoặc cao. Ưu tiên ảnh hưởng đến tốc độ truyền và việc giao nhận.
-
MailSensitivity enumeration - chỉ định năm mức độ nhạy cảm.
-
XMailer- chỉ định phần mềm đã tạo tin nhắn email.
Đoạn mã dưới đây minh họa cách sử dụng từng thuộc tính đã thảo luận ở trên.
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"
};
Yêu cầu xác nhận đọc
Để yêu cầu một xác nhận đọc, sử dụng Aspose.Email DeliveryNotificationOptions thuộc tính của MailMessage class. Thuộc tính này chứa các giá trị của DeliveryNotificationOptions enumeration.
Xem mẫu mã sau:
// 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: Yêu cầu xác nhận đọc có thể không luôn được chấp nhận vì:
- Một client email có thể không thực hiện chức năng đó.
- Người dùng cuối có thể đã tắt chức năng đó.
- Người dùng cuối có thể chọn không gửi nó.
Tùy chỉnh tiêu đề email
Tiêu đề email đại diện cho một tiêu chuẩn Internet và RFC định nghĩa các trường tiêu đề được bao gồm trong các tin nhắn email trên Internet. Tiêu đề email có thể được chỉ định bằng cách sử dụng MailMessage lớp. Các loại tiêu đề phổ biến được định nghĩa trong HeaderType class. Đây là một lớp sealed hoạt động như một enumeration thông thường.
Thông thường, tiêu đề email chứa các trường sau:
- To: Địa chỉ người nhận có thể được chỉ định trong trường To. Những người nhận trong trường To là khán giả chính của tin nhắn. Có thể có nhiều địa chỉ người nhận.
- From: Trường này hiển thị địa chỉ email của người gửi tin nhắn.
- Cc: Cho phép người dùng gửi tin nhắn dưới dạng "Carbon Copy" hoặc "Courtesy Copy". Nghĩa là người nhận không cần trả lời hoặc hành động. Thông thường, các nhân viên cấp trên được thông báo qua CC.
- Bcc: Viết tắt của Blind Carbon Copy, cho phép bạn gửi email tới một người nhận mà được ẩn khỏi các người nhận khác.
- ReplyTo: Trường tiêu đề này nhằm chỉ ra nơi mà người gửi muốn nhận các phản hồi.
- Subject: Tiêu đề, đề mục, chủ đề. Thường được sử dụng như chỉ báo chuỗi hội thoại cho các tin nhắn trả lời hoặc bình luận về các tin nhắn khác.
- Date: Tiêu đề này chỉ định một ngày (và thời gian). Thông thường đây là ngày mà tin nhắn được soạn thảo và gửi.
- XMailer: Thông tin về phần mềm khách hàng của người gửi. Ví dụ: X-Mailer: Aspose.Email XMailer được sử dụng bởi các client email. Các client email khác nhau sẽ có giá trị XMailer khác nhau. Giá trị XMailer của MS Outlook là Microsoft Office Outlook, Build 11.0.5510. Nó bị bộ nhận email hoặc trình đọc email bỏ qua.
Thông thường, một tiêu đề email trông như sau:
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
Để tùy chỉnh tiêu đề email, hãy làm theo các bước mã:
- Tạo một đối tượng của MailMessage lớp.
- Chỉ định To, From, Cc, Bcc, ReplyTo, Subject, Date & XMailer bằng cách sử dụng một thực thể của MailMessage.
- Tạo một đối tượng của MimeHeader lớp và chỉ định header tùy chỉnh.
- Thêm header tùy chỉnh vào MailMessage thể hiện.
Đoạn mã mẫu sau đây cho bạn thấy cách thiết lập header email.
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"
};
Đoạn mã trên tạo ra một tiêu đề email ở định dạng sau:
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
Chèn Header tại Vị Trí Cụ Thể
Cái Thêm phương thức của HeaderCollection lớp chèn một header vào cuối bộ sưu tập. Tuy nhiên, đôi khi có thể cần chèn một header vào vị trí cụ thể. Trong trường hợp đó, the Thêm phương thức sẽ không hữu ích. Để thực hiện điều này, sử dụng Insert phương thức của HeaderCollection. Nếu bộ sưu tập chứa các header cùng tên, header này sẽ được chèn trước các header khác cùng tên. Đoạn mã mẫu dưới đây cho bạn cách chèn một header vào vị trí cụ thể.
eml.Headers.Insert("Received", "Value");
Thêm Header Tùy Chỉnh
Header email có thể được chỉ định bằng cách sử dụng MailMessage lớp. Để chỉ định một header tùy chỉnh trong tin nhắn email, hãy xem mẫu mã sau:
eml.Headers.Add("secret-header", "mystery");
Đoạn mã trên tạo ra một tiêu đề email ở định dạng sau:
secret-header: mystery
Tạo Tin Nhắn Đã Ký
Aspose.Email API cung cấp khả năng tạo tin nhắn đã ký bằng chứng chỉ. The AttachSignature phương thức của MailMessage lớp có thể được dùng để ký một tin nhắn để lưu hoặc thậm chí gửi nó bằng cách sử dụng SmtpClient.
Ký một Tin Nhắn
Đoạn mã sau cho bạn thấy cách ký một tin nhắn.
Sử dụng Tùy chọn Chứng chỉ Tách rời
Các client email dựa trên Web có thể không hiển thị được nội dung của Tin Nhắn Đã ký. Điều này có thể được giải quyết bằng cách tách chứng chỉ trước khi gửi tới các client email dựa trên Web. Cờ tách rời trong phương thức overload của AttachSignature có thể được sử dụng để đạt được điều này. Nếu đặt thành true, chứng chỉ sẽ được tách khỏi email và ngược lại. Để xem phần nội dung của Tin Nhắn Đã ký trong các client dựa trên Web, bạn cần tạo MailMessage với chữ ký tách rời. Đoạn mã sau cho bạn thấy cách sử dụng tùy chọn chứng chỉ tách rời.