PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Connexion Gmail
Connexion Gmail
Débuté par Robert, 02 fév. 2021 12:04 - 16 réponses
Membre enregistré
16 messages
Popularité : +3 (3 votes)
Posté le 02 février 2021 - 12:04
Bonjour à tous, j'espère que vous êtes tous en bonne santé.

J'espère que vous accepterez ma demande. En effet, enseignant retraité j'aide gratuitement des écoles.
Je suis actuellement confronté à l'envoi des documents par mail.
Je ne connais rien en programmation objet!!!
J'ai regardé WD Mail, mais je suis dépassé et ne suis pas arrivé à me connecté à Gmail!

Les contraintes que j'ai sont:
- utilisation par l'école de Gmail, mais ne veulent pas de programme de mail sur leur machine donc utilise webmail.
- (sur mon pc j'arrive à remplir le programme de mail, avec une chose bizarre, il prend par défaut outlook alors que j'utilise courrier de win10)!

Ma question est:

Est-il possible par exemple de palier à ce problème de connexion
- en plaçant un champ html pour ouvrir la page de connexion de Gmail (où la personne entrerait son mail et mot de passe)
- étant alors connecté de pouvoir envoyer les mails avec les documents attachés automatiquement par programmation.

Dans l'affirmative, pouvez-vous me mettre sur la voie.

Si vous avez d'autres solutions, je suis preneur.
Si vous préférez un contact en privé, je peux vous communiquer mon mail.

Je remercie d'avance, tous ceux qui auront pris un peu de temps pour lire ma demande.
Bonne journée à tous
>Robert
Membre enregistré
70 messages
Popularité : +8 (8 votes)
Posté le 02 février 2021 - 16:18
Bonjour,

Je te cite :
(sur mon pc j'arrive à remplir le programme de mail, avec une chose bizarre, il prend par défaut outlook alors que j'utilise courrier de win10)!
Vérifie l'application par défaut de messagerie définit sous windows pour définir l'application a lancer.

Si j'ai bien compris ta problématique.
Voici un lien pour t'aider à faire la connexion avec gmail :
https://gsuitefr.blogspot.com/2019/09/outlook-et-gmail-pensez-au-mot-de-passe.html
Si tu arrives à remplir ton mail par programmation, il te suffit d'établir la connexion avec gmail.
SMTPUser,sSMTPMDP,sSMTPADR,sSMTPPORTsont des chaînes
SI PASEmailOuvreSessionSMTP(SMTPUser,sSMTPMDP,sSMTPADR,sSMTPPORT,Faux,emailOptionSécuriséTLS+optionSSL)ALORS
Erreur("Erreur lors de l'ouverture de la session SMTP. Contactez votre responsable informatique avec le message suivant.","Paramètre : "+SMTPUser+" / "+sSMTPMDP+" / "+sSMTPADR+" / "+sSMTPPORT,ErreurInfo(errComplet))

RENVOYERFaux
FIN

et de remplacer
EmailLanceAppli()

par
SI PASEmailEnvoieMessage(SMTPUser)ALORS
Erreur("Erreur lors de l'envoi de mail à "+sDestinataire+" par "+sExpediteur,"Contactez votre responsable informatique avec le message suivant.",ErreurInfo(errMessage))
FIN

EmailFermeSession(SMTPUser)
>
Membre enregistré
16 messages
Popularité : +3 (3 votes)
Posté le 02 février 2021 - 22:39
Bonjour,

Merci Laurent d'avoir pris le temps de me répondre.

J'ai testé, rapidement, mais je n'ai pas de connexion au serveur.
J'ai rapidement parcouru le lien fourni, et je vais essayer de configurer mon compte gmail pour avoir un second mot de passe.
Peut être que j'aurai l'accès. Dès que j'ai l'occasion, je teste et t'informe du résultat.
Pour info, ma version de wd (26) refuse l'emploi simultané de emailOptionSécuriséTLS+OptionSSL, pour mon essais j'ai supprimé la seconde (SSL).

Bonne journée
>Robert
Membre enregistré
213 messages
Popularité : +12 (12 votes)
Posté le 03 février 2021 - 03:17
Bonsoir Robert,

Nul besoin de "programmation objet" pour faire ce que vous voulez.
Un code bien structuré suffira amplement.

Je n'ai pas d'expérience Windev avec gMail ouvert en fureteur.
Désolé de ne pouvoir vous aider sur ce point.

Pour expédier des courriels par SMTP il y a des prérequis à respecter.
Ci-après les notes que je me suis laissé concernant gMail.

//--- Doit correspondre à l'adresse du compte SMTP utilisé ("adresse@domaine.xyz")
// Expéditeur
// AdresseExpéditeur
// Nom


