Tạo và Quản lý Email

Tạo Tin Nhắn Email Mới

Cái MailMessage lớp đại diện cho một tin nhắn email và cho phép các nhà phát triển tạo tin nhắn email mới. Các thuộc tính email cơ bản như From, To, Subject và body có thể dễ dàng được gắn vào tin nhắn email mới tạo. Tương tự, chúng ta có thể lưu tin nhắn email vào các định dạng khác nhau như EML, MSG và MHTML.

  • Tạo một đối tượng của MailMessage lớp.
  • Đặt các thuộc tính của tin nhắn email.
  • Lưu tin nhắn email ở các định dạng khác nhau.

Đoạn mã dưới đây cho bạn cách tạo một email mới với các thuộc tính khác nhau.

Chỉ định Nhiều Người Nhận

Cái MailMessage đối tượng đại diện cho một tin nhắn email. Các thể hiện của MailMessage lớp được sử dụng để tạo các tin nhắn email được truyền tới máy chủ SMTP bằng SmtpClient lớp. Bài viết này trình bày cách chỉ định nhiều hơn một địa chỉ email. Địa chỉ email có thể được chỉ định bằng MailMessage lớp. Chúng là:

  • To - Địa chỉ người nhận có thể được chỉ định trong trường ‘To’. Người nhận trong trường ‘To’ là khán giả chính của tin nhắn. Có thể có nhiều hơn một địa chỉ người nhận.
  • Cc - CC nghĩa là "carbon copy" (bản sao), hoặc "courtesy copy" (bản sao lễ phép), cho phép bạn thêm người nhận email cần xem nội dung nhưng không nhất thiết phải hành động. Ví dụ, quản lý hoặc thành viên nhóm cần biết về cuộc trò chuyện. Với Aspose.Email, các địa chỉ CC có thể được chỉ định trong mã của bạn. Như vậy, email tự động hoặc mọi email tới một địa chỉ nhất định có thể được sao chép tới nhân viên liên quan.
  • Bcc - Bcc, bản sao giấu (blind carbon copy), cho phép bạn gửi email cho một người nhận được ẩn khỏi các người nhận khác. Khi CC xuất hiện trong thông tin email mà người nhận chính thấy, Bcc thì không. Nó dùng để thông báo ẩn. 

Để chỉ định nhiều địa chỉ email trong một tin nhắn, hãy thực hiện các bước sau:

  1. Tạo một đối tượng của MailMessage lớp.
  2. Chỉ định địa chỉ From và nhiều địa chỉ To, Cc và Bcc bằng MailMessage thể hiện.
  3. Tạo một đối tượng của SmtpClient lớp và gửi email bằng phương thức Send.

Mẫu mã dưới đây cho thấy cách chỉ định nhiều địa chỉ To, CC và BCC.

Đặt Tên Hiển Thị Người Gửi và Người Nhận

Các mẫu lập trình dưới đây minh họa cách thay đổi địa chỉ email thành tên thân thiện trong một email. Tên thân thiện là một tên dễ hiểu hơn địa chỉ email, ví dụ John Smith thay vì js346@domain.com. Khi gửi email, chúng ta có thể liên kết tên thân thiện với địa chỉ email trong MailMessage hàm khởi tạo lớp.

Để thay đổi địa chỉ email thành tên thân thiện trong một email, hãy thực hiện các bước sau:

  • Tạo một đối tượng của MailMessage lớp và chỉ định địa chỉ email trong các trường ToFrom cùng tên hiển thị.
  • Chỉ định địa chỉ email Cc và Bcc cùng tên hiển thị bằng cách gọi MailMessage hàm tạo lớp trong MailMessage thể hiện.
  • Tạo một đối tượng của SmtpClient lớp và gửi email bằng cách sử dụng Gửi phương thức.

Đoạn mã sau cho thấy cách hiển thị Tên cho các địa chỉ email.

Đặt Tiêu Đề cho Email

Cái MailMessage lớp cho phép bạn chỉ định bản tóm tắt ngắn gọn nội dung tin nhắn bằng tiêu đề thuộc tính. Đoạn mã sau đây minh họa cách tạo một email và đặt tiêu đề của nó:

from aspose.email import MailMessage

# Create a new email message
message = MailMessage()

# Set the subject of the email
message.subject = "Meeting Reminder: Project Update"

# Set other email properties (optional)
message.from_address = "sender@example.com"
message.to.append("recipient@example.com")
message.body = "This is a reminder for the upcoming project update meeting."

# Print the email details
print(f"Subject: {message.subject}")
print(f"From: {message.from_address}")
print(f"To: {', '.join(message.to)}")
print(f"Body: {message.body}")

Đặt Phần Thân Email

Cũng như tiêu đề của tin nhắn, phần thân email có thể được chỉ định bằng cùng MailMessage lớp. Một email có thể có nhiều phần thân. Có hai loại phần thân mail trong lớp:

  • Phần thân dạng HTML
  • Phần thân dạng Văn bản

