Page 1 sur 2
[..] Notificateur de message Gmail ,Hotmail,Free ...
Posté : dim. 22 févr. 2009 20:21
par pierrotm777
Bonjour,
J'ai cherché un partout cet aprés midi un peu de code pour réaliser un notificateur de mail,
qui m'indique dans la barre de tache ou dans une varaible l'arrivée d'un nouveau message et les nombre
de message non lus .
Gmail me serait le plus important mais si on peut aller plus loin , je suis intérréssé .
Merci de votre aide .
Re: [..] Notificateur de message Gmail
Posté : ven. 27 févr. 2009 18:38
par pierrotm777
Bonjour à tous,
Aprés quelque recherches , j'ai trouvé sur le site
http://www.autoitscript.com des udf et des exemples :
http://www.autoitscript.com/forum/index ... opic=21889
Le problème c'est qu'il faut un logiciel tiers OpenSSl
http://www.slproweb.com/download/Win32O ... 0_9_8i.exe .
Les prés requis : OpenSSL_Light installé et l'UDF POP_ssl_V3.2.au3
Je viens de tester l'exemple suisvant , POP_ssl_V3.2_Example.au3 , mais ce que je voudrais c'est obtenir juste le nombre de mails non lus (reçus) .
Je n'arrive pas à récupérer dans l'UDF ce dont j'ai besoin :
Je joint l'UDF POP_ssl_V3.2.au3:
► Afficher le texte
Code : Tout sélectionner
#include <Constants.au3>
#include <Array.au3>
#include <Process.au3>
Global $_POP_RunPID = 0
Global $_POP_Log = @CRLF
Global $_POP_Debug = False
Global $_POP_Counter = 0
Global $SleepTime = 50
Global $FixGUIBug = False
;Main Functions (public)
Func _POP_Connect($POP_Server, $POP_Port, $SSL_Exe_loc, $Debug)
$_POP_Debug = $Debug
;Connect To Server Using OpenSSL
$_POP_RunPID = Run(@ComSpec & " /c " & $SSL_Exe_loc & " s_client -crlf -ign_eof -connect " & $POP_Server & ":" & $POP_Port, "", @SW_HIDE, $STDOUT_CHILD + $STDIN_CHILD + $STDERR_CHILD + $STDERR_MERGED)
;Hide Command Prompt
WinWait(@SystemDir & "\cmd.exe")
WinMove(@SystemDir & "\cmd.exe", "", @DesktopWidth, @DesktopHeight)
WinSetState(@SystemDir & "\cmd.exe", "", @SW_HIDE)
;Read Buffer & Check buffer for reply code
$Buffer = _OpenSSL_ReadBuffer_Until("+OK ", 50)
$_POP_Log &= $Buffer
If @error Then
SetError(1) ;Connection Failed
Return False
EndIf
Return _OpenSSL_IsRunning()
EndFunc ;==>_POP_Connect
Func _POP_Login($Username, $Password)
;flush buffer
Sleep(250)
_OpenSSL_ReadBuffer()
;Send Username
$temp = _POP_Send_User($Username)
If $temp == False Then
$temp = _POP_Send_User($Username)
If $temp == False Then
Return $temp
EndIf
EndIf
;Send Password
$temp = _POP_Send_Pass($Password)
If $temp == False Then
Return $temp
EndIf
Return _OpenSSL_IsRunning()
EndFunc ;==>_POP_Login
Func _POP_Send_User($Username)
;Send Username
$User = "USER " & $Username & @CRLF
_OpenSSL_WriteBuffer($User)
$_POP_Log &= $User
;Get Responce
$Buffer = _OpenSSL_ReadBuffer_Lock(50)
$_POP_Log &= $Buffer
If _OpenSSL_ChkForCode($Buffer, "+OK ") == 0 Then
SetError(3) ;Wrong Username
_OpenSSL_DebugToConsole(@CRLF & @CRLF & "Wrong Username" & @CRLF)
Return False
EndIf
EndFunc ;==>_POP_Send_User
Func _POP_Send_Pass($Password)
;Send Password
$Pass = "PASS " & $Password & @CRLF
_OpenSSL_WriteBuffer($Pass)
$_POP_Log &= $Pass
;Get Responce
$Buffer = _OpenSSL_ReadBuffer_Lock()
$_POP_Log &= $Buffer
If _OpenSSL_ChkForCode($Buffer, "+OK ") == 0 Then
SetError(4) ;Sent in a bad username/password
_OpenSSL_DebugToConsole(@CRLF & @CRLF & "Sent in a bad username/password" & @CRLF)
Return False
EndIf
EndFunc ;==>_POP_Send_Pass
Func _POP_GetStats()
;Send Stat
_OpenSSL_WriteBuffer("STAT" & @CRLF)
$_POP_Log &= "STAT" & @CRLF
;Get Responce
$Buffer = _OpenSSL_ReadBuffer_Lock()
$_POP_Log &= $Buffer
If _OpenSSL_ChkForCode($Buffer, "+OK ") == 0 Then
SetError(5) ;Stats Not Available
_OpenSSL_DebugToConsole(@CRLF & @CRLF & "Stats Not Available" & @CRLF)
Return False
EndIf
$Buffer = StringReplace($Buffer, "+OK ", "")
_OpenSSL_IsRunning()
Return $Buffer
EndFunc ;==>_POP_GetStats
Func _POP_GetList()
;Request List
_OpenSSL_WriteBuffer("LIST" & @CRLF)
$_POP_Log &= "LIST" & @CRLF
;Get Responce
$Buffer = _OpenSSL_ReadBuffer_Until(@CRLF & ".")
$_POP_Log &= $Buffer
If _OpenSSL_ChkForCode($Buffer, @CRLF & ".") == 0 Then
SetError(6) ;Couldn't Get List
_OpenSSL_DebugToConsole(@CRLF & @CRLF & "Couldn't Get List" & @CRLF)
Return False
EndIf
$Buffer = StringAddCR($Buffer)
$Buffer = StringStripWS($Buffer, 4)
$Buffer = StringSplit($Buffer, @CRLF)
_ArrayDelete($Buffer, 0)
_ArrayDelete($Buffer, 0)
_ArrayPop($Buffer)
_ArrayPop($Buffer)
_OpenSSL_IsRunning()
Return $Buffer
EndFunc ;==>_POP_GetList
Func _POP_GetMessage($id_num)
;Request List
$Get = "RETR " & $id_num & @CRLF
_OpenSSL_WriteBuffer($Get)
$_POP_Log &= $Get
;Get Responce
$Buffer = _OpenSSL_ReadBuffer_Until(@CRLF & ".")
$_POP_Log &= $Buffer
If _OpenSSL_ChkForCode($Buffer, @CRLF & ".") == 0 Then
SetError(7) ;Couldn't Get List
_OpenSSL_DebugToConsole(@CRLF & @CRLF & "Couldn't Get List" & @CRLF)
Return False
EndIf
_OpenSSL_IsRunning()
Return $Buffer
EndFunc ;==>_POP_GetMessage
Func _POP_Disconnect()
_OpenSSL_WriteBuffer("QUIT" & @CRLF)
Sleep($SleepTime)
_OpenSSL_Kill()
Return True
EndFunc ;==>_POP_Disconnect
;Support Functions (private)
Func _OpenSSL_ReadBuffer()
$Buffer = ""
$MoreToRead = 1
While $MoreToRead > 0
$_POP_Counter += 1
Sleep($SleepTime)
$temp = StdoutRead($_POP_RunPID)
$Buffer &= $temp
;_OpenSSL_DebugToConsole("Read #" & $_POP_Counter & ": "& $temp & @CRLF )
$MoreToRead = @extended
WEnd
Return $Buffer
EndFunc ;==>_OpenSSL_ReadBuffer
Func _OpenSSL_ReadBuffer_Lock($num = 250)
$Buffer = ""
$len = StringLen($Buffer)
For $x = 0 To $num Step +1
$Buffer = _OpenSSL_ReadBuffer()
If StringLen($Buffer) > 0 Then
ExitLoop
EndIf
Next
_OpenSSL_DebugToConsole("Read : " & $Buffer & @CRLF)
_OpenSSL_DebugToConsole("ReadBuffer_Lock ran " & $x & " times" & @CRLF)
Return $Buffer
EndFunc ;==>_OpenSSL_ReadBuffer_Lock
Func _OpenSSL_ReadBuffer_Until($code, $num = 500)
$Buffer = ""
;Wait up to 25 seconds
For $x = 0 To $num Step +1
$Buffer &= _OpenSSL_ReadBuffer()
$chk = _OpenSSL_ChkForCode($Buffer, $code)
If $chk > 0 Then
_OpenSSL_DebugToConsole("Found " & $code & " at " & $chk & ": " & $Buffer & @CRLF)
ExitLoop
EndIf
Sleep($SleepTime)
Next
_OpenSSL_DebugToConsole("ReadBuffer_Until ran " & $x & " times" & @CRLF)
If $chk <= 0 Then SetError(1)
Return $Buffer
EndFunc ;==>_OpenSSL_ReadBuffer_Until
Func _OpenSSL_ChkForCode($Buffer, $code)
Return StringInStr($Buffer, $code)
EndFunc ;==>_OpenSSL_ChkForCode
Func _OpenSSL_WriteBuffer_GUI($Msg)
WinSetState(@SystemDir & "\cmd.exe", "", @SW_SHOW)
BlockInput(1)
WinActivate(@SystemDir & "\cmd.exe")
WinWaitActive(@SystemDir & "\cmd.exe")
Send($Msg & "{ENTER}")
BlockInput(0)
WinSetState(@SystemDir & "\cmd.exe", "", @SW_HIDE)
_OpenSSL_DebugToConsole("Write-GUI: " & $Msg & @CRLF)
Sleep($SleepTime)
EndFunc ;==>_OpenSSL_WriteBuffer_GUI
Func _OpenSSL_WriteBuffer($Msg)
If $FixGUIBug Then
StdinWrite($_POP_RunPID, $Msg)
_OpenSSL_DebugToConsole("Write: " & $Msg & @CRLF)
Sleep($SleepTime)
Else
_OpenSSL_WriteBuffer_GUI($Msg)
$FixGUIBug = True
EndIf
EndFunc ;==>_OpenSSL_WriteBuffer
Func _OpenSSL_Kill()
StdioClose($_POP_RunPID)
Sleep(1000)
If ProcessExists("openssl.exe") Then
$s = MsgBox(4, "Kill Child Processes?", "Do you want to kill the command prompt and openssl?")
If $s = 6 Then
ProcessClose("cmd.exe")
ProcessExists("openssl.exe")
While ProcessExists("openssl.exe")
ProcessClose("cmd.exe")
ProcessClose("openssl.exe")
WEnd
EndIf
EndIf
EndFunc ;==>_OpenSSL_Kill
Func _OpenSSL_DebugToConsole($string)
If $_POP_Debug Then
ConsoleWrite(StringStripWS($string, 4))
EndIf
EndFunc ;==>_OpenSSL_DebugToConsole
Func _OpenSSL_IsRunning()
_ProcessGetName($_POP_RunPID)
If @error Then
If ProcessExists("openssl.exe") Then
$_POP_RunPID = ProcessExists("openssl.exe")
Return True
Else
_OpenSSL_DebugToConsole("OpenSSL Closed Unexpectedly" & @CRLF)
$_POP_Log &= "OpenSSL Closed Unexpectedly" & @CRLF
_OpenSSL_Kill()
Return False
EndIf
Else
Return True
EndIf
EndFunc ;==>_OpenSSL_IsRunning
et l'exemple POP_ssl_V3.2_Example.au3
► Afficher le texte
Code : Tout sélectionner
#include <Array.au3>
#include "POP_ssl_V3.2.au3"
Opt("OnExitFunc", "endscript")
Opt("SendKeyDelay", 0)
Opt("TrayIconDebug", 1)
;kill previous run
While ProcessExists("openssl.exe")
ProcessClose("cmd.exe")
ProcessClose("openssl.exe")
WEnd
;###FILL IN THIS INFO###
$User = InputBox("Gmail", "Enter Username", "")
$Pass = InputBox("Gmail", "Enter Password", "", "*")
;set server info
$SSL_Exe_loc = "C:\OpenSSL\bin\openssl.exe"
$POP_Server = "pop.gmail.com"
$POP_Port = "995"
$error = ""
$msg = _POP_Connect($POP_Server, $POP_Port, $SSL_Exe_loc, True)
;MsgBox(0, $msg & " - " & @error, $_POP_Log)
$error &= $msg & " - " & @error & @CRLF
If $msg == False Then EndReport($error)
$msg = _POP_Login($User, $Pass)
;MsgBox(0, $msg & " - " & @error, $_POP_Log)
$error &= $msg & " - " & @error & @CRLF
If $msg == False Then EndReport($error)
$msg = _POP_GetStats()
MsgBox(0, "", $msg)
$error &= $msg & " - " & @error & @CRLF
If $msg == False Then EndReport($error)
$msg = _POP_GetList()
_ArrayDisplay($msg)
$error &= $msg & " - " & @error & @CRLF
$msg = _POP_GetMessage(1)
_ArrayDisplay($msg)
$error &= $msg & " - " & @error & @CRLF
$msg = _POP_Disconnect()
$error &= $msg & " - " & @error & @CRLF
EndReport($error)
Func EndReport($error)
MsgBox(0, "", $error)
Exit
EndFunc ;==>EndReport
Merci de votre aide .
Re: [..] Notificateur de message Gmail ,Hotmail,Free ...
Posté : lun. 16 mars 2009 07:47
par Tlem
Voici un UDF avec des fonctions pop3, peut être cela est-il intéressante.
_pop3 UDF, according to the 1939 RFC, Most of the pop3 functions
Re: [..] Notificateur de message Gmail ,Hotmail,Free ...
Posté : ven. 20 mars 2009 09:46
par pierrotm777
Merci beaucoup,
je test ça dés que possible
Re: [..] Notificateur de message Gmail ,Hotmail,Free ...
Posté : lun. 23 mars 2009 16:17
par Max5
Voici un script que je vient de bricoler et qui devrait répondre a certains besoins.
Via les fonctions _IE, il se connecte sur votre boite Gmail et annonce dans un MsgBox soit les message non lus dans la boite de réception soit qu'il n'y a rien de nouveaux.
Après on peut l'adapter selon les besoins comme masquer le gui, rajouter un intervalle de temps pour rafraichir la page et voir si il y a des nouveaux mail ou encore rajouter un principe d'infobulle qui préviendrait...
Voici le code :
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
Opt("GUIOnEventMode", 1)
$gui = GUICreate("Gmail Notification", 793, 574, 193, 115)
GUISetOnEvent($GUI_EVENT_CLOSE, "gui_fermer")
$oIE = ObjCreate("Shell.Explorer.2")
$oIE_ctrl = GUICtrlCreateObj($oIE, 8, 8, 778, 556)
GUISetState(@SW_SHOW)
_IENavigate($oIE, "http://gmail.com", 0)
Do
Sleep(100)
Until $oIE.Busy = False
If Not StringInStr(_IEDocReadHTML($oIE), "gaia_loginform") = 0 Then
$Form = _IEGetObjById($oIE, "gaia_loginform")
$Input_Email = _IEFormElementGetObjByName($Form, "Email")
_IEFormElementSetValue($Input_Email, "VotreAdresse@gmail.com")
$Input_Password = _IEFormElementGetObjByName($Form, "Passwd")
_IEFormElementSetValue($Input_Password, "VotreMotDePasse")
_IEFormSubmit($Form)
Sleep(250)
Do
Sleep(100)
Until $oIE.Busy = False
Sleep(1000)
Do
Sleep(100)
Until $oIE.Busy = False
$html_src = _IEDocReadHTML($oIE)
$nmail_regex = StringRegExp($html_src, '>Gmail - (.*?)<', 3)
If Not @error Then
MsgBox(64, "Nouveaux Emails !", $nmail_regex[0])
Else
MsgBox(0, "no news", "pas de nouveaux emails")
EndIf
Else
MsgBox(16, "erreur", "deja logguer")
EndIf
While 1
Sleep(100)
WEnd
Func gui_fermer()
Exit
EndFunc
Re: [..] Notificateur de message Gmail ,Hotmail,Free ...
Posté : mar. 24 mars 2009 18:12
par pierrotm777
Merci je vais tester.
Désolé , je n'ai pas internet en ce moment , et ai donc du mal
à vous répondre .
Merci pour votre aide et à bientôt
Re: [..] Notificateur de message Gmail ,Hotmail,Free ...
Posté : sam. 25 avr. 2009 14:36
par pierrotm777
Bonjour,
Merci à tous pour votre aide.
Désolé pour cet absence de réponse due à une non disponibilité de connexion net.
Ce que je souhaite en fait c'est avoir un programme dans la barre de tache (Tray) que cherche toute les n minutes
si un nouveau message existe sur ma boite gmail.
Si oui alors lancer une application quelconque !
Re: [..] Notificateur de message Gmail ,Hotmail,Free ...
Posté : lun. 27 avr. 2009 16:12
par BeCool
Bonjour pierrotm777,
Je cherche justement, si il existe déjà, le même programme que vous pour une boite Gmail et Hotmail.
Je vous tiens au courant si je trouve quelque chose, et si je ne trouve rien, je vais ESSAYE d'en faire un.
Dans tout les cas je vous tiens au courant.
Re: [..] Notificateur de message Gmail ,Hotmail,Free ...
Posté : lun. 27 avr. 2009 16:32
par pierrotm777
Bonjour BeCool,
Merci par avance.
Re: [..] Notificateur de message Gmail ,Hotmail,Free ...
Posté : lun. 27 avr. 2009 17:12
par BeCool
J'ai peut être trouvé quelque chose d'intéressant ici :
http://www.autoitscript.com/forum/index ... opic=21889
A voir ce qu'on peut en tirer. Perso je n'ai pas trop le temps là.
Re: [..] Notificateur de message Gmail ,Hotmail,Free ...
Posté : lun. 27 avr. 2009 17:42
par pierrotm777
J'ai déjà éssayé mais il faut installer des compléments compatible ssl ?
Je voudrais plus simple
Re: [..] Notificateur de message Gmail ,Hotmail,Free ...
Posté : mar. 28 avr. 2009 08:47
par BeCool
Autant pour moi, j'ai pas spécialement bien regarder le code.
Re: [..] Notificateur de message Gmail ,Hotmail,Free ...
Posté : jeu. 30 avr. 2009 09:54
par pierrotm777
Bonjour,
Je viens de trouver ce code sur ce forum ,
http://www.autoitscript.fr/forum/viewto ... ail#p11955,qui permet d'envoyer un fichier joint , au travers de Gmail, l'inverse de ce que je cherche.
► Afficher le texte
Code : Tout sélectionner
#include <File.au3>
#include <Inet.au3>
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
Global $oMyRet[2]
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
_INetSmtpMailCom()
Exit
Func _INetSmtpMailCom()
;ici je test si le pc a acces a internet
$ipwan=""
$ipwan=_GetIP()
if $ipwan="" then Return
$s_Subject = "sujet de l'email"
$s_CcAddress = ""
$s_SmtpServer="smtp.gmail.com"
$s_FromName="de qui"
$s_FromAddress="monadresse@gmail.com"
$s_ToAddress="destinataire@orange.fr"
$s_Username="nom du compte gmail"
$s_Password="mot de passe compte gmail"
$as_Body = "corps du message"
$s_AttachFiles = "";"" ; the file you want to attach- leave blank if not needed
$s_BccAddress = "" ; address for bcc - leave blank if not needed
$IPPort=465
if $IPPort=465 then $ssl=1
;~ MsgBox(0,"ssl",$ssl)
$objEmail = ObjCreate("CDO.Message")
$objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
$objEmail.To = $s_ToAddress
Local $i_Error = 0
Local $i_Error_desciption = ""
If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
$objEmail.Subject = $s_Subject
If StringInStr($as_Body,"<") and StringInStr($as_Body,">") Then
$objEmail.HTMLBody = $as_Body
Else
$objEmail.Textbody = $as_Body & @CRLF
EndIf
If $s_AttachFiles <> "" Then
Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
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") = $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 $Ssl Then
;~ MsgBox(0,"ssl ok",$ssl)
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = 1
EndIf
;Update settings
$objEmail.Configuration.Fields.Update
; Sent the Message
$objEmail.Send
if @error then
SetError(2)
return $oMyRet[1]
EndIf
EndFunc ;==>_INetSmtpMailCom*$
Func MyErrFunc()
$HexNumber = Hex($oMyError.number, 8)
$oMyRet[0] = $HexNumber
$oMyRet[1] = StringStripWS($oMyError.description,3)
;~ MsgBox (0,"### erreur d'envoie de la notificaton "," ! Numéro: " & $HexNumber & " ligne du script: " & $oMyError.scriptline & " Description:" & $oMyRet[1] & @LF,20)
SetError(1); something to check for when this function returns
Return
EndFunc ;==>MyErrFunc
Est-il donc possible de le transformer fin de lui ajouter la possiblité de détecter si un message est bien arrivé , si oui ,afficher le nombre de
mails à lire. Le programme pourrait-il être permanent dans la barre "tray" de droite et configurable en adresse et mon de pass caché dans dans un fichier de config "gmail.ini" par exemple"
Merci d'avance
Re: [..] Notificateur de message Gmail ,Hotmail,Free ...
Posté : jeu. 30 avr. 2009 10:10
par pierrotm777
Jai aussi retrouvé ce script mais spécifique à ZIMBRA , parit-il adaptable à Gmail !
http://www.autoitscript.fr/forum/viewto ... ray#p11043 .
Je n'ai pas réussi à l'adapter .
Que dois-je modifier SVP .
Re: [..] Notificateur de message Gmail ,Hotmail,Free ...
Posté : dim. 03 mai 2009 17:26
par orax
J'ai déjà éssayé mais il faut installer des compléments compatible ssl ?
Je voudrais plus simple
C'est dommage, l'UDF pop_ssl me parait, à première vue, une solution à votre problème.
Quant au script spécifique à ZIMBRA, je l'ai regardé en vitesse, j'ai l'impression qu'il n'utilise pas SSL pour se connecter et si j'ai bien compris, il y a besoin de SSL pour se recevoir les messages via pop/imap sur gmail
Autre solution, probablement moins bonne qu'en POP... :
Si c'est juste pour voir le nombre de messages, il suffirait de vous connecter à gmail (en envoyant nom d'utilisateur/mdp via le formulaire), d'aller sur
http://mail.google.com/mail/#inbox et de rechercher dans le code source de la page ["ti","Boîte de réception",2,0,2,"in:inbox",[] ; là par exemple, j'ai 2 messages. Alors bien sûr, ça peut se faire de manière totalement transparente mais c'est peut-être un peu lourd. En tout cas, j'avais déjà fait ceci avec WGET pour me connecter à un site et télécharger une page nécessitant d'être authentifié. Mais il y a peut-être possibilité de faire ça sans programme externe.
Encore une solution :
En tapant "gmail vbs" dans un moteur de recherche, je suis tombé sur cette page
http://www.example-code.com/vbscript/pop3.asp ; ça pourrait s'adapter à Autoit, le seul problème c'est qu'il faut télécharger l'ActiveX (Chilkat) donc ça fait encore un truc externe à Autoit.
Re: [..] Notificateur de message Gmail ,Hotmail,Free ...
Posté : lun. 04 mai 2009 16:45
par BeCool
J'ai éventuellement trouvé ceci pour hotmail :
Code : Tout sélectionner
#include <IE.au3>
Opt("WinTitleMatchMode", 2)
$oIE = _IECreate ("http://login.live.com/login.srf?wa=wsignin1.0&rpsnv=10&ct=1227208038&rver=5.5.4177.0&wp=MBI&wreply=http:%2F%2Fmail.live.com%2Fdefault.aspx%3Fn%3D1521319951&id=64855")
_IELoadWait ($oIE)
$o_form = _IEFormGetObjByName ($oIE, "f1")
$o_login = _IEFormElementGetObjByName ($o_form, "login")
$o_password = _IEFormElementGetObjByName ($o_form, "passwd")
$o_signin = _IEFormElementGetObjByName ($o_form, "SI")
$username = "[color=#FF0000][b]Adresse_de_messagerie@hotmail.fr[/b][/color]"
$password = "[color=#FF0000][b]Mot De Passe[/b][/color]"
_IEFormElementCheckBoxSelect ( $o_form, "remMe", "", 0)
_IEFormElementSetValue ($o_login, $username)
_IEFormElementSetValue ($o_password, $password)
_IEAction ($o_signin, "click")
Il me suffit juste de savoir comment faire pour ne pas afficher la fenêtre de connexion IE, et comment afficher une msgbox indiquant le nombre de mail non lu.
Re: [..] Notificateur de message Gmail ,Hotmail,Free ...
Posté : lun. 04 mai 2009 18:48
par pierrotm777
C'est une idée.
Re: [..] Notificateur de message Gmail ,Hotmail,Free ...
Posté : lun. 04 mai 2009 21:23
par timmalos
Pour laisser IE en arrière plan, Va dans l'aide c'est tres facile:
$oIE = _IECreate ("
http://login.live.com/login.srf?wa=wsig ... =64855",[i]
Quelque part par là faut mettre un 0[/i])
Re: [..] Notificateur de message Gmail ,Hotmail,Free ...
Posté : lun. 04 mai 2009 23:06
par orax
J'avais parlé de WGET pour envoyer les requêtes et gérer les cookies mais en fait ça peu aussi se faire sans, avec WinINet (voir l'UDF WinINet.au3). J'ai un peu testé et voilà ce que ça pourrait donner (et bien sûr vous devez être déjà connecté avec IE, je n'ai pas codé l'authentification) :
► Afficher le texte
Code : Tout sélectionner
#include <WinINet.au3>
_WinINet_Startup()
$hInternetOpen = _WinINet_InternetOpen()
If @error Then MsgBox(0, "", @ScriptLineNumber)
;~ ; page connexion
;~ $hRequest=_WinINet_InternetOpenUrl($hInternetOpen, _
;~ "https://login.live.com")
;~ If @error Then MsgBox(0,"",@ScriptLineNumber)
; page messages
$hRequest = _WinINet_InternetOpenUrl($hInternetOpen, _
"http://by117w.bay117.mail.live.com/mail/TodayLight.aspx?layout=TodayDefault&n=1111111111")
If @error Then MsgBox(0, "", @ScriptLineNumber)
; récupère données
Local $r = Binary("")
Do
$r &= _WinINet_InternetReadFile($hRequest, 256)
Until @error Or Not @extended
$r=BinaryToString($r)
$expReg = StringRegExp($r, _
'<div\s+class="PageNavigationMsgRange">\s*(\d+)\s+messages\s*</div>', _
3)
If Not UBound($expReg) Then
ClipPut($r)
MsgBox(0, "Erreur", "Probablement non connecté")
Else
MsgBox(0, "hotmail", "Vous avez " & $expReg[0] & " message(s) !")
EndIf
; - - - -
; page messages
$hRequest = _WinINet_InternetOpenUrl($hInternetOpen, _
"http://mail.google.com/mail/h/pcfe3rahlyw4/?")
If @error Then MsgBox(0, "", @ScriptLineNumber)
; récupère données
Local $r = Binary("")
Do
$r &= _WinINet_InternetReadFile($hRequest, 256)
Until @error Or Not @extended
$r=BinaryToString($r,4)
$expReg = StringRegExp($r, _
'<a\s+href="\?"\s+accesskey="i">\s*Boîte\s+de\s+réception \((\d+)\)\s*</a>', _
3)
If Not UBound($expReg) Then
ClipPut($r)
MsgBox(0, "Erreur", "Probablement non connecté")
Else
MsgBox(0, "gmail", "Vous avez " & $expReg[0] & " message(s) !")
EndIf
_WinINet_InternetCloseHandle($hInternetOpen)
_WinINet_InternetCloseHandle($hRequest)
_WinINet_Shutdown()
Ceci fonctionne chez moi pour récupérer les messages de hotmail et gmail, mais ne fonctionnera peut-être pas chez vous. Le problème et que les URL pour afficher la page des messages semblent dynamiques. Pour gmail par exemple, j'ai mis "
http://mail.google.com/mail/h/pcfe3rahlyw4/?" mais "pcfe3rahlyw4" semble être généré dynamiquement. Pour faire ça proprement, il faudrait donc, auparavant, récupérer l'URL de la page "
http://mail.google.com/mail/h/XXXXXXX/?". Bref, ça n'a rien de sorcier.
Avec IE par contre (comme l'a montré BeCool), il n'y a bien évidemment pas ce "problème" à gérer. Le seul problème est que ça charge la fenêtre d'IE complète (à moins de la mettre d'utiliser _IECreateEmbedded.
Et ensuite pour récupérer les messages dans le code source : StringRegEx ou peut-être _IEPropertyGet($oObjet, "innerhtml").
Mais la méthode la plus simple me semble quand même être celle avec openSSL en passant par le serveur POP ; surtout que j'ai vu qu'il est dispo gratuitement avec hotmail maintenant. D'ailleurs, la version compilée (
http://www.slproweb.com/products/Win32OpenSSL.html) ne semble pas bien grosse.
Concernant les messages sur free : s'il y a un serveur pop ou imap sans SSL, c'est simple, vous n'avez qu'à utiliser pour voir le nombre de messages dessus.
Re: [..] Notificateur de message Gmail ,Hotmail,Free ...
Posté : mar. 05 mai 2009 09:09
par BeCool
Orax, votre script ne marche pas chez moi, même en mettant mes propres URLs.
Et il est un peu complexe pour moi donc je n'arrive pas a trouver ce qui ne va pas chez moi.
Effectivement Timmalos, je pense jamais a aller voir dans l'aide de AutoIt... J'ai trouvé :
Code : Tout sélectionner
_IECreate ( [$s_Url = "about:blank" [, $f_tryAttach = 0 [, [color=#FF0000]$f_visible = 1[/color] [, $f_wait = 1 [,$f_takeFocus = 1]]]]] )
(Il faut remplacer ce qu'il y a en rouge par "0" pour avoir une fenêtre invisible