//--- gMail (adresse@gmail.com)
//https://support.google.com/a/answer/176600…
//https://support.google.com/accounts/answer/185833
//
// vsSMTPSession..AdresseServeur = "smtp.gmail.com"
// vsSMTPSession..Port = 587 // TLS
// vsSMTPSession..Nom = "adresse@gmail.com"
// vsSMTPSession..MotDePasse = "ApplicationPassword"
// vsSMTPSession..Option = emailOptionSécuriséTLS

Pour info:
vsSMTPSession est un emailSessionSMTP


Dans ces notes, je remarque que gMail exige un "mot de passe d'application".
Ce que semble confirmer le second lien URL.

Une subtilité très importante qui mérite votre attention.
Je vous suggère d'ailleurs la lecture des deux liens proposés.

Le mot de passe d'application est réaliste dans un contexte mono utilisateur.
Il devient, selon moi, complexe dans un contexte multi étudiants.

Je suis conscient de ne pas résoudre votre problème.

Bon dev.

Serge

--
-----
>Parfois, la logique est implacable...
Membre enregistré
16 messages
Popularité : +3 (3 votes)
Posté le 03 février 2021 - 16:24
Bonjour,
@Monsieur Serge

Grand merci pour ce complément d'information, que j'ai lu avec attention.
Je vais lire les liens fournis, et espère trouver mon bonheur à savoir réussir à me connecter.

Je ne comprend pas encore la notion de "mot de passe d'application".
Est-il valable uniquement sur une machine pour l'application.
Est-il valable pour l'application quelle que soit la machine?
Faut-il le générer quand le programme est terminé ?
Faut-il le générer sur le poste ou le programme va tourner?
Que se passe-t-il si on renomme le programme...

Encore bien des questions auxquelles je dois m'attacher.

Merci beaucoup et bonne journée.

>Robert
Membre enregistré
213 messages
Popularité : +12 (12 votes)
Posté le 05 février 2021 - 04:47
Robert,

Déjà, statuons sur le fait que je ne suis pas l'expert en la matière.
J'ai simplement eu à faire l'envoi de courriel gMail via SMTP.

Comme gMail ne pourra reconnaître votre application comme étant "sécuritaire" il vous imposera l'utilisation du mot de passe d'application.
Si vous trouvez comment faire sans le dit mot de passe, je suis preneur.
:p

Je vous suggère de procéder par étape.

1) Utilisez votre compte gMail pour faire vos essais
Confirmez que vous pouvez vous authentifier.

2) Activer l'authentification en deux étapes
https://support.google.com/accounts/answer/185839

3) Créer un mot de passe d'application
https://support.google.com/accounts/answer/185833
Prendre en note du mot de passe d'application!

Une fois ces étapes complétées, il sera temps de tester avec Windev.
Voir les références de code que je proposais précédemment.

À vous de dire quels sont vos progrès.

Bon dev.

Serge

--
-----
>Parfois, la logique est implacable...
Membre enregistré
213 messages
Popularité : +12 (12 votes)
Posté le 05 février 2021 - 05:00
J'oubliais votre question de base...

Je ne comprend pas encore la notion de "mot de passe d'application".
- Est-il valable uniquement sur une machine pour l'application.
- Est-il valable pour l'application quelle que soit la machine?
- Faut-il le générer quand le programme est terminé ?
- Faut-il le générer sur le poste ou le programme va tourner?
- Que se passe-t-il si on renomme le programme...

Aucune de ces réponses.
8)

C'est un mot de passe "spécial" que gMail propose pour une "application tierce" "non sécuritaire".
Votre logiciel Windev dans le cas qui nous occupe.

Il est généré depuis le site de gMail.
https://support.google.com/accounts/answer/185833

Il est "portable" et nous pourrions tous deux l'utiliser dans deux applications distinctes.
C'est donc un mot de passe "secret" que vous ne devez pas divulguer.
Comme tout autre mot de passe d'ailleurs.

Ce mot de passe sera valide tant qu'il ne sera pas révoqué par le propriétaire du compte gMail.
Ou tant que gMail ne suspectera pas son utilisation douteuse.
Ou tant que les règles ne changeront pas.

Microsoft offre une approche similaire pour Office365.

Serge

--
-----
>Parfois, la logique est implacable...
Membre enregistré
3 898 messages
Popularité : +227 (347 votes)
Posté le 05 février 2021 - 06:49
Bonjour,
Monsieur Serge a écrit :
Ou tant que les règles ne changeront pas.