Ngoài HtmlBody và TextBody, Aspose.Email có hai thuộc tính chỉ đọc khác liên quan đến phần thân mail:

  • IsBodyText: cho người dùng biết phần thân là văn bản hay không.
  • IsBodyHtml: cho người dùng biết phần thân là HTML hay văn bản thuần.

Bài viết này chỉ ra cách xác định nội dung văn bản thuần hoặc HTML, đặt văn bản thay thế và mã hoá phần thân email.

Đặt Phần Thân HTML

Phần thân Html được sử dụng để chỉ định nội dung HTML của phần thân tin nhắn. Phần thân Html phải được bao quanh bởi thẻ . Đoạn mã dưới đây cho bạn cách đặt phần thân HTML.

Đặt Văn Bản Thay Thế

Sử dụng AlternateView lớp để chỉ định các bản sao của tin nhắn email ở các định dạng khác nhau. Ví dụ, nếu bạn gửi một tin nhắn dạng HTML, bạn cũng có thể muốn cung cấp một phiên bản văn bản thuần để trường hợp một số người nhận dùng trình đọc email không hỗ trợ hiển thị HTML. Lớp này có hai thuộc tính, linked_resources và base_uri, được sử dụng để giải quyết các URL trong nội dung email.

  • LinkedResources là một tập hợp các đối tượng LinkedResources. Khi hiển thị, các URL trong nội dung email sẽ được so sánh với các URL trong Content Link của mỗi đối tượng LinkedResources trong tập hợp, và được giải quyết.
  • BaseUri được trình đọc email 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 liên kết nội dung tương đối trong bộ sưu tập LinkedResources.

Đoạn mã sau cho thấy cách đặt văn bản thay thế.

Các Tính Năng của MailMessage

Cái MailMessage class đại diện cho nội dung của một tin nhắn email. Các thể hiện của MailMessage class được sử dụng để xây dựng một tin nhắn email được truyền tới máy chủ SMTP để giao bằng cách sử dụng SmtpClient class. Bài viết này chỉ ra cách sử dụng MailMessage Các tính năng tiện ích của class để kiểm soát các tính năng email sau:

  • Date and time - Thông qua MailMessage Thuộc tính class Date cho phép chúng ta lấy hoặc đặt ngày và thời gian của email.
  • Mức độ ưu tiên của tin nhắn -  MailPriority lớp xác định các mức độ ưu tiên khi gửi email. Nó có thể là thấp, bình thường hoặc cao. Độ ưu tiên ảnh hưởng đến tốc độ truyền và giao nhận.
  • Mức độ nhạy cảm của tin nhắn -  MailSensitivity lớp xác định năm mức độ nhạy cảm.
  • Thông báo giao nhận - Thông báo giao nhận cho người gửi biết rằng email họ đã gửi đã được chuyển đến hộp thư đến của người nhận.

Theo mặc định, ngày là ngày thực tế mà 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 giao email thực tế được thêm bởi máy chủ SMTP trong phần tiêu đề email. Ví dụ, dưới đây là một tiêu đề email phổ biến, trong đó Date đặt trường Date.

import aspose.email as ae
from aspose.email import MailMessage

# Create a new MailMessage instance
message = MailMessage()

# Add SMTP headers to the message
message.headers.add("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")
message.headers.add("Return-Path", "<xyz@oikoscucine.it>")
message.headers.add("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")

# Set email details
message.from_address = "XYZ <xyz@oikoscucine.it>"
message.to.append("abc@aspose.com")
message.subject = "For ABC"
message.date = "Thu, 22 Feb 2007 20:58:51 +0300"
message.message_id = "<01c756c4$41b554d0$6c822ecf@dishonestyinsufferably>"
message.headers.add("MIME-Version", "1.0")
message.headers.add("Content-Type", "multipart/alternative; boundary=\"----=_NextPart_000_0006_01C7569A.58DF4CD0\"")
message.headers.add("X-Mailer", "Microsoft Office Outlook, Build 11.0.5510")
message.headers.add("X-MimeOLE", "Produced By Microsoft MimeOLE V6.00.2800.1106")
message.headers.add("Thread-Index", "Aca6Q:=ES0M(9-=(<.<1.<Q9@QE6CD==")
message.headers.add("X-Read", "1")

# Save the message as an EML file
message.save("output.eml", ae.EmlSaveOptions())

Đoạn mã dưới đây minh họa cách sử dụng từng tính năng đã đề cập ở trên.

import aspose.email as ae
from aspose.email import MailMessage, MailPriority, MailSensitivity
from datetime import datetime

# Create a new MailMessage instance
message = MailMessage("sender@gmail.com", "receiver@gmail.com", "Some subject", "Some body text")

# Set additional properties
message.date = datetime.now()
message.priority = MailPriority.HIGH
message.sensitivity = MailSensitivity.NORMAL
message.headers.add("X-Mailer", "Aspose.Email")

# Save the message as an EML file
message.save("output.eml", ae.EmlSaveOptions())

