Para acceder a los datos de Microsoft 365 como correos electrónicos, Microsoft está dejando atrás la autenticación básica para IMAP y POP3 y está promoviendo cada vez más la API Graph.
4D v19 R3 trajo el componente 4D Netkit para gestionar la conexión OAuth 2.0 y el envío de correos a través de la API Graph.
En la v19 R8, agregamos nuevos comandos para recibir correos y listar las carpetas de su buzón.
Conexión a la cuenta
Antes de crear el correo, crearemos el objeto de conexión OAuth2 y el objeto Office 365.
var $oAuth2: cs.NetKit.OAuth2Provider
var $office365 : cs.NetKit.Office365
$oAuth2:=cs.NetKit.OAuth2Provider.new($param)
$office365:=cs.NetKit.Office365.new($oAuth2;\
New object("mailType"; "Microsoft"))
Carpetas de correo
Puede obtener la colección de carpetas de correo directamente bajo la carpeta raíz utilizando la función .getFolderList():
$folderList:=$office365.mail.getFolderList()
// Collection with all the mail folder directly under the root folder
$folders:=$folderList.folders
Obtendrá una colección que contiene, para cada carpeta, información útil como el nombre de la carpeta, id, número de emails, etc.:
Si tiene algunas carpetas con carpetas hijas, debe llamar a la función .getFolderList() utilizando el id de la carpeta como parámetro para tener los detalles de las carpetas:
$childrenList:=$office365.mail.getFolderList($folders[8].id)
Descargar emails
Puede recuperar los correos de su buzón utilizando la función .getMails(). Por ejemplo, si desea recuperar todos los correos presentes en la carpeta Bandeja de entrada:
$param:=New object
$param.folderId:=$folder[1].id // inbox folder
$mails:=$office365.mail.getMails($param)
Cuando la carpeta seleccionada es una carpeta creada por defecto para los usuarios, en lugar de utilizar el valor de id de la carpeta correspondiente, por comodidad, puede utilizar los nombres de carpeta conocidos (archive, drafts, inbox, junkemail, sentitems, etc…). Así que puede escribir el ejemplo siguiente:
$param:=New object
$param.folderId:="inbox"
$mails:=$office365.mail.getMails($param)
Si sólo necesita descargar un email específico, puedes utilizar la función .getMail() y pasarle el id del email:
$mail:=$office.mail.getMail($mailId)
De un vistazo a esta funcionalidad con el IDH de arriba y la documentación para más detalles.