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 минут.

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

Добавить пост в: Delicious Reddit Slashdot Digg Technorati Google
(уже: 1) Комментировать статью

Комментарии

К этой публикации комментариев нет

Форма комментирования для «Есть ли новая почта?»

Обязательное поле. Не больше 30 символов.

Обязательное поле

captcha image Пожалуйста, введите символы, которые вы видите на изображении