C'est à dire dans un mois ou deux:D.
Le gros problème des API Google (GoogleMap, GMail, etc) c'est qu'elles évoluent très vite. En éxagérant à peine, lorsque l'on développe une application autour de ces API, il faut engager quelqu'un à temps complet pour les maintenir.

--
>Il y a peut être plus simple, mais, ça tourne
Membre enregistré
16 messages
Popularité : +3 (3 votes)
Posté le 06 février 2021 - 01:49
Bonjour,

@Serge, encore merci pour toute cette attention.
Je n'ai pas eu beaucoup de temps pour faire des essais.
J'ai reçu la dernière lst où un exemple est donné dans wd mail.
J'ai galéré dans les pages et onglets du site google qui ne correspondent pas exactement à ceux présentés par pcsoft.
J'ai réussi pour finir a obtenir un identifiant et un code secret qui fonctionnent avec wd mail.
Je n'ai pas encore eu le temps de regarder comment c'est codé dans wd mail.
C'est quand même galère. On ne sait pas toujours que répondre aux options demandées par google, ne sachant pas quelles sont leurs utilités!
Il semble que, si j'ai bien compris, que c'est valable pour des tests, il faut se mettre également dans la liste des 100 personnes autorisées pour réussir à se connecter!
Dès que j'aurais du temps et du courage, je me relancerai pour obtenir de nouveaux codes pour mon application.
La solution "amateur" que j'ai utilisé pour avancer et qui fonctionne:
J'ai créé un compte gmail que j'ai configuré dans Outlook (j'ai du convaincre de l'utiliser!)
Je crée chaque mail que je lance avec EmailLanceAppli
Une fenêtre complétée prête à l'envoi s'affiche (modif ou complément encore possible), il reste à cliquer sur envoyer.
C'est un peu galère, mais comme à chaque envoi le nombre n'est pas trop important...

@Voroltinquo, merci de t'intéresser à mon problème.
Au vu de la galère pour obtenir ces codes, j'aurais tendance à me ranger à ton avis.
Néanmoins, il faudra trouver des solutions, soit chez un autre prestataire, où cela serait plus simple à mettre en oeuvre, soit ...

Encore merci à vous deux et bonne journée.

>Robert
Membre enregistré
3 898 messages
Popularité : +227 (347 votes)
Posté le 06 février 2021 - 07:31
Si c'est pour une utilisation interne, il y a la possibilité de monter un serveur mail avec des outils du genre https://www.hmailserver.com

--
>Il y a peut être plus simple, mais, ça tourne
Membre enregistré
40 messages
Posté le 06 février 2021 - 08:49
Bonjour Robert,
Si vous souhaitez utiliser GMAIL par exemple il y a a solution de vous inscrire sur le site de google développeur et de créer un projet sur lequel vous activez l'API Gmail.

En suite il vous faudra créer une clé. une fois ces éléments vous n'aurez plus qu'a faire le codage suivant:

sur le fenêtre dans "PROCEDURE (ma fenêtre) :
STTokenest une structure
sAccesest une chaîne
sRefreshest une chaîne
dhLimiteValiditeest unDateHeure
Dossierest une chaîne
FIN
STCompteGmailest une structure
AdresseMailest une chaîne
OAuthest un OAuth2Paramètres
Tokenest unSTToken
FIN
CompteGmailest unSTCompteGmail

CompteGmail.AdresseMail=gsMail_Utilisateur

AVECCompteGmail.OAuth
..ClientID="votre client ID donné par google"
..ClientSecret="votre client secret donné par google"
..URLAuth="https://accounts.google.com/o/oauth2/auth"
..URLToken="https://accounts.google.com/o/oauth2/token"
..Scope="https://www.googleapis.com/auth/gmail.send"
FIN

CompteGmail.Token.Dossier="répertoire où sauvegarder la clé api au format json"


puis de créer un bouton avec le code suivant :

sMessageest une chaîne= (ChaîneConstruit(Config_Relance_Clients.Message_Relance,SAI_Num_Facture,SAI_Solde_Facture))

sSujetest une chaîne="sujet du message"
sPieceest une chaîne="chemin de la piece jointe"

