… всё просто и понятно

Проверка почты в режиме реального времени

Нетрудно догадаться, что постоянно держать открытым почтовый клиент впадлу, и поэтому я запилил на своём сервере электропочты мощную штуковину: теперь procmail не только кладёт письмо в почтовый ящик user@domain.tld, но и отсылает уведомление об этом в одноимённый джаббер.
Реализуется всё довольно просто — отправкой копии письма на stdin скрипта-информатора. Вот это добавляется в центровой procmailrc:

:0c
| /usr/local/sbin/newmail_notify

Cам скрипт /usr/local/sbin/newmail_notify выглядит примерно так:

#!/bin/sh
while read line
do
message[$n]=$(echo ${line})
let n=$n+1
done < "${1:-/proc/${$}/fd/0}"
sender="`for ((l=0; l<${#message[@]}; l++)); do echo ${message[$l]}; done|grep -m 1 "From: "|cut -d ' ' -f2-`"
return_patch="`for ((l=0; l<${#message[@]}; l++)); do echo ${message[$l]}; done|grep -m 1 "Return-Path: "|cut -d ' ' -f2-`"
recepient="`for ((l=0; l<${#message[@]}; l++)); do echo ${message[$l]}; done|grep -m 1 "Delivered-To: "|cut -d ' ' -f2-`"
encoded_subject="`for ((l=0; l<${#message[@]}; l++)); do echo ${message[$l]}; done|grep -m 1 "Subject: "|cut -d ' ' -f2-`"
charset="`echo "${encoded_subject}"|cut -d ? -f2`"
decoded_subject="`echo "${encoded_subject}"|cut -d ? -f4|/usr/bin/base64 --decode|/usr/bin/iconv -f ${charset} -t UTF-8`"
/usr/local/sbin/jabbersend "${recepient}" "You have received new message from ${sender}, return patch is ${return_patch} — Subject: ${decoded_subject}"

Очевидно, упущен ещё один момент — непосредственно скрипт для отправки сообщений в джаббер, который в данном случае упоминается как /usr/local/sbin/jabbersend. Вот он:

#!/usr/bin/env python
import xmpp,sys
xmpp_jid = 'notifier@domain.tld'
xmpp_pwd = 'notifier_password'
to = sys.argv[1]
msg = sys.argv[2]
jid = xmpp.protocol.JID(xmpp_jid)
client = xmpp.Client(jid.getDomain(),debug=[])
client.connect()
client.auth(jid.getNode(),str(xmpp_pwd),resource='xmpppy')
client.send(xmpp.protocol.Message(to,msg))
client.disconnect()

Для работы последнего скрипта потребуется пакет с питоньими либами, который в центоси называется python-xmpp, а в рачлинуксе — xmpppy.
Я не стал упоминать всякие мелочи типа настройки selinux‘а, потому что об этом можно прочитать здесь: HowTos/SELinux.
P. S.: также выражаю благодарность LOR’у.

05.05.2014, 01:16
[ Вверх ] [ На главную ]