mailcheck.vbs v1.2

Проверка почты в Gmail из командной строки

До недавнего времени я успешно мониторил почтовый ящик с помощью gkrellm for windows, который в отличие от многих других программ проверки почты корректно работал с IMAP-ящиком Google Apps.

Но вот беда, gkrellm окончательно достал меня своими постоянными утечками памяти, приводившими к ежедневным многократным вылетам программы. В итоге я заменил его свежей версией winbar‘а. Но оставаться без монитора почты я не мог…

После перебора всевозможных программ проверки почты и отметания их одной за одной из-за того, что практически ни одна из этих программ не умела общаться с IMAP-сервером по SSL-протоколу, а те что умели, почему-то не могли пройти авторизацию на гугле. В общем начал я тогда гуглить проверку почты из командной строки и наконец наткнулся на хабре на весьма интересное решение, основанное на выгребании rss-ленты ящика по https с последующим разбором полученных данных.

В качестве реализации была выбрана связка из командной строки, curl.exe, grep.exe и VScript. Пришлось основательно попотеть над VB-скриптом, но результат того стоит. В общем конечный скрипт см. в продолжении статьи.

Собственно, сам скрипт mailcheck.vbs:

'VBScript for checking new messages in gmail inbox
'Author:  Acid Jack
'Version: 1.2
'Date:    20.05.2010 18:22

strCurr = "c:\Temp\m.cur"
strOld = "c:\Temp\m.old"
strCurl = "curl --silent -k -u USERNAME:PASSWORD "
strURL = "https://mail.google.com/mail/feed/atom"
strEntry = "| grep -c " & chr(34) & "" & chr(34)
strRun = "cmd.exe /c" & strCurl & strURL & strEntry & ">" & strCurr
strSoundFile = "C:\WINDOWS\Media\notify.wav"
strSound = "RunDll32.exe Amovie.ocx,RunDll /play /close " & strSoundFile

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run strRun, 0, True

Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(strCurr) Then
 Set objCurr = objFSO.GetFile(strCurr)
 If objCurr.Size > 0 Then
  Set objReadCurr = objFSO.OpenTextFile(strCurr, 1)
  strCountCurr = objReadCurr.ReadAll
  objReadCurr.Close
 End If

 Set objFSO = CreateObject("Scripting.FileSystemObject")
 If objFSO.FileExists(strOld) Then
  Set objReadOld = objFSO.OpenTextFile(strOld, 1)
  strCountOld = objReadOld.ReadAll
  objReadOld.Close
  If (strCountCurr > 0 AND strCountCurr > strCountOld) Then
   Set objShell = CreateObject("Wscript.Shell")
   objShell.Run strSound, 0, False
  End If
 Else
  If strCountCurr > 0 Then
   Set objShell = CreateObject("Wscript.Shell")
   objShell.Run strSound, 0, False
  End If
 End If

 Set objWriteOld = objFSO.OpenTextFile(strOld, 2, True)
 objWriteOld.Write (strCountCurr)
 objWriteOld.Close
End If

USERNAME и PASSWORD здесь надо, естественно, заменить своими данными.

Всё, что мне требовалось — это просто звуковое уведомление о получении нового письма, потому что за работой я совсем не обращаю внимание на всякие вертящиеся значки и т.п.,  а реагирую только на звук.

В общем запихиваем этот скрипт в планировщик заданий и вуаля!

UPD: пару дней назад я  немного обновил скрипт, чтобы звуковое уведомление выводилось через ActiveX-компонент. При этом не перехватывается фокус приложений, но выплывает другая  проблема — при просмотре видео в BSPlayer’е этот компонент вываливается с ошибкой. Как обойти эту проблему, пока не знаю.

Оставить комментарий