Enviar correo C++
Cómo usar C++ y SMTP para enviar correo con adjunto o iCalendar
Descargar prueba gratuitaPor regla general, el protocolo SMTP se usa para enviar mensajes de correo. Necesita 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 método de inicio de sesión y autorización. Algunos proveedores de correo también requieren habilitar el acceso al servidor SMTP en la configuración de su cuenta. Además, si no se siente cómodo implementando la autorización OAuth en su software, puede intentar crear una contraseña separada para la aplicación en la configuración de su cuenta.
Entonces, si ha realizado todo el trabajo preparatorio, es hora de empezar a enviar mensajes. Puede usar la biblioteca Aspose.Email para C++ para esto. Considere el ejemplo más sencillo:
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");
Use esta opción si desea enviar un correo electrónico de texto simple.
Enviar correo con adjuntos usando C++
Si necesita enviar un mensaje de correo complejo usando C++, la clase MailMessage será sin duda ú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 excelente herramienta. Permite enviar mensajes almacenados en formatos de archivo EML y MSG (Formato de Mensaje Outlook). También puede usar este formato para enviar archivos adjuntos o incluso objetos iCalendar para organizar o confirmar asistencia. MailMessage le permite afinar su lista de destinatarios, Cc y Bcc. Puede enviar un correo con marcado HTML. También puede marcar el mensaje con varias banderas antes de enviarlo, añadir metadatos, cifrarlo, etc.
¿Por qué la gente elige Aspose.Email para C++ para enviar correo?
Sí, Aspose.Email para C++ no es solo una utilidad para enviar mensajes de correo. Es una solución integral que brinda soporte completo para una variedad de tareas relacionadas con el envío, la recepción, el almacenamiento y el procesamiento de correo. Y puede estar seguro de que al realizar estas tareas, no se topará con las limitaciones de la biblioteca. Hemos estudiado este tema durante muchos años y seguimos ampliando su funcionalidad.
Probablemente se haya topado con pequeñas bibliotecas que aparecieron relativamente hace poco. Resuelven fácil y naturalmente un problema sencillo que muchos usuarios enfrentan. Pero tan pronto como se aleja un poco, se da cuenta de que al seguir usando esta modesta, se ve obligado a rodear constantemente limitaciones, algunos módulos para eludir restricciones de la biblioteca, adaptadores diseñados para hacer compatibles su pequeña biblioteca con otra pequeña biblioteca, etc. Y ahora, su pequeña solución ingeniosa ya no es tan ingeniosa. Además, la envía al servidor, donde regularmente se dispara a sí misma, porque nadie había probado tal zoológico de soluciones improvisadas e integraciones antes que usted. Y por más que lo intente, tarde o temprano seguirá topándose con las limitaciones de esta biblioteca. Y tendrá que buscar algo nuevo. Así que, cuando se trata de trabajar con correo, ¡quizás quiera considerar Aspose.Email para C++!
Le ofrecemos no solo un cliente para trabajar con SMTP. Primero, está lejos de ser el único protocolo para enviar correos con C++. Con nuestro producto, ¡puede enviar correos usando Exchange EWS y Microsoft Graph!
Ya le hemos hablado de las posibilidades de MailMessage en este artículo. Pero esto está lejos de ser la única herramienta para preparar cartas para envío. Usted puede:
- generar cartas a partir de una plantilla usando TemplateEngine;
- desempaquetar contenedores con cartas, gracias al soporte de formatos OST, PST y MBOX;
- descargar cartas del buzón usando soporte de los protocolos IMAP, POP3, Exchange EWS y WebDav, así como Microsoft Graph;
- convertir correos de un formato a otro.
Puede recibir fácilmente una carta usando el protocolo Exchange EWS. Estará en formato MAPI. Pero puede convertirla fácilmente a formato EML, lo que le permitirá enviarla luego mediante el protocolo SMTP. Al mismo tiempo, puede cambiar la lista de destinatarios o el remitente de la carta en cualquier momento.
¿Cómo funciona el envío de un correo usando C++ y SMTP?
Configuración SMTP
En el momento en que crea una instancia de la clase SmtpClient, no ocurre nada especial. Simplemente especifica la cantidad de configuraciones que le permitirán conectar a un servidor SMTP en el futuro para enviar mensajes. Toda la magia ocurre en la primera llamada al send método. ¿Qué está ocurriendo en este momento?
De hecho, todo depende de qué configuraciones haya especificado. Consideremos varias opciones. Supongamos que ha especificado el host del servidor pero no el puerto ni el tipo de cifrado. En este caso, se iniciará el mecanismo de selección automática de configuraciones. Este mecanismo consiste en intentos sucesivos de conectar al servidor SMTP usando puertos estándar y los algoritmos de cifrado correspondientes. Primero, se intenta conectar al servidor a través de un canal cifrado. Pero si falla, el mecanismo intentará establecer una conexión sin cifrar. Si no desea usar la versión no cifrada del protocolo, especifique el SecurityOptions.SSL_AUTO configuración. Esta configuración también le permite seleccionar la configuración del servidor, pero solo verifica canales cifrados.
Si fue posible establecer una conexión con el servidor, se intenta la autorización. Si la autorización falla, el código de error se guarda para el futuro. El buscador intentará conectarse de otras formas. El mensaje se enviará si puede conectarse 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). Así, el usuario podrá entender que ingresó una contraseña incorrecta o cometió otro error. Si ninguna de las opciones de puertos y tipos de cifrado encaja y ni siquiera llegamos al intento de autorización, el usuario recibirá un error que notifica sobre una configuración incorrecta del servidor.
Por cierto, debe señalarse 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 del cliente SMTP
SmtpClient soporta más que solo diferentes métodos de conexión. También soporta diferentes métodos de autorización. Por ejemplo, puede usar el mecanismo OAuth. Para ello, proporcionamos varias herramientas a la vez.
Primero, es TokenProvider. Esta es la clase que contiene todos los datos necesarios para almacenar y refrescar el token OAuth. En este caso, debe realizar la autorización OAuth usted mismo y guardar toda la información necesaria recibida del servidor OAuth. RefreshToken juega un papel clave aquí. Es 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 por un periodo determinado, mientras que RefreshToken es válido mucho más tiempo, o incluso indefinidamente (hasta que el usuario lo revoque). Gracias a RefreshToken, la clase TokenProvider puede siempre refrescar un AccessToken si este 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 a SmtpClient para que lo use según sea necesario.
Debe notarse que el mecanismo OAuth no siempre es necesario. A veces es mucho más fácil iniciar sesión con nombre de usuario y contraseña. Y para ello, no necesita reconfigurar su cuenta de correo, desactivar la autorización de dos factores, etc. Existe una solución más segura: una contraseña separada para la aplicación. Para aprovechar esta función, debería consultar la configuración de su cuenta de correo. Lo más probable es que la contraseña de la aplicación se genere automáticamente al configurarla en su cuenta. No olvide guardarla en algún lugar. También recomendamos limitar los permisos de su aplicación tanto como sea posible durante la configuración. Por supuesto, si un atacante accede a esta contraseña, no podrá apropiarse de su cuenta, pero aún podrá hacer muchas cosas desagradables. Y aquí no puede hacer nada, porque la contraseña es lo único que protege sus datos de intrusos. En general, la herramienta es muy conveniente, pero reduce la seguridad de su cuenta; úsela bajo su propio riesgo.
Envío de correo vía SMTP con C++
Entonces, la conexión al servidor se ha establecido y la autorización fue exitosa. Es hora de enviar cartas. Para el envío, se usa un objeto de la clase MailMessage. Técnicamente, puede pasar todos los datos necesarios al método send. Pero, de hecho, seguirán recopilados en el objeto MailMessage. Luego, gracias a la capacidad de la clase MailMessage de serializar al formato EML, obtenemos el flujo de datos necesario que puede enviarse a nuestro servidor SMTP. Así, damos al servidor la orden de enviar una carta y transferimos todo el contenido de la carta en forma de datos de texto. Si se transmiten datos binarios en la carta, por ejemplo archivos adjuntos, esos datos se codifican en formato Base64, y los metadatos de la carta indican que el destinatario deberá decodificarlos. El servidor SMTP puede verificar la corrección del mensaje recibido (por ejemplo, comprobar el campo FROM con la cuenta del remitente en el servidor), así como suplementar los metadatos del mensaje a su discreción. Luego, el servidor enviará el correo a los destinatarios, cuya lista también obtendrá de los metadatos del correo.