Creación y Gestión de Correos Electrónicos

Creando un Nuevo Mensaje de Correo

El MailMessage la clase representa un mensaje de correo y permite a los desarrolladores crear un nuevo mensaje. Propiedades básicas como From, To, Subject y body pueden adjuntarse fácilmente al mensaje recién creado. De manera similar, podemos guardar el mensaje en distintos formatos como EML, MSG y MHTML.

  • Cree una instancia de la MailMessage clase.
  • Establecer propiedades del mensaje de correo.
  • Guardar el mensaje de correo en diferentes formatos.

El siguiente fragmento de código muestra cómo crear un nuevo correo con diferentes propiedades.

Especificar múltiples destinatarios

El MailMessage objeto representa un mensaje de correo. Las instancias del MailMessage clase se usa para construir mensajes de correo que se transmiten a un servidor SMTP usando el SmtpClient clase. Este artículo muestra cómo especificar más de una dirección de correo. Las direcciones de correo pueden especificarse usando el MailMessage clase. Son:

  • To - Las direcciones de destinatario pueden especificarse en el campo ‘To’. Los destinatarios del campo ‘To’ son la audiencia principal del mensaje. Puede haber más de una dirección de destinatario.
  • Cc - CC significa "copia de carbón" o "copia de cortesía", y le permite añadir destinatarios de correo que necesitan ver el correo pero que no se espera que actúen al respecto. Por ejemplo, gerentes o miembros de su equipo que deben estar al tanto de una conversación. Con Aspose.Email, las direcciones CC pueden especificarse en su código. De esta manera, los correos electrónicos automatizados, o todos los correos a una dirección específica, pueden copiarse al personal relevante.
  • Bcc - Bcc, copia de carbón oculta, le permite enviar un correo a un destinatario que está oculto para los demás destinatarios. Mientras que una CC aparece en la información del correo que los destinatarios principales ven, una Bcc no. Está destinada a notificaciones ocultas. 

Para especificar varias direcciones de correo electrónico en un mensaje, siga estos pasos:

  1. Cree una instancia de la MailMessage clase.
  2. Especifica los campos From y múltiples direcciones To, Cc y Bcc usando el MailMessage instancia.
  3. Cree una instancia de la SmtpClient clase y envíe el correo usando el método Send.

El siguiente ejemplo de código muestra cómo se pueden especificar múltiples direcciones To, CC y BCC.

Establecer Nombres para Remitente y Destinatario

Los ejemplos de programación a continuación demuestran cómo cambiar direcciones de correo a nombres amigables en un mensaje. Un nombre amigable es un nombre más comprensible para humanos que la dirección de correo, por ejemplo John Smith en lugar de js346@domain.com. Al enviar un correo, podemos asociar un nombre amigable con una dirección de correo en el MailMessage constructor de clase.

Para cambiar direcciones de correo a nombres amigables en un mensaje de correo, siga estos pasos:

  • Cree una instancia de la MailMessage clase y especifica direcciones de correo en los campos To y From junto con nombres amigables.
  • Especifica las direcciones de correo Cc y Bcc junto con nombres amigables llamando al MailMessage constructor de clase en el MailMessage instancia.
  • Cree una instancia de la SmtpClient clase y envíe el correo usando el Enviar método.

El siguiente fragmento de código le muestra cómo mostrar nombres para direcciones de correo electrónico.

Estableciendo el Asunto de un Correo

El MailMessage la clase permite especificar el resumen conciso del contenido del mensaje usando el asunto propiedad. El siguiente ejemplo de código demuestra cómo crear un correo y establecer su asunto:

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

Estableciendo el Cuerpo del Correo

Así como el asunto del mensaje, el cuerpo del correo puede especificarse usando el mismo MailMessage clase. Un correo puede tener varios cuerpos. Hay dos tipos de cuerpos de correo en la clase:

  • Cuerpo HTML
  • Cuerpo de texto

Además de HtmlBody y TextBody, Aspose.Email tiene otras dos propiedades de solo lectura relacionadas con el cuerpo del mensaje:

  • IsBodyText: indica al usuario si el cuerpo es texto.
  • IsBodyHtml: indica al usuario si el cuerpo es HTML o texto plano.

Este artículo muestra cómo definir texto plano o cuerpo HTML, establecer texto alternativo y codificar el cuerpo del correo.

Establecer cuerpo HTML

El cuerpo HTML se usa para especificar el contenido HTML del cuerpo del mensaje. El cuerpo HTML debe estar entre etiquetas . El siguiente fragmento de código muestra cómo establecer el cuerpo HTML.

Establecer texto alternativo

Utilice el AlternateView clase para especificar copias de un mensaje de correo en diferentes formatos. Por ejemplo, si envías un mensaje en HTML, también podrías proporcionar una versión de texto plano por si algunos destinatarios usan lectores de correo que no pueden mostrar contenido HTML. Esta clase tiene dos propiedades, linked_resources y base_uri, que se usan para resolver URLs dentro del contenido del correo.

  • LinkedResources es una colección de objetos LinkedResources. Cuando se renderiza, las URL dentro del contenido del correo se comparan primero con las URL en el Content Link de cada objeto LinkedResources en la colección, y se resuelven.
  • BaseUri es usado por el lector de correo para resolver URLs relativas dentro del cuerpo, y también para resolver URLs relativas de Content Link, en la colección LinkedResources.

El siguiente fragmento de código le muestra cómo establecer texto alternativo.

Características de MailMessage

