Envío Correo SMTP con MailKit y PowerBuilder


Hasta  hace unas semanas, para el envío de correos electrónicos en mis aplicaciones PowerBuilder vengo utilizando el ejemplo PBNISMTP  de la página de TopwizSoware, originalmente escrito por Bruce Armstrong y mejorado por Roland Smith. 

Últimamente he detectado que este ejemplo fallaba y que en los correos tenían caracteres cambiados a "?" y que si en el nombre del remitente o del destinatario habían acentos, el correo me lo rechazaban...

Por lo visto, este ejemplo escrito originalmente en C++ se basa en dos librerias Open Sorce que Roland no ha actualizado desde el 16 de Noviembre de 2020. 

En el momento que escribo, CPJNSMTPConnection ya va por la versión 3.44 y en este ejemplo se usa la 3.41 y  SSLWrappers va por su versión 1.21 cuando aquí se usa la 1.19.

Para solucionarlo, añadí en el ejemplo de Roland su objeto n_cryptoapi y modifiqué su objeto u_tabp_smtp para codificar en base 64 los nombres de en los recipientes To, CC, BC.

Investigando un poco, pensé que debería haber algun metodo en CSharp para envíar correos electrónicos... 

La solución para mi ha sido usar MailKit, que es una librería .NET Open Source, que soporta IMAP, POP3, SMTP y muchos otros protocolos. Su interfaz es similar a SMTPClient de Microsoft, que al parecer, ya no se recomienda su uso, ya que no soporta muchos de los protocolos modernos...

Para hacer compatible al máximo el uso de MailKit con el Ejemplo anterior he creado una librería .NET a la que he llamado MailKitNetSmtp.dll con los mismos nombres de función que se usan en la librería pbnismtp.pbx del ejemplo anterior.



    A diferencia de ejemplo PBNISMTP , al importar la librería con la opción .NET DLL Importer, se ha añadido el prefijo of_ (object function) delante de todos los métodos. Y al igual que en el ejemplo, el objeto n_pbnismtp es un objeto heredado de la libreria importada para añadir funciones PowerBuilder como la de validación de correos electrónicos.

En este ejemplo, se ha quedado por indagar un poco mas en el Connection Type, Auth Method y Character Set que los he dejado con valores fijos. 

En fin, no me enrollo más, si alguien lo desarrolla un poco y lo mejora, por favor que me lo haga saber...

06-12-2022: Proyecto descrito en artículo archivado. Nueva versión en repositorio con librería en .Net6 y PowerBuilder 2022 build 1892.

Os dejo el enlace de proyecto actual en GitHub:

github.com/rasanfe/pbMailKit

Y proyecto en Visual Studio 2022:

github.com/rasanfe/MailKitNetSmtp

Para los que necesiten versiones anteriores como la descrita en este artículo:

Proyecto PowerBuilder 11.5 Build 2506

Proyecto PowerBuilder 12.6 build 3506

Proyecto Visual Studio 2022 NetCore 3.1 COM/ActiveX

Proyecto PowerBuilder 2019 build 2779

Proyecto PowerBuilder 2021 build 1509

Proyecto Visual Studio 2022 NetCore 3.1




Comentarios

Publicar un comentario