[..] Problème _INetSmtpMailCom et Gmail

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
scorp84
Niveau 7
Niveau 7
Messages : 397
Enregistré le : mar. 04 nov. 2008 21:51
Localisation : Avignon, France
Status : Hors ligne

[..] Problème _INetSmtpMailCom et Gmail

#1

Message 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
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 982
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

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

#2

Message 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...
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
scorp84
Niveau 7
Niveau 7
Messages : 397
Enregistré le : mar. 04 nov. 2008 21:51
Localisation : Avignon, France
Status : Hors ligne

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

#3

Message par scorp84 »

Bonjour Walkson,

Merci pour votre réponse rapide.

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

Amicalement.

BM
rgx
Niveau 4
Niveau 4
Messages : 57
Enregistré le : sam. 16 nov. 2019 17:53
Status : Hors ligne

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

#4

Message 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:
Avatar du membre
scorp84
Niveau 7
Niveau 7
Messages : 397
Enregistré le : mar. 04 nov. 2008 21:51
Localisation : Avignon, France
Status : Hors ligne

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

#5

Message 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
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 982
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

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

#6

Message 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...
Modifié en dernier par walkson le ven. 17 juin 2022 09:10, modifié 1 fois.
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
scorp84
Niveau 7
Niveau 7
Messages : 397
Enregistré le : mar. 04 nov. 2008 21:51
Localisation : Avignon, France
Status : Hors ligne

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

#7

Message 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
Avatar du membre
Yle
Niveau 5
Niveau 5
Messages : 164
Enregistré le : mar. 21 avr. 2009 17:22
Localisation : La NORMANDIE -76
Status : Hors ligne

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

#8

Message par Yle »

Bonjour

Chez moi, cela fonctionne très bien à condition d'ajouter cette ligne :
#autoit3wrapper_run_au3check=n ; mettre n pour envoyer message
Avatar du membre
scorp84
Niveau 7
Niveau 7
Messages : 397
Enregistré le : mar. 04 nov. 2008 21:51
Localisation : Avignon, France
Status : Hors ligne

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

#9

Message 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
Avatar du membre
mikell
Modérateur
Modérateur
Messages : 6208
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#10

Message 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:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
scorp84
Niveau 7
Niveau 7
Messages : 397
Enregistré le : mar. 04 nov. 2008 21:51
Localisation : Avignon, France
Status : Hors ligne

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

#11

Message 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
touslesmatins
Niveau 6
Niveau 6
Messages : 211
Enregistré le : dim. 15 févr. 2009 01:08
Status : Hors ligne

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

#12

Message 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
Avatar du membre
mikell
Modérateur
Modérateur
Messages : 6208
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#13

Message 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)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
scorp84
Niveau 7
Niveau 7
Messages : 397
Enregistré le : mar. 04 nov. 2008 21:51
Localisation : Avignon, France
Status : Hors ligne

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

#14

Message 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
Avatar du membre
Yle
Niveau 5
Niveau 5
Messages : 164
Enregistré le : mar. 21 avr. 2009 17:22
Localisation : La NORMANDIE -76
Status : Hors ligne

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

#15

Message 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
Répondre