Microsoft Outlook 365 y FWH

Microsoft Outlook 365 y FWH

Postby FiveWiDi » Mon May 27, 2024 4:31 pm

Hola a todos,

He hecho una función para enviar mails de manera desatendida 'a través' de Outlook (precisa que Outlook esté levantado).

Lo he probado en Outlook 2010 y funciona bien, pero el cliente tiene Outlook 365 y yo no.

¿Saben Ustedes si cuando lo pruebe en el entorno del cliente, si debería funcionar por compatibilidad con Outlook 2010?

La única manera que tengo de probarlo es ir a casa del cliente pero quisiera ir ya a sabiendas de que no funcionará o que debería funcionar.

¿Ustedes tienen experiencia con Outlook 365?

Muchas gracias.
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1181
Joined: Mon Oct 10, 2005 2:38 pm

Re: Microsoft Outlook 365 y FWH

Postby paquitohm » Mon May 27, 2024 4:48 pm

Hola,

Lo primero sería saber si el cliente tiene instalada la versión de escritorio de M.O. 365 porque si ha decido que lo lleva por web, entonces no va a funcionar
paquitohm
 
Posts: 262
Joined: Fri Jan 14, 2022 8:37 am

Re: Microsoft Outlook 365 y FWH

Postby FiveWiDi » Mon May 27, 2024 5:05 pm

paquitohm wrote:Hola,

Lo primero sería saber si el cliente tiene instalada la versión de escritorio de M.O. 365 porque si ha decido que lo lleva por web, entonces no va a funcionar


Bien empiezo.

Espero que tenga la de escritorio pues CDOSYS no funciona y supuse que sería por tener instalado Outlook (parece ser que CDOSYS y versiones recientes de Outlook no son compatibles).

Poder enviar mails desatendidos en este lugar sin usar libs de terceros me está costando sudor y lágrimas.

Deséame suerte.
Muchas gracias,
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1181
Joined: Mon Oct 10, 2005 2:38 pm

Re: Microsoft Outlook 365 y FWH

Postby paquitohm » Mon May 27, 2024 5:25 pm

Pues como comentamos, es facil y posible de enviar usando alguna herramienta de terceros, powershell, php-mailer o similar.

Yo tuve que hacer algo porque el cliente tenia Microsoft 365 en la nube y queria emails desatendidos. Lo hice con powershell y hasta el dia de hoy que el log de seguimiento no ha fallado ni una sola vez en el seguimiento.

A los clientes se les hinchan las gonadas porque gmail hace con los emails lo que quiere porque cuando envias más de NN te los marca como spam o directamente te bloquea la cuenta si envias muchos y muy parecidos emails. Asi que deciden irse alli donde tienen mas control de la cuenta, como M.O. 365. Realmente no sé si las cuentas de pago de gmail pueden ayudar tambien a sortear estos problemas, pero la gente que conozco usa M.O. 365 supongo porque asi lo tienen todo: escritorio (el que lo use y si quiere usarlo) y web ademas de Office, por supuesto

Facilmente con chatgpt te montas un ejemplo sencillo para enviar desatendido en las herramientas antes mencionadas: Le pasas como parametro de la llamada un json con los datos del email y en el mismo json escribes la respuesta: enviado, si o no y sino el error de envio. En mi caso lo hice con un archivo .ini

Espero que lo tenga en desktop y sino tampoco es mucho
paquitohm
 
Posts: 262
Joined: Fri Jan 14, 2022 8:37 am

Re: Microsoft Outlook 365 y FWH

Postby FiveWiDi » Mon May 27, 2024 7:03 pm

paquitohm wrote:Pues como comentamos, es facil y posible de enviar usando alguna herramienta de terceros, powershell, php-mailer o similar.

Yo tuve que hacer algo porque el cliente tenia Microsoft 365 en la nube y queria emails desatendidos. Lo hice con powershell y hasta el dia de hoy que el log de seguimiento no ha fallado ni una sola vez en el seguimiento.

A los clientes se les hinchan las gonadas porque gmail hace con los emails lo que quiere porque cuando envias más de NN te los marca como spam o directamente te bloquea la cuenta si envias muchos y muy parecidos emails. Asi que deciden irse alli donde tienen mas control de la cuenta, como M.O. 365. Realmente no sé si las cuentas de pago de gmail pueden ayudar tambien a sortear estos problemas, pero la gente que conozco usa M.O. 365 supongo porque asi lo tienen todo: escritorio (el que lo use y si quiere usarlo) y web ademas de Office, por supuesto