El MailMessage class representa el contenido de un mensaje de correo electrónico. Instancias de la MailMessage class se utilizan para construir un mensaje de correo electrónico que se transmite a un servidor SMTP para su entrega mediante el SmtpClient class. Este artículo muestra cómo usar MailMessage Funciones de utilidad class para controlar las siguientes características del correo electrónico:

  • Fecha y hora - A través del MailMessage Propiedad class Date que obtenemos o establecemos la fecha y hora de un correo electrónico.
  • Prioridad del mensaje - La MailPriority clase especifica los niveles de prioridad para el envío de un mensaje de correo. Puede ser baja, normal o alta. La prioridad influye en la velocidad de transmisión y la entrega.
  • Sensibilidad del mensaje - El MailSensitivity clase especifica cinco niveles de sensibilidad.
  • Notificación de entrega - Las notificaciones de entrega informan a los remitentes que el correo que enviaron ha sido entregado a la bandeja de entrada del destinatario.

Por defecto, la fecha es la fecha real en que se envió el mensaje, y la hora es la hora en que se envió, según lo muestra Microsoft Outlook. Sin embargo, el tiempo real de entrega del correo electrónico lo añade el propio servidor SMTP en el encabezado del mensaje. Por ejemplo, a continuación se muestra un encabezado de correo común, donde Date establece el campo 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())

El fragmento de código a continuación ilustra cómo puede usarse cada una de las características discutidas anteriormente.

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

Solicitar una confirmación de lectura

Los ejemplos de programación a continuación muestran cómo puedes solicitar una confirmación de lectura. El MailMessage clase DeliveryNotificationOptions La propiedad de enumeración describe las opciones de notificación de entrega para un correo electrónico. Para solicitar una confirmación de lectura después de enviar un correo electrónico, sigue estos pasos:

  1. Cree una instancia de la MailMessage clase.
  2. Especifica el remitente, el receptor y el cuerpo HTML del correo en el MailMessage instancia.
  3. Especifique el DeliveryNotificationOptions en otro MailMessage instancias.
  4. Cree una instancia de la SmtpClient clase y envía el correo usando el método Send.

Las solicitudes de confirmación de lectura pueden no ser siempre aceptadas porque:

  • Un cliente de correo puede no implementar esa funcionalidad.
  • El usuario final puede tener esa funcionalidad desactivada.
  • El usuario final puede elegir no enviar una.

El siguiente fragmento de código le muestra cómo solicitar una confirmación de lectura.

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

Establecer encabezados de correo electrónico

Los encabezados de correo representan un estándar de Internet y los RFC definen los campos de encabezado que se incluyen en los mensajes de correo de Internet. Un encabezado de correo puede especificarse usando la clase MailMessage. Los tipos de encabezados comunes están definidos en la clase HeaderType. Es una clase sellada que funciona como una enumeración normal.

Normalmente un encabezado de correo electrónico contiene estos campos:

  • To: Las direcciones de los destinatarios pueden especificarse en el campo To. Estos destinatarios son la audiencia primaria del mensaje. Puede haber más de una dirección de destinatario.
  • From: Este campo muestra la dirección de correo del remitente del mensaje.
  • Cc: Permite a los usuarios enviar un mensaje como "Copia de Carbón" o "Copia de Cortesía". Es decir, no se espera que el receptor responda o actúe. Normalmente se notifica al personal de supervisión con CC.
  • Bcc: Significa Blind Carbon Copy (copia oculta), y se refiere a la práctica de enviar un mensaje a varios destinatarios de modo que lo que reciben no contenga la lista completa de destinatarios. Sirve para notificaciones ocultas.
  • ReplyTo: Este campo de encabezado indica a dónde el remitente desea que lleguen las respuestas.
  • Subject: Título, encabezado, asunto. A menudo se usa como indicador de hilo para mensajes que responden o comentan a otros mensajes.
  • Date: Este encabezado especifica una fecha (y hora). Normalmente, es la fecha en que el mensaje fue redactado y enviado.
  • XMailer: Información sobre el software cliente del originador. Ejemplo: X-Mailer: Aspose.Email. XMailer es usado por los clientes de correo. Diferentes clientes de correo tendrán diferentes valores de XMailer. El valor de XMailer de MS Outlook es Microsoft Office Outlook, Build 11.0.5510. Es ignorado por el receptor o lector de correo.

Normalmente, un encabezado de correo electrónico se ve algo como esto:


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

Para personalizar un encabezado de correo electrónico, siga estos pasos:

  • Cree una instancia de la MailMessage clase.
  • Especifica To, From, CC, Bcc, ReplyTo, Subject, Date y XMailer usando una instancia del MailMessage.
  • Cree una instancia de la MimeHeader clase y especifique el encabezado secreto.
  • Añade el encabezado secreto al MailMessage instancia.

El siguiente fragmento de código muestra cómo establecer encabezados de correo.

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

El fragmento de código anterior produce un encabezado de correo en el siguiente formato. Esto puede observarse abriendo el archivo resultante "MsgHeaders.msg" en Microsoft Outlook y luego viendo sus Propiedades.


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

Insertar encabezado en ubicación específica

El Agregar método de HeadersCollection clase inserta el encabezado al final de la colección. Sin embargo, a veces es necesario insertar un encabezado en una ubicación específica. En tal caso, el Agregar el método no será de ayuda. Para lograr esto, usa el Insert método del HeadersCollection. Si la colección contiene encabezados con el mismo nombre, este encabezado se insertará antes que los demás encabezados con el mismo nombre.

El siguiente fragmento de código muestra cómo insertar un encabezado en una ubicación específica.

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

Agregar encabezados personalizados al correo electrónico

El ejemplo de programación a continuación muestra cómo especificar un encabezado personalizado en un mensaje de correo usando el MailMessage clase.

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

El fragmento de código anterior produce un encabezado de correo en el siguiente formato:

secret-header: mystery