// Gestion de l'envoi mail via api gmail
Variantest unVariant
SELONfFichierExiste(CompteGmail.Token.Dossier+"APIGmail.json")
CASFaux:// Si les tokens ne sont pas trouver alors ont les récupère et ont les sauvegarde dans un fichier
// Demande d'authentification : ouvre la fenetre de login
MonTokenest un AuthToken=AuthIdentifie(CompteGmail.OAuth)
SELONMonToken.Valide
CASFaux:Erreur("Impossible de récupérer les Tokens.")
CASVrai:
Variant=JSONVersVariant(MonToken..RéponseServeur)
CompteGmail.Token.sAcces=Variant.access_token
CompteGmail.Token.sRefresh=Variant.refresh_token
CompteGmail.Token.dhLimiteValidite=DateHeureSys()
CompteGmail.Token.dhLimiteValidite..Minute+=55// Acces Token valide 60 minutes mais par sécurité, le rendre valide uniquement 55 minutes.
Variant.DateHeureLimite=CompteGmail.Token.dhLimiteValidite
fSauveTexte(CompteGmail.Token.Dossier+"APIGmail.json",VariantVersJSON(Variant))
FIN
CASVrai:// Si les tokens sont trouver alors ont vérifie la validité de l'Acces Token
Variant=JSONVersVariant(fChargeTexte(CompteGmail.Token.Dossier+"APIGmail.json"))
CompteGmail.Token.sAcces=Variant.access_token
CompteGmail.Token.sRefresh=Variant.refresh_token
CompteGmail.Token.dhLimiteValidite=Variant.DateHeureLimite
SIDateHeureSys() >CompteGmail.Token.dhLimiteValidite// Si la DateHeureSys est supérieure a la date limite de validité de l'Acces Token alors il faut en récupérer un nouveau
REQ_AccesTokenest une httpRequête
REQ_AccesToken.URL=CompteGmail.OAuth..URLToken+ ["?"]
REQ_AccesToken.Contenu=URLEncode(ChaîneVersUTF8(ChaîneConstruit("client_id=%1&client_secret=%2&refresh_token=%3&grant_type=refresh_token",CompteGmail.OAuth.ClientID,CompteGmail.OAuth.ClientSecret,CompteGmail.Token.sRefresh)))
REP_AccesTokenest une httpRéponse=HTTPEnvoie(REQ_AccesToken)
SIErreurDétectée=VraiALORS
Erreur(ErreurInfo(errMessage))
SINON
Variant=JSONVersVariant(REP_AccesToken.Contenu)
Variant.refresh_token=CompteGmail.Token.sRefresh
CompteGmail.Token.sAcces=Variant.access_token
CompteGmail.Token.dhLimiteValidite=DateHeureSys()
CompteGmail.Token.dhLimiteValidite..Minute+=55// Acces Token valide 60 minutes mais par sécurité, le rendre valide uniquement 55 minutes.
fSauveTexte(CompteGmail.Token.Dossier+"APIGmail.json",VariantVersJSON(Variant))
FIN
FIN
FIN
// Envoi du mail

//Initialisation des variables attenant au mail et son contenu
Mail_Adresse_envoieest une chaîne=CompteGmail.AdresseMail
sMail_Destinataireest une chaîne=SAI_Adresse_Mail
Mail_Sujetest une chaîne=sSujet
Mail_Texte_bruteest une chaîne=sMessage
Mail_Htmlest une chaîne=fChargeTexte(SysRep(srBureau) + [fSep] +sMessage)// Envoi d'un corps HTML pour mon test.
Mail_a_une_PJest un booléen=Vrai// Envoi d'une PJ pour mon test

//Initialisation d'un email, si du contenu html est passé plus tôt alors le texte brût sera omis
Mailest un Email
Mail..Destinataire[1]="destinataire"
Mail..Sujet="sujet"
Mail..Message="message"
Mail..HTML="message html (peut être le même)"
// Attachement d'une pièce jointe à un email
SIMail_a_une_PJALORS
Piece_jointeest un emailAttache
Piece_jointe..Nom="chemin pièce"
Piece_jointe..Contenu=fChargeTexte("chemin piece")//SysRep(srBureau) + [fSep] + SAI_Facture
Piece_jointe..ContentType="application/pdf"
Piece_jointe..ContentDescription="Un doc pdf"
Ajoute(Mail..Attache,Piece_jointe)
FIN
//Si Construction du "raw", Alors Construction de la requete et envoi
SIEmailConstruitSource(Mail)ALORS
Rawest un Email
Raw..Message=Mail..Source
//Construction de la requete
Requete_gmailest une httpRequête
Requete_gmail.ContentType="message/rfc822"
Requete_gmail.URL=ChaîneConstruit("https://www.googleapis.com/upload/gmail/v1/users/%1/messages/send?uploadType=media",Mail_Adresse_envoie)
Requete_gmail.Méthode=httpPost
Requete_gmail.Contenu=Raw..Message
Requete_gmail..Entête["Authorization"]=ChaîneConstruit("Bearer %1",CompteGmail.Token.sAcces)