Facilmente con chatgpt te montas un ejemplo sencillo para enviar desatendido en las herramientas antes mencionadas: Le pasas como parametro de la llamada un json con los datos del email y en el mismo json escribes la respuesta: enviado, si o no y sino el error de envio. En mi caso lo hice con un archivo .ini

Espero que lo tenga en desktop y sino tampoco es mucho


Muchas gracias Paquitohm, lo tendré en cuenta y si tengo problemas quizás me decante por Powershell, que si no me equivoco lo trae Windows.
En ese punto y si me permites abusar, te pediré ayuda.

Es cierto, yo también estoy hasta arriba de gmail, al final al cliente le he contratado un dominio sólo para mail y para estos envíos, y si le responden en ese mail lo direcciono a su cuenta gmail habitual y el atiende desde ahí.
Si algún día se cansa o se harta de gmail ya tendrá su dominio funcionando y que lo amplíe lo que le haga falta.

Muchas gracias,
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1181
Joined: Mon Oct 10, 2005 2:38 pm

Re: Microsoft Outlook 365 y FWH

Postby paquitohm » Tue May 28, 2024 8:48 am

Nada hombre, lo que haga falta
Estaré encantado de compartir contigo
paquitohm
 
Posts: 262
Joined: Fri Jan 14, 2022 8:37 am

Re: Microsoft Outlook 365 y FWH

Postby Ruth » Tue May 28, 2024 10:34 am

Dear friends,

I also had some issues with the mail-sending, but sending with the microsoft graph api and office365 is working very fine for me.

This is my code...it would be a great honor if some of it could be useful to you.

Kind regards
Ruth


Code: Select all  Expand view

#include "c:\harbour\contrib\hbcurl\hbcurl.ch"
#define HB_CURLOPT_POST                      47
#define HB_CURLOPT_URL                        2
#define HB_CURLOPT_DL_BUFF_SETUP              1008
#define HB_CURLOPT_POSTFIELDS                 15
#define HB_CURLOPT_WRITEFUNCTION              11

FUNCTION Main()
    LOCAL cToken, cResult
 cToken := GetAccessToken()
  IF !EMPTY(cToken)
  cResult := SendEmail(cToken)
    ?"Email Send Result: ", cResult
  ELSE
    ? "Failed to retrieve access token."
  ENDIF
 

   
FUNCTION GetAccessToken()
    LOCAL hCurl := CURL_easy_init()
    LOCAL cPayload := ""
    LOCAL cToken := ""
    LOCAL cTest := ""
    LOCAL nStartPos, nEndPos
    LOCAL aHeaders := {"Content-Type: application/x-www-form-urlencoded"}
    LOCAL cTenantID := hb_GetEnv("TENANT_ID")
    LOCAL cClientId := hb_GetEnv("365client_id")
    LOCAL cClientSecret := hb_GetEnv("365client_secret")
    IF hCurl != NIL
        CURL_easy_setopt(hCurl, HB_CURLOPT_URL, "https://login.microsoftonline.com/"+cTenantID+"/oauth2/v2.0/token")
        CURL_easy_setopt(hCurl, HB_CURLOPT_HTTPHEADER, aHeaders)
        CURL_easy_setopt(hCurl, HB_CURLOPT_POSTFIELDS, "grant_type=client_credentials&client_id="+cClientId+"&client_secret="+cClientSecret+"&scope=https://graph.microsoft.com/.default")
        CURL_easy_setopt(hCurl, HB_CURLOPT_POST, .T.)
        curl_easy_setopt( hCurl, HB_CURLOPT_DL_BUFF_SETUP )
        CURL_easy_setopt(hCurl, HB_CURLOPT_WRITEFUNCTION, @cPayload) // Buffer the response
       
       
        CURL_easy_perform(hCurl)
        cPayload := curl_easy_dl_buff_get(hCurl) // Get the response from the buffer
        nStartPos := AT('"access_token":"',cPayload)+LEN('"access_token":"')
        nEndPos := hb_AT('"', cPayload, nStartPos)
        cToken := SUBSTR(cPayload, nStartPos, nEndPos - nStartPos)
     

        CURL_easy_cleanup(hCurl)

       
    ELSE
        ? "Failed to initialize cURL session."
    ENDIF

    RETURN cToken


    FUNCTION SendEmail(cToken)
        LOCAL hCurl := CURL_easy_init()
        LOCAL cEmailJson
        LOCAL cResponse := ""
        LOCAL aHeaders := {}
        LOCAL cImgBase64 := ""

