Создание и управление письмами

Создание нового сообщения email

Этот MailMessage класс представляет сообщение email и позволяет разработчикам создавать новые сообщения. Основные свойства письма, такие как From, To, Subject и тело, могут быть легко присоединены к новому сообщению. Аналогично мы можем сохранять сообщение в разных форматах, например EML, MSG и MHTML.

  • Создать экземпляр MailMessage класс.
  • Установите свойства сообщения.
  • Сохраните сообщение в разных форматах.

Следующий фрагмент кода показывает, как создать новое письмо с различными свойствами.

Указание нескольких получателей

Этот MailMessage объект представляет сообщение email. Экземпляры MailMessage класс используется для построения сообщений email, которые передаются на SMTP‑сервер с помощью SmtpClient класс. Эта статья демонстрирует, как указать более одного адреса email. Адреса email могут быть указаны с помощью MailMessage класс. Они:

  • To — адреса получателей могут быть указаны в поле «To». Получатели поля «To» являются основной аудиторией сообщения. Может быть указано более одного адреса получателя.
  • Cc — CC означает «копия», «карбон‑копия» (carbon copy) или «вежливая копия» (courtesy copy) и позволяет добавить получателей, которым нужно видеть письмо, но которые не обязаны действовать по нему. Например, менеджеры или члены вашей команды, которым необходимо быть в курсе разговора. С Aspose.Email адреса CC можно указать в коде. Таким образом, автоматические письма или все письма на конкретный адрес могут копироваться соответствующим сотрудникам.
  • Bcc — скрытая копия (blind carbon copy), позволяет отправить письмо получателю, скрыв его от остальных получателей. В то время как CC виден получателям, Bcc скрыт. Предназначен для скрытых уведомлений. 

Чтобы указать несколько адресов электронной почты в письме, выполните следующие шаги:

  1. Создать экземпляр MailMessage класс.
  2. Укажите адрес From и несколько адресов To, Cc и Bcc, используя MailMessage экземпляр.
  3. Создать экземпляр SmtpClient класс и отправьте письмо, используя метод Send.

Пример кода ниже показывает, как можно указать несколько адресов To, CC и BCC.

Установка отображаемых имён отправителя и получателя

Приведённые ниже примеры кода демонстрируют, как изменить адреса электронной почты на дружелюбные имена в письме. Дружелюбное имя — это более удобочитаемое название, чем сам адрес, например John Smith вместо js346@domain.com. При отправке письма мы можем связать дружелюбное имя с адресом в MailMessage конструктор класса.

Чтобы изменить адреса электронной почты на дружелюбные имена в письме, выполните следующие шаги:

  • Создать экземпляр MailMessage класс и укажите адреса email в полях To и From вместе с отображаемыми именами.
  • Укажите адреса Cc и Bcc вместе с отображаемыми именами, вызывая MailMessage конструктор класса в MailMessage экземпляр.
  • Создать экземпляр SmtpClient класс и отправьте письмо, используя Отправить метод.

Следующий фрагмент кода показывает, как отображать имена для адресов электронной почты.

Установка темы письма

Этот MailMessage класс позволяет задать краткое содержание сообщения, используя тема свойство. Следующий пример кода демонстрирует, как создать письмо и установить его тему:

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}")

Установка тела письма

Помимо темы сообщения, тело письма может быть указано тем же MailMessage класс. Письмо может иметь несколько тел. В классе есть два типа тел письма:

  • HTML‑тело
  • Текстовое тело

В дополнение к HtmlBody и TextBody, у Aspose.Email есть ещё два свойства только для чтения, связанные с телом письма:

  • IsBodyText: указывает пользователю, является ли тело текстовым.
  • IsBodyHtml: сообщает пользователю, является ли тело HTML или обычным текстом.

Эта статья показывает, как определить обычный текст или HTML‑текст тела, задать альтернативный текст и закодировать тело письма.

Установка HTML‑тела

Html‑body используется для указания HTML‑содержимого тела сообщения. Html‑body должен быть заключён между тегами . Следующий фрагмент кода показывает, как задать HTML‑body.

Установка альтернативного текста

Используйте AlternateView класс для указания копий сообщения email в разных форматах. Например, если вы отправляете сообщение в HTML, вы также можете предоставить версию в простом тексте на случай, если некоторые получатели используют почтовые клиенты, не поддерживающие HTML‑контент. У этого класса два свойства, linked_resources и base_uri, которые используются для разрешения URL‑адресов в содержимом письма.

  • LinkedResources — это коллекция объектов LinkedResources. При рендеринге URL‑адреса в содержимом письма сначала сопоставляются с URL‑адресами в поле Content Link каждого объекта LinkedResources в коллекции, и разрешаются.
  • BaseUri используется чтением письма для разрешения относительных URL‑адресов внутри тела, а также для разрешения относительных URL‑адресов Content Link в коллекции LinkedResources.

