About Blog Tags

Есть ли новая почта?

Mac OS X + growl + pop3 | imap | gmail уведомление о новой почте

как это выглядит

Для тех, у кого есть несколько почтовых ящиков (pop3, imap, gmail) и кто смотрит или получает почту через web, я написал простенькую прогу на python.

Все это работает на Mac OS X, но немного изменив можно приспособить и для Linux и для Widows

Для уведомления пользователя используем growlnotify из growl

Сама программа (growlnotify = “/usr/local/bin/growlnotify” нужно изменить на реальное размещение growlnotify):

#!/usr/bin/env python
# -*- coding: utf-8 -*-

config = [["pop3", "server1", "username1", "password1"],
          ["imap_ssl", "server2", "username2", "password2"],
          ]
growlnotify = "/usr/local/bin/growlnotify"

def growlNotify(mailCount, mailBox):
    message = growlnotify + " -m \"You have a " + str(mailCount) + " new mail\" -a Mail \"" + mailBox +"\""
    try:
        import os
        os.system(message)
    except:
        print "error: notify"

def main():
    for mailBox in config:
        if mailBox[0] == "pop3":
            import poplib
            try:
                pop = poplib.POP3(mailBox[1])
                try:
                    pop.apop(mailBox[2], mailBox[3])
                    stat = pop.stat()
                    if stat[0] != 0:
                        growlNotify(stat[0], mailBox[1])
                except:
                    print "error: server", mailBox[1], "authorization"
                pop.quit()
            except:
                print "error: server", mailBox[1], "not response"
        elif mailBox[0] == "imap_ssl":
            import imaplib
            try:
                imap = imaplib.IMAP4_SSL(mailBox[1])
                try:
                    imap.login(mailBox[2], mailBox[3])
                    stat = imap.select()
                    if stat[1][0] != '0':
                        growlNotify(stat[1][0], mailBox[1])
                    imap.close()
                except:
                    print "error: server", mailBox[1], "authorization"
                imap.logout()
            except:
                print "error: server", mailBox[1], "not response"

if __name__ == "__main__":
    main()

При запуске руками программа проверяет наличие новой почты в указанных ящиках и выдает уведомление на экран с помощью growlnotify.

На Mac OS X сделал периодический запуск с помощью launchd. Вот пример описания задачи для launchctl, который нужно положить в ~/Library/LaunchAgents. Имя файла ua.dp.vovaz04h.pyNewMailCheck.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>ua.dp.vovaz04h.pyNewMailCheck</string>
    <key>ProgramArguments</key>
    <array>
        <string>python</string>
        <string>/Volumes/MacRaid/Dropbox/pyNewMailCheck/pyNewMailCheck.py</string>
    </array>
    <key>StartInterval</key>
    <integer>600</integer>
    <key>LimitLoadToSessionType</key>
    <string>Aqua</string>
    <key>LowPriorityIO</key>
    <true/>
    <key>Nice</key>
    <integer>10</integer>
</dict>
</plist>

/Volumes/MacRaid/Dropbox/pyNewMailCheck/pyNewMailCheck.py замените на путь и название для основной программы. Интервал запуска 600 секунд или 10 минут.

На идеал я не претендую, но возможно кому-то понадобится. Пишите замечания.

Add post to: Delicious Reddit Slashdot Digg Technorati Google
(already: 1) Comment post

Comments

No comments for this post

Comment form for «Есть ли новая почта?»

Required. 30 chars of fewer.

Required.

captcha image Please, enter symbols, which you see on the image