//Envoi de la requete
Réponse_Requeteest un httpRéponse=HTTPEnvoie(Requete_gmail)
//Gestion du cas d'erreur et Stockage de l'ID de l'envoi de mail
SIErreurDétectée=VraiALORS
Erreur("ErreurInfo(errMessage) : "+RC+ErreurInfo(errMessage))
SINON
Info("Relance envoyée avec succès.")
FIN
FIN



>En espérant vous avoir aidé
Membre enregistré
16 messages
Popularité : +3 (3 votes)
Posté le 06 février 2021 - 14:00
Bonjour à tous,

@Voroltinquo
Merci pour le lien concernant l'installation d'un serveur de mail propre.
Je suppose que pour pouvoir l'utiliser, l'établissement doit acheter un nom de domaine?
Mais c'est en effet une solution alternative à étudier.

@Paul SOULAT
Un grand merci à vous pour ce partage inespéré de code.
Je ne crois pas que je serais arrivé à le "pondre"!
Un excellente motivation pour me replonger dans le site de Google.
Je ne peux que réitérer mes remerciements.

Bon week-end à tous.
>Robert
Membre enregistré
3 898 messages
Popularité : +227 (347 votes)
Posté le 06 février 2021 - 14:41
Robert a écrit :
Merci pour le lien concernant l'installation d'un serveur de mail propre.
Je suppose que pour pouvoir l'utiliser, l'établissement doit acheter un nom de domaine?

Si c'est pour une utilisation à l'intérieur de l'établissement non. Si le serveur est destiné à communiquer vers l'extérieur oui.

--
>Il y a peut être plus simple, mais, ça tourne
Membre enregistré
16 messages
Popularité : +3 (3 votes)
Posté le 07 février 2021 - 15:07
Bonjour à tous,
@Voroltinquo
Merci, en effet il y a communication avec l'extérieur.

@Paul SOULAT
Je suis retourné sur le site de google et réussit à obtenir un identifiant et un mot de passe pour mon prog.
Dans un premier temps, ma connexion a été refusée.
Je suis retourné sur le site et curieusement je me suis mis dans les 100 personnes autorisées à tester (malgré que je suis reconnu comme propriétaire!).
Une page web me demande ensuite de m'autoriser à me connecter. Ce que je me suis accordé:)

Ton code m'a alors permis l'envoi d'un mail avec un pdf attaché sans problème. Encore un grand merci.

Peut -être pourrais-tu (ou quelqu'un d'autre) répondre à une ou deux questions...
Faut-il demander la validation du programme sur le site?
Dois-je mettre l'adresse gmail de l'établissement dans la liste des 100 personnes autorisées "à tester" ,sur le site de google pour avoir la connexion (oui je pense si le programme est en test!, comme actuellement).
La période de test est-elle limitée dans le temps?
Cette solution peut-elle être définitive étant donné qu'il me semble avoir lu que pour l'envoi de mail, pour un appli perso... la demande de validation du programme par google n'est pas nécessaire.

Quelle est la bonne suite à donner, pour que la personne qui utilisera l'appli ne soit pas embêtée par des problèmes de connexion.
Si quelqu'un peut me faire profiter de son expérience et m'éclairer sur ces points, je suis preneur.

Bon dimanche et bonne semaine à tous.
>Robert
Membre enregistré
40 messages
Posté le 07 février 2021 - 22:23
Bonsoir,
La demande de connexion ce fait une seule fois

>il faut effectivement indiquer les personnes qui peuvent utiliser la connexion (100) à moins que google vérifie l'appli là tout le monde pourras ce connecter
Membre enregistré
14 messages
Popularité : -1 (1 vote)
Posté le 29 avril 2022 - 20:27
Un grand merci à vous Paul SOULAT. Votre méthode de requête marche très bien.

--
Windev 22 Windev mobile 22
>Windows 7 64 bits
Message modifié, 29 avril 2022 - 20:29
Posté le 07 mars 2023 - 06:29
Bonjour,

//Construction de la requete
Requete_gmail est une httpRequête
Requete_gmail.ContentType = "message/rfc822"
Requete_gmail.URL = ChaîneConstruit("https://www.googleapis.com/upload/gmail/v1/users/%1/messages/send…)
Requete_gmail.Méthode = httpPost
Requete_gmail.Contenu = Mail..Message
Requete_gmail..Entête["Authorization"] = ChaîneConstruit("Bearer %1",CompteGmail.Token.sAcces)

//Envoi de la requete
Réponse_Requete est un httpRéponse = HTTPEnvoie(Requete_gmail)

info(Réponse_Requete..Code_Etat)

Sur mon info, j'ai une erreur 503 : d'où peut venir le problème?

>Cordialement