Следующий фрагмент кода показывает, как задать альтернативный текст.

Функции MailMessage

Этот MailMessage класс представляет содержимое сообщения письма. Экземпляры MailMessage классы используются для построения сообщения письма, которое передаётся SMTP‑серверу для доставки с помощью SmtpClient класс. Эта статья показывает, как использовать MailMessage класс utility предоставляет возможности для управления следующими функциями письма:

  • Дата и время — через MailMessage Свойство класса Date позволяет получить или установить дату и время письма.
  • Приоритет сообщения — MailPriority класс определяет уровни приоритета при отправке письма. Приоритет может быть низким, обычным или высоким. Приоритет влияет на скорость передачи и доставки.
  • Чувствительность сообщения — MailSensitivity класс определяет пять уровней чувствительности.
  • Уведомление о доставке — уведомления о доставке позволяют отправителям узнать, что их письмо доставлено во входящие получателя.

По умолчанию дата является фактической датой отправки сообщения, а время — временем отправки, как отображается в Microsoft Outlook. Однако реальное время доставки письма добавляется самим SMTP‑сервером в заголовок письма. Например, ниже приведён общий заголовок письма, где Date задаёт поле 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())

Следующий фрагмент кода демонстрирует, как можно использовать каждую из перечисленных выше функций.

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())

Запрос уведомления о прочтении

Ниже приведённые примеры кода показывают, как запросить уведомление о прочтении. The MailMessage класс DeliveryNotificationOptions Свойство перечисления описывает параметры уведомления о доставке для письма. Чтобы запросить уведомление о прочтении после отправки письма, выполните следующие действия:

  1. Создать экземпляр MailMessage класс.
  2. Укажите отправителя, получателя и HTML‑body для письма в MailMessage экземпляр.
  3. Укажите DeliveryNotificationOptions в других MailMessage экземпляры.
  4. Создать экземпляр SmtpClient класс и отправьте письмо, используя метод Send.

Запросы на подтверждение чтения могут не всегда исполняться, потому что:

  • Почтовый клиент может не поддерживать эту функцию.
  • У конечного пользователя может быть отключена эта функция.
  • Конечный пользователь может решить не отправлять его.

Следующий фрагмент кода показывает, как запросить уведомление о прочтении.

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()

Установить заголовки письма

Заголовки email представляют собой интернет‑стандарт, а RFC определяют поля заголовков, включаемые в сообщения email. Заголовок email может быть указан с помощью класса MailMessage. Общие типы заголовков определены в классе HeaderType. Это sealed‑класс, работающий как обычное перечисление.

Обычно заголовок письма содержит следующие поля:

  • To: Адреса получателей могут быть указаны в поле To. Эти получатели являются основной аудиторией сообщения. Может быть указано более одного адреса получателя.
  • From: Это поле показывает адрес электронной почты отправителя сообщения.
  • Cc: Позволяет пользователям отправлять сообщение как «Carbon Copy» (копию) или «Courtesy Copy» (вежливую копию). Получатель не обязан отвечать или предпринимать действия. Обычно таким образом уведомляются руководящие лица.
  • 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

Чтобы настроить заголовок письма, выполните следующие шаги:

  • Создать экземпляр MailMessage класс.
  • Укажите To, From, CC, Bcc, ReplyTo, Subject, Date и XMailer, используя экземпляр MailMessage.
  • Создать экземпляр MimeHeader класс и укажите секретный заголовок.
  • Добавьте скрытый заголовок в MailMessage экземпляр.

Следующий фрагмент кода показывает, как задать заголовки письма.

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")

Приведённый выше фрагмент кода генерирует заголовок письма в следующем формате. Это можно увидеть, открыв полученный файл "MsgHeaders.msg" в Microsoft Outlook и просмотрев свойства.


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

Вставить заголовок в определённое место

Этот Добавить метод HeadersCollection класс вставляет заголовок в конец коллекции. Однако иногда может потребоваться вставить заголовок в определённое место. В таком случае, Добавить метод не поможет. Чтобы достичь этого, используйте Insert метод HeadersCollection. Если коллекция содержит заголовки с тем же именем, этот заголовок будет вставлен перед другими заголовками с тем же именем.

Следующий фрагмент кода показывает, как вставить заголовок в определённое место.

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

Добавление пользовательских заголовков к письму

Приведённый ниже пример программы демонстрирует, как задать пользовательский заголовок в сообщении email с помощью MailMessage класс.

# Add a header into the MailMessage instance
message.headers.add("secret-header", "mystery")

Приведённый выше фрагмент кода генерирует заголовок письма в следующем формате:

secret-header: mystery