Aspose.Email  para C++

Enviar correo electrónico C++

Cómo usar C++ y SMTP para enviar correos electrónicos con archivos adjuntos o iCalendar

  Descargar prueba gratuita

Por regla general, el protocolo SMTP se usa para enviar mensajes de correo electrónico. Es necesario tener acceso a un servidor SMTP para enviar un mensaje. Debe encontrar la dirección del servidor SMTP en la red, determinar el puerto y el tipo de cifrado, el inicio de sesión y el método de autorización. Algunos proveedores de correo electrónico también requieren que habilites el acceso al servidor SMTP en la configuración de tu cuenta. Además, si no te sientes cómodo implementando la autorización de OAuth en tu software, puedes intentar crear una contraseña independiente para la aplicación en la configuración de tu cuenta.

Entonces, si ha realizado todo el trabajo preparatorio, es hora de comenzar a enviar mensajes. Puede usar la biblioteca Aspose.Email para C++ para esto. Considera el ejemplo más simple:

auto smtpClient = MakeObject<SmtpClient>(u"smtp.gmail.com", u"login", u"password", SecurityOptions::SSLAuto);
smtpClient->Send(u"login@gmail.com", u"to@gmail.com", u"subject", u"body");

Usa esta opción si quieres enviar un correo electrónico de texto sencillo.

Enviar correos electrónicos con archivos adjuntos usando C++

Si necesitas enviar un mensaje de correo electrónico complejo usando C++, la clase MailMessage definitivamente te será útil. Por ejemplo, para enviar un mensaje similar al anterior:

auto message = MakeObject<MailMessage>(u"login@gmail.com", u"to@aspose.com", u"subject", u"body");
smtpClient->Send(message);

La clase MailMessage es una gran herramienta. Permite enviar mensajes almacenados en formatos de archivo EML y MSG (formato de mensaje de Outlook). También puedes usar este formato para enviar archivos adjuntos o incluso objetos de iCalendar para configurar o confirmar la asistencia. MailMessage le permite ajustar su lista de destinatarios, destinatarios de Cc y Bcc. Puede enviar un correo electrónico con marcado HTML. También puedes marcar el mensaje con varias marcas antes de enviarlo, añadir metadatos, cifrarlo, etc.

¿Por qué la gente elige Aspose.Email para C++ para enviar correos electrónicos?

Sí, Aspose.Email para C++ no es solo una utilidad para enviar mensajes de correo electrónico. Esta es una solución integral que brinda soporte integral para una variedad de tareas relacionadas con el envío, la recepción, el almacenamiento y el procesamiento del correo electrónico. Y puede estar seguro de que, al realizar estas tareas, no se encontrará con las limitaciones de la biblioteca. Llevamos muchos años estudiando este tema y ampliamos constantemente su funcionalidad.

Probablemente te hayas encontrado con pequeñas bibliotecas que han aparecido hace relativamente poco tiempo. Resuelven de forma fácil y natural un problema simple al que se enfrentan muchos usuarios. Pero tan pronto como te apartas un poco, te das cuenta de que si sigues usando esta solución tan poco pretenciosa, te ves obligado a usar muletas constantemente, algunos módulos para eludir las restricciones de la biblioteca, adaptadores diseñados para hacer amigos de tu pequeña biblioteca con otra pequeña biblioteca, etc. Y ahora, tu pequeña solución ya no es tan ingeniosa. Además, lo envías al servidor, donde se pega un tiro en el pie de forma regular y constante, porque nadie ha probado un zoológico de muletas e integraciones así antes que tú. Y por mucho que lo intentes, tarde o temprano te toparás con las limitaciones de esta biblioteca. Y tienes que buscar algo nuevo. Por lo tanto, cuando se trata de trabajar con el correo electrónico, ¡quizás quieras considerar Aspose.Email para C++!

Le ofrecemos no solo un cliente para trabajar con SMTP. En primer lugar, está lejos de ser el único protocolo para enviar correos electrónicos con C++. ¡Con nuestro producto, puede enviar correos electrónicos con Exchange EWS y Microsoft Graph!

Ya te hemos hablado de las posibilidades de MailMessage en este artículo. Pero esta está lejos de ser la única herramienta para preparar cartas para su envío. Usted puede:

  • generar cartas a partir de una plantilla utilizando TemplateEngine;
  • desempaquete contenedores con letras, gracias al soporte de los formatos OST, PST y MBOX;
  • descargue cartas del buzón utilizando el soporte de los protocolos IMAP, POP3, Exchange EWS y WebDAV, así como Microsoft Graph;
  • convierte correos electrónicos de un formato a otro.

Puede recibir fácilmente una carta mediante el protocolo Exchange Ews. Estará en formato MAPI. Pero puedes convertirlo fácilmente al formato EML, lo que te permitirá enviarlo más adelante mediante el protocolo SMTP. Al mismo tiempo, puedes cambiar la lista de destinatarios o el remitente de la carta en cualquier momento.

¿Cómo funciona el envío de un correo electrónico con C++ y SMTP?

Configuración SMTP

En el momento en que creas una instancia de la clase SmtpClient, no ocurre nada especial. Solo tiene que especificar el número de ajustes que le permitirán conectarse a un servidor SMTP en el futuro para enviar mensajes. Toda la magia ocurre en la primera llamada al send método. ¿Qué está pasando en este momento?