cImgBase64 := hb_base64Encode(hb_MemoRead("c:\www\htdocs\submarine_yellow\img\latest_news2.jpg"))
? "cImgBase64", cImgBase64
        cEmailJson := '{"message": {"subject": "Test base64", ';
        + '"body": {"contentType": "html", ';
        + '"content": "<h1>test</h1><p>The new cafeteria is open...</p>';
        + '<img src=\"data:image/jpeg;base64,' + cImgBase64 + '\" > ';
        + '"}, ';
        + '"toRecipients": [{"emailAddress": {"address": "testrecip@****.info"}}]}, ';
        + '"saveToSentItems": "true"}'
       
        IF hCurl != NIL

            AADD(aHeaders, "Authorization: Bearer " + cToken)
            AADD(aHeaders, "Content-Type: application/json")


            CURL_easy_setopt(hCurl, HB_CURLOPT_URL, "https://graph.microsoft.com/v1.0/users/test@*****.at/sendMail")
            CURL_easy_setopt(hCurl, HB_CURLOPT_HTTPHEADER, aHeaders)
            CURL_easy_setopt(hCurl, HB_CURLOPT_POSTFIELDS, cEmailJson)
            CURL_easy_setopt(hCurl, HB_CURLOPT_POST, .T.)
            CURL_easy_setopt(hCurl, HB_CURLOPT_WRITEFUNCTION, @cResponse) // Buffer the response
   
            CURL_easy_perform(hCurl)
            cResponse := curl_easy_dl_buff_get(hCurl) // Get the response from the buffer
            CURL_easy_cleanup(hCurl)
            ? "response", cResponse
        ELSE
            cResponse := "Failed to initialize cURL session."
        ENDIF
   
        RETURN cResponse
 
   
   

 
User avatar
Ruth
 
Posts: 169
Joined: Fri Dec 07, 2007 1:26 pm

Re: Microsoft Outlook 365 y FWH

Postby Antonio Linares » Tue May 28, 2024 1:01 pm

Dear Ruth,

many thanks! :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42080
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Microsoft Outlook 365 y FWH

Postby wilsongamboa » Tue May 28, 2024 8:36 pm

Good Afternoon
Nice piece of code
excuseme my ignorance whats meaning
https://graph.microsoft.com/v1.0/users/ ... t/sendMail

thanks in advance
Wilson
Wilson 'W' Gamboa A
Wilson.josenet@gmail.com
User avatar
wilsongamboa
 
Posts: 593
Joined: Wed Oct 19, 2005 6:41 pm
Location: Quito - Ecuador

Re: Microsoft Outlook 365 y FWH

Postby Ruth » Tue May 28, 2024 9:30 pm

Dear Wilson,

I used the information from here...
https://learn.microsoft.com/en-us/graph/api/user-sendmail?view=graph-rest-1.0&tabs=http

As far as I could understand, there are two options for http requests when sending emails via Microsoft Graph API:

POST /me/sendMail: This requires the user to log in manually.
POST /users/{id | userPrincipalName}/sendMail: This is the autonomous option where no manual input of user and password is required. In my case, I used my Microsoft Office 365 email address for {id | userPrincipalName}.

For the curl I had to put it in here

Code: Select all  Expand view
CURL_easy_setopt(hCurl, HB_CURLOPT_URL, "https://graph.microsoft.com/v1.0/users/{id | userPrincipalName}/sendMail")


Thank you very much for your kind attention. I am very happy about it.

Kind regards
Ruth
User avatar
Ruth
 
Posts: 169
Joined: Fri Dec 07, 2007 1:26 pm

Re: Microsoft Outlook 365 y FWH

Postby FiveWiDi » Wed May 29, 2024 8:21 am

Hola a todos,

Paquitohm, he tenido suerte, el cliente tiene instalado Outlook 365; probé mi solución (a fondo aún no) y pude enviar mail.

Ruth muchas gracias por el aporte, lo tendré presente.

De momento tengo resuelto el problema.

Muchas gracias,
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1181
Joined: Mon Oct 10, 2005 2:38 pm

Re: Microsoft Outlook 365 y FWH

Postby paquitohm » Wed May 29, 2024 10:20 am

Genial Carlos !
paquitohm
 
Posts: 262
Joined: Fri Jan 14, 2022 8:37 am


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 46 guests