Yêu cầu Biên nhận Đọc

Các mẫu lập trình dưới đây cho thấy cách bạn có thể yêu cầu biên nhận đã đọc. The MailMessage lớp DeliveryNotificationOptions Thuộc tính enumeration mô tả các tùy chọn thông báo giao nhận cho một email. Để yêu cầu biên nhận đã đọc sau khi gửi email, hãy thực hiện các bước sau:

  1. Tạo một đối tượng của MailMessage lớp.
  2. Chỉ định người gửi, người nhận và phần thân HTML cho email trong MailMessage thể hiện.
  3. Chỉ định  DeliveryNotificationOptions trong các MailMessage các thể hiện.
  4. Tạo một đối tượng của SmtpClient lớp và gửi email bằng phương thức Send.

Yêu cầu biên 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 này.
  • Người dùng cuối có thể chọn không gửi.

Đoạn mã sau cho thấy cách yêu cầu biên nhận đọc.

import aspose.email as ae
from aspose.email import MailMessage, SmtpClient, DeliveryNotificationOptions

# Create an instance of MailMessage class
message = MailMessage()

# Specify From, To, HtmlBody, and DeliveryNotificationOptions
message.from_address = "sender@sender.com"
message.to.append("receiver@receiver.com")
message.html_body = "<html><body>This is the Html body</body></html>"
message.delivery_notification_options = DeliveryNotificationOptions.ON_SUCCESS

message.headers.add("Return-Receipt-To", "sender@sender.com")
message.headers.add("Disposition-Notification-To", "sender@sender.com")

# Create an instance of SmtpClient class
client = SmtpClient()

# Specify your mailing host server, Username, Password, and Port
client.host = "smtp.server.com"
client.username = "Username"
client.password = "Password"
client.port = 25

try:
    # Client.send will send this message
    client.send(message)
    # Display 'Message sent' only if the message is sent successfully
    print("Message sent")
except Exception as ex:
    import traceback
    traceback.print_exc()

Đặt 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 lớp MailMessage. Các loại tiêu đề thông thường được định nghĩa trong lớp HeaderType. Đây là một lớp sealed hoạt động giống như một enumeration thông thường.

Thông thường một 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 này là khán giả chính của tin nhắn. Có thể có nhiều hơn một đị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, chỉ việc gửi một tin nhắn tới nhiều người nhận sao cho họ không thấy danh sách đầy đủ các người nhận. Dùng để thông báo ẩn danh.
  • 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 dùng làm chỉ báo chuỗi hội thoại cho các tin nhắn trả lời hoặc bình luận trên các tin nhắn khác.
  • Date: Tiêu đề này chỉ định ngày (và giờ). Thông thường, đây là ngày mà tin nhắn được soạn 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ị các 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, thực hiện các bước sau:

  • Tạo một đối tượng của MailMessage lớp.
  • Chỉ định To, From, CC, Bcc, ReplyTo, Subject, Date & XMailer bằng một thể hiện của MailMessage.
  • Tạo một đối tượng của MimeHeader lớp và chỉ định tiêu đề bí mật.
  • Thêm tiêu đề bí mật vào MailMessage thể hiện.

Đoạn mã dưới đây cho bạn cách đặt tiêu đề email.

import aspose.email as ae
from aspose.email import MailMessage
from datetime import datetime

# Create an instance of MailMessage class
message = MailMessage()

# Specify email details
message.reply_to_list.append("reply@reply.com")
message.from_address = "sender@sender.com"
message.to.append("receiver1@receiver.com")
message.cc.append("receiver2@receiver.com")
message.bcc.append("receiver3@receiver.com")
message.subject = "test mail"
message.date = datetime(2006, 3, 6)
message.headers.add("X-Mailer", "Aspose.Email")

Đoạn mã trên tạo ra một tiêu đề email ở định dạng sau. Bạn có thể quan sát bằng cách mở tệp kết quả "MsgHeaders.msg" trong Microsoft Outlook và xem Thuộc tính.


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

secret-header: mystery

Chèn Tiêu đề tại Vị trí Cụ thể

Cái Thêm phương thức của HeadersCollection lớp chèn tiêu đề vào cuối bộ sưu tập. Tuy nhiên, đôi khi có thể cần chèn tiêu đề vào vị trí cụ thể. Trong trường hợp đó, 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 HeadersCollection. Nếu bộ sưu tập chứa các tiêu đề cùng tên, tiêu đề này sẽ được chèn trước các tiêu đề khác có cùng tên.

Đoạn mã dưới đây cho bạn cách chèn tiêu đề ở vị trí cụ thể.

# Insert a header into the MailMessage instance
message.headers.insert("Received", "Value")

Thêm Tiêu đề Tùy chỉnh vào email

Mẫu lập trình dưới đây minh họa cách chỉ định tiêu đề tùy chỉnh trong tin nhắn email bằng MailMessage lớp.

# Add a header into the MailMessage instance
message.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