De hecho, todo depende de la configuración que haya especificado. Consideremos varias opciones. Supongamos que ha especificado el host del servidor pero no ha especificado el puerto ni el tipo de cifrado. En este caso, se iniciará el mecanismo de selección automática de la configuración. Este mecanismo consiste en intentos sucesivos de conexión al servidor SMTP mediante puertos estándar y los algoritmos de cifrado correspondientes. En primer lugar, se intenta conectarse al servidor a través de un canal cifrado. Pero si falla, el mecanismo intentará establecer una conexión no cifrada. Si no desea utilizar la versión no cifrada del protocolo, especifique SecurityOptions.SSL_AUTO ambientación. Esta configuración también le permite seleccionar la configuración del servidor, pero solo comprueba los canales cifrados.

Si fue posible establecer una conexión con el servidor, se realiza un intento de autorización. Si la autorización falla, el código de error se guarda para el futuro. El comparador intentará conectarse de otras maneras. El mensaje se enviará si puedes conectarte e iniciar sesión. Si la conexión falla, el usuario recibirá un código de error de autorización (si se guardó uno durante la selección). Por lo tanto, el usuario podrá comprender que ingresó la contraseña incorrecta o que cometió algún otro error. Si ninguna de las opciones de puertos y tipos de cifrado encaja y ni siquiera hemos podido realizar el intento de autorización, el usuario recibirá un mensaje de error en el que se le notificará que la configuración del servidor es incorrecta.

Por cierto, cabe señalar que nuestro SMTPClient (como todos los demás clientes de nuestra biblioteca) puede conectarse al servidor SMTP a través de un proxy. También puede especificar la configuración del servidor proxy durante la inicialización.

Autorización de cliente SMTP

SmtpClient admite más que solo diferentes métodos de conexión. También admite diferentes métodos de autorización. Por ejemplo, puedes usar el mecanismo OAuth. Para ello, proporcionamos varias herramientas a la vez.

En primer lugar, es TokenProvider. Esta es la clase que contiene todos los datos necesarios para almacenar y actualizar el token de OAuth. En este caso, debes realizar la autorización de OAuth tú mismo y guardar toda la información necesaria recibida del servidor de OAuth. RefreshToken desempeña un papel clave en este sentido. Se trata de un token adicional emitido por el servidor de autorización, junto con AccessToken. Su diferencia es que AccessToken, por regla general, es válido solo durante un cierto período de tiempo. Mientras que RefreshToken es válido durante mucho más tiempo, o incluso indefinidamente (hasta que el usuario lo revoque). Gracias a RefreshToken, la clase TokenProvider siempre puede actualizar un AccessToken si este último ya no es válido.

Otra opción es la interfaz ITokenProvider. En este caso, no solo puede implementar el mecanismo OAuth usted mismo, sino también pasarlo al SMTPClient para que lo utilice él mismo según sea necesario.

Cabe señalar que el mecanismo OAuth no siempre es necesario. A veces es mucho más fácil iniciar sesión con un nombre de usuario y contraseña. Y para ello, no necesita reconfigurar su cuenta de correo electrónico, rechazar la autorización de dos factores, etc. Existe una solución más segura: se trata de una contraseña separada para la aplicación. Para aprovechar esta función, debe revisar la configuración de su cuenta de correo electrónico. Lo más probable es que la contraseña de la aplicación se genere automáticamente cuando la configures en tu cuenta. No olvides guardarla en algún sitio. También recomendamos limitar los permisos de la aplicación en la medida de lo posible durante la configuración. Por supuesto, si un atacante obtiene acceso a esta contraseña, no podrá apropiarse de su cuenta, pero aun así puede hacer muchas cosas desagradables. Y aquí no puede hacer nada, porque la contraseña es lo único que protege sus datos de los intrusos. En general, la herramienta es muy conveniente, pero reduce la seguridad de su cuenta, úsela bajo su propio riesgo.

Envío de correo electrónico a través de SMTP con C++

Por lo tanto, se estableció la conexión con el servidor y la autorización se realizó correctamente. Es hora de enviar cartas. Para el envío, se usa un objeto de la clase MailMessage. Técnicamente, solo tiene que pasar todos los datos necesarios al método de envío. Pero, de hecho, se seguirán recopilando en el objeto MailMessage. Además, gracias a la capacidad de la clase MailMessage de serializarse al formato EML, obtenemos el flujo de datos necesario que se puede pasar a nuestro servidor SMTP. Por lo tanto, le damos al servidor un comando para enviar una carta y transferirle todo el contenido de la carta en forma de datos de texto. Si los datos binarios se transmiten por carta, por ejemplo, en forma de archivos adjuntos, estos datos se codifican en formato Base64 y los metadatos de la carta indican que el destinatario tendrá que volver a decodificarlos. El servidor SMTP puede verificar la exactitud del mensaje recibido (por ejemplo, marcar el campo FROM con la cuenta del remitente en el servidor), así como complementar los metadatos del mensaje según su criterio. A continuación, el servidor enviará el correo electrónico a los destinatarios, cuya lista también obtendrá de los metadatos del correo electrónico.