Page 1 sur 1

[..] Problème _INetSmtpMailCom et Gmail

Posté : mar. 14 juin 2022 11:17
par scorp84
Bonjour à tous,

Je rencontre depuis quelques semaines un problème avec la fonction Func _INetSmtpMailCom et Gmail.

Mes envois fonctionnaient très bien et sans que je modifie quoi que ce soit, ils ne fonctionnent plus.

Suis-je le seul ? Avez-vous une fonction d'envoi de mail qui fonctionne avec Gmail ?

Merci d'avance pour votre aide.

Amicalement.

BM

Code : Tout sélectionner

Func _INetSmtpMailCom($mail_A, $mail_objet = "", $mail_texte = "", $mail_pj = "", $mail_CC = "", $mail_CCI = "")


	$s_SmtpServer = "smtp.gmail.com" ; Serveur SMTP
	$s_FromName = "xxx" ; Nom expéditeur
	$s_FromAddress = "xxx@gmail.com" ; Mail expéditeur
	;$mail_pj = "" ; Pièce jointe (à laisser vide si pas de PJ)
	$mail_CC = "" ; Mail de copie (à laisser vide si non nécessaire)
	$mail_CCI = "" ; Mail de copie invisible (à laisser vide si non nécessaire)
	$s_Username = "xxxx@gmail.com" ; Login compte mail
	$s_Password="xxxx"
	$s_IPPort = 465 ; Port SMTP : 465 pour SSL / 25 pour non SSL
	$s_ssl = 1 ; Mettre 1 si envoi en SSL, sinon 0


	$objEmail = ObjCreate("CDO.Message")
	$objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
	$objEmail.To = $mail_A
	Local $i_Error = 0
	Local $i_Error_desciption = ""
	If $mail_CC <> "" Then $objEmail.Cc = $mail_CC
	If $mail_CCI <> "" Then $objEmail.Bcc = $mail_CCI
	$objEmail.Subject = $mail_objet
	If StringInStr($mail_texte,"<") and StringInStr($mail_texte,">") Then
		$objEmail.HTMLBody = $mail_texte
	Else
		$objEmail.Textbody = $mail_texte & @CRLF
	EndIf
	If $mail_pj <> "" Then
		Local $S_Files2Attach = StringSplit($mail_pj, ";")
		For $x = 1 To $S_Files2Attach[0]
			$S_Files2Attach[$x] = _PathFull ($S_Files2Attach[$x])
			If FileExists($S_Files2Attach[$x]) Then
				$objEmail.AddAttachment ($S_Files2Attach[$x])
			Else
				$i_Error_desciption = $i_Error_desciption & @lf & 'File not found to attach: ' & $S_Files2Attach[$x]
				SetError(1)
				return 0
			EndIf
		Next
	EndIf
	$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
	$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
	$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $s_IPPort
;Authenticated SMTP
	If $s_Username <> "" Then
		$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
		$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
		$s_Password=_StringEncrypt(0,$s_Password,"xxxx",2)
		$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
	EndIf
	If $s_ssl Then
		$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
	EndIf
;Update settings
	$objEmail.Configuration.Fields.Update
; Sent the Message
	$objEmail.Send
	if @error then
		SetError(2)
		return $oMyRet[1]
	EndIf
EndFunc ;==>_INetSmtpMailCom

Re: [..] Problème _INetSmtpMailCom et Gmail

Posté : mar. 14 juin 2022 11:57
par walkson
Bonjour,
J'utilise Thunderbird pour envoyer et recevoir mes mails et en effet depuis quelques jours il m'est impossible de me connecter à Gmail. J'ai été sur leur site et répondu à de multiples questions (N° téléphone etc...) sans résoudre le problème. J'envisage tout simplement de supprimer Gmail que j'utilise peu. Je précise que j'ai autorisé le service POP pour utiliser un programme comme Thunderbird...

Re: [..] Problème _INetSmtpMailCom et Gmail

Posté : mar. 14 juin 2022 13:50
par scorp84
Bonjour Walkson,

Merci pour votre réponse rapide.

Quelqu'un aurait-il trouvé une solution pour contourner le problème ?

Amicalement.

BM

Re: [..] Problème _INetSmtpMailCom et Gmail

Posté : mar. 14 juin 2022 16:45
par rgx
Le système d'authentification de gmail consiste en quelques sortes à prendre une empreinte des programmes clients.
Concrètement il va générer un mot de passe pour chaque client mail.
Lors de la configuration d'un compte dans Thunderbird, cela se fait automatiquement.
Pour reconfigurer un ancien compte:
Paramètres des comptes > Paramètre du serveur > Paramètre de sécurité
- Sécurité de connexion: SSL/TLS
- Méthode d'authentification: OAuth2
À la première connexion, une boîte de dialogue Gmail s'ouvre (il faut entrer son mdp) et demande si on autorise ce client mail.
Répondre oui.
Le client mail va ainsi être configuré avec un mot de passé unique qui permet de l'associer (c'est comme un certificat).
Il faut donc faire la même manip sur tous les PC sur lequel on veut se connecter.
Pour la plupart des programmes client mail, cela se fait tout seul.
Pour d'autres il faut copier/coller la phrase générée par Gmail dans le champs mot de passé du client mail.
Voilà, c'est tout pour le client mail (POP ou IMAP) pour le SMTP en ligne de commande, je n'ai pas testé (je me sert d'un autre fournisseur pour les envois)
Donc, IMHO un nouveau programme d'envoi de mail va demander à chaque fois une nouvelle "signature" donc une demande de connexion au compte à chaque fois.
:wink:

Re: [..] Problème _INetSmtpMailCom et Gmail

Posté : mer. 15 juin 2022 18:07
par scorp84
Bonjour Rgx,

Merci pour votre réponse.

J'ai bien compris la méthode pour authentifier avec Thunderbird mais comment faire pour un programme avec AutoIt ?

Merci d'avance pour votre aide.

Amicalement.

BM

Re: [..] Problème _INetSmtpMailCom et Gmail

Posté : mer. 15 juin 2022 18:08
par walkson
Bonjour,
Merci à rgx, ma boite gmail refonctionne en suivant vos conseils (google envoie un sms avec code de 6 chiffres à rentrer)

Pour _INetSmtpMailCom() l’authentification OAuth2 n'est pas possible à ma connaissance. Il y a l'api Gmail mais je ne connais pas d'UDF à jour pour son emploi. Le plus simple à mon avis est d'utiliser un SMPT autre que Gmail...

Re: [..] Problème _INetSmtpMailCom et Gmail

Posté : ven. 17 juin 2022 17:01
par scorp84
Bonjour,

Il semblerait que Google bloque depuis le 30 mai 2022 les applications sans authentification forte :
Les applications moins sécurisées et votre compte Google

Si Quelqu'un sait comment s'authentifier avec Autoit poru al validation, je suis preneur.

Amicalement.

BM

Re: [..] Problème _INetSmtpMailCom et Gmail

Posté : mar. 21 juin 2022 19:23
par Yle
Bonjour

Chez moi, cela fonctionne très bien à condition d'ajouter cette ligne :
#autoit3wrapper_run_au3check=n ; mettre n pour envoyer message

Re: [..] Problème _INetSmtpMailCom et Gmail

Posté : mar. 21 juin 2022 20:46
par scorp84
Bonjour Ile,

Merci pour votre retour.

J'ai essayé d'insérer votre ligne, mais cela ne fonctionne pas :-(

Voici mon code :

Code : Tout sélectionner

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Compile_Both=y
#autoit3wrapper_run_au3check=n ; mettre n pour envoyer message
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <file.au3>
#Include <String.au3>


$mail_objet = "AUTOIT - EXECUTION SCRIPT : " & @ScriptName
$mail_texte=@CRLF & "<FONT face=""Verdana"" color=""#000000"" size=2>"
$mail_texte=$mail_texte & "xxx"
$mail_texte=$mail_texte & "</font>"

$mail_pj=""
$mail_A="xxx"
$mail_CC=""
$mail_CCI=""

$rc = _INetSmtpMailCom($mail_A, $mail_objet, $mail_texte, $mail_pj, $mail_CC, $mail_CCI)


; ENVOI RAPPORT EXECUTION PAR MAIL
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Global $oMyRet[2]
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")

Func _INetSmtpMailCom($mail_A, $mail_objet = "", $mail_texte = "", $mail_pj = "", $mail_CC = "", $mail_CCI = "")

;LSgKEmBl47
	$s_SmtpServer = "smtp.gmail.com" ; Serveur SMTP
	$s_FromName = "EXPEDITEUR" ; Nom expéditeur
	$s_FromAddress = "xxx@gmail.com" ; Mail expéditeur
	;$mail_pj = "" ; Pièce jointe (à laisser vide si pas de PJ)
	$mail_CC = "" ; Mail de copie (à laisser vide si non nécessaire)
	$mail_CCI = "" ; Mail de copie invisible (à laisser vide si non nécessaire)
	$s_Username = "xxx@gmail.com" ; Login compte mail
	$s_Password="xxx"
	$s_IPPort = 465 ; Port SMTP : 465 pour SSL / 25 pour non SSL
	$s_ssl = 1 ; Mettre 1 si envoi en SSL, sinon 0

	$objEmail = ObjCreate("CDO.Message")
	$objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
	$objEmail.To = $mail_A
	Local $i_Error = 0
	Local $i_Error_desciption = ""
	If $mail_CC <> "" Then $objEmail.Cc = $mail_CC
	If $mail_CCI <> "" Then $objEmail.Bcc = $mail_CCI
	$objEmail.Subject = $mail_objet
	If StringInStr($mail_texte,"<") and StringInStr($mail_texte,">") Then
		$objEmail.HTMLBody = $mail_texte
	Else
		$objEmail.Textbody = $mail_texte & @CRLF
	EndIf
	If $mail_pj <> "" Then
		Local $S_Files2Attach = StringSplit($mail_pj, ";")
		For $x = 1 To $S_Files2Attach[0]
			$S_Files2Attach[$x] = _PathFull ($S_Files2Attach[$x])
			If FileExists($S_Files2Attach[$x]) Then
				$objEmail.AddAttachment ($S_Files2Attach[$x])
			Else
				$i_Error_desciption = $i_Error_desciption & @lf & 'File not found to attach: ' & $S_Files2Attach[$x]
				SetError(1)
				return 0
			EndIf
		Next
	EndIf
	$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
	$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
	$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $s_IPPort
;Authenticated SMTP
	If $s_Username <> "" Then
		$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
		$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
		$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
	EndIf
	If $s_ssl Then
		$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = true ; Ligne OK pour outlook 365
	EndIf
;Update settings
	$objEmail.Configuration.Fields.Update
; Sent the Message
	$objEmail.Send
	if @error then
		SetError(2)
		return $oMyRet[1]
	EndIf
EndFunc ;==>_INetSmtpMailCom
;
;
; Com Error Handler
Func MyErrFunc()
	$HexNumber = Hex($oMyError.number, 8)
	$oMyRet[0] = $HexNumber
	$oMyRet[1] = StringStripWS($oMyError.description,3)
	ConsoleWrite("### COM Error !  Number: " & $HexNumber & "   ScriptLine: " & $oMyError.scriptline & "   Description:" & $oMyRet[1] & @LF)
	SetError(1); something to check for when this function returns
	Return
EndFunc ;==>MyErrFunc
Pourriez-vous m'envoyer le votre ou me corriger le mien ?

Merci +++

Amicalement.

BM

Re: [..] Problème _INetSmtpMailCom et Gmail

Posté : mer. 22 juin 2022 21:41
par mikell
Franchement, c'est normal...
Je ne vois vraiment pas en quoi le fait d'empêcher la vérification d'éventuelles erreurs de script (ce qui est l'unique but de au3check) pourrait soudainement adoucir les récentes velléités ultra-sécuritaires de notre ami Guugle :roll:

Re: [..] Problème _INetSmtpMailCom et Gmail

Posté : jeu. 23 juin 2022 08:57
par scorp84
Bonjour,

Effectivement je trouvais ça aussi bizarre mais @Yle, pourriez-vous m'envoyer la fonction que vous utilisez que je la compare à la mienne pour voir s'il n'y a pas un paramètre (je pensais dans les $objEmail.Configuration.Fields.Item) qui n'est pas configuré pareil ?

Sinon, y-a-t-il un moyen de générer l'empreinte du programme Autoit et de la valider auprès de Gmail ?

Merci d'avance à tous pour votre aide.

Amicalement.

BM

Re: [..] Problème _INetSmtpMailCom et Gmail

Posté : sam. 02 juil. 2022 17:01
par touslesmatins
Google a changé les règles ! J'ai cherché des jours et des jours...... Voilà la réponse :
Il faut maintenant créer un mot de passe application pour autoriser des applications tierces à accéder à votre compte gmail. Et Autoit est, pour Google une application tierce.
Ensuite bien indiquer dans le script le nouveau mot de passe. et cela remarchera.

Lien https://support.google.com/accounts/answer/185833?hl=fr

Re: [..] Problème _INetSmtpMailCom et Gmail

Posté : dim. 03 juil. 2022 14:03
par mikell
"cela remarchera" ?
Merci de bien vouloir nous montrer un exemple de script :mrgreen:

"Chaque mot de passe d'application ne peut être utilisé qu'une seule fois" (Gogle)

Re: [..] Problème _INetSmtpMailCom et Gmail

Posté : dim. 03 juil. 2022 16:17
par scorp84
Bonjour Mikell,

Ce qui est bizarre, c'est que j'ai des programmes qui m'envoient un rapport avec un compte Gmail et qui datent d'avant la coupure et qui fonctionnent encore alors que je n'ai fait aucune authentification :-(

C'est à rien n'y comprendre :-(

Amicalement.

BM

Re: [..] Problème _INetSmtpMailCom et Gmail

Posté : mar. 05 juil. 2022 15:17
par Yle
Désolé de répondre si tard mais j'étais en vacances...

Je confirme que cela fonctionne avec ce code !
   $SmtpServer = "smtp.gmail.com"               ; address for the smtp-server to use - REQUIRED
   $FromName = "ChallengExtar"                  ; name from who the email was sent
   $FromAddress = "MONCOMPTEGMAIL@gmail.ccom"                  ; address from where the mail should come
   $ToAddress = "envoia@orange.fr"        ; destination address of the email - REQUIRED
   $Subject = "ChallengExtar -- "               ; subject from the email - can be anything you want it to be
   $Body = "No reply"                        ; the messagebody from the mail - can be left blank but then you get a blank mail
   $AttachFiles = "c:\Temp\" & $NomFich
   ; the file(s) you want to attach seperated with a ; (Semicolon) - leave blank if not needed
   $CcAddress = ""                           ; address for cc - leave blank if not needed
   $BccAddress = ""                       ; address for bcc - leave blank if not needed
   $Importance = "Normal"                    ; Send message priority: "High", "Normal", "Low"
   $Username = "MONCOMPTEGMAIL"                    ; username for the account used from where the mail gets sent - REQUIRED
   $Password = "lxxgljwlqsslnkxo"                     ; MOT de PASSE APPLICATION
   $IPPort = 465                          ; GMAIL port used for sending the mail   465  597 ??
   $ssl = 1                            ; GMAILenables/disables secure socket layer sending - put to 1 if using httpS

   $rc = _INetSmtpMailCom($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
   Sleep(1000)
J'ai remplacé mon adresse mail d'envoi et de réception sur un compte orange

ensuite l faut que sous Google la validation en 2 étapes soit activé.
Pour cette ligne : $Password = "lxxgljwlqsslnkxo" le mot de passe qui figure est le mot de passe application qu'il faut que tu crées en allant sur ton compte Google puis sécurité puis Mot de passe des applications puis Sélectionner une application choisir Autre. J'ai entré INETSMTP et j'ai obtenu le mot de passe "lxxgljwlqsslnkxo" que tu mets dans ta ligne $Password...

Bonne réception
I