Xpoint
   [напомнить пароль]

Хитрое уведомление о приходе почты

Метки: [без меток]
[арх]
2006-12-09 16:17:15 [обр] Антон Дюжев(0/4)[досье]

Есть почтовый ящик. Хочу сделать следующее.
При приходе почты с опроеделенного адреса должно посылаться уведомление на другой адрес.
Но не сходу, а с учетом времени: если письмо пришло после 22:00 никого уведомлять не надо, а
уведомить надо только после 10:00 следующего дня.

Тест уведомления (план-минимум): Содержания сабджекта письма.

Тест уведомления в идеале: Сабджект письма + тест сообщения с заменой переводов строки на "/". Аттачи - отсекаем.
Если текст больше стадартного размера русского SMS - делаем транслитерацию. Если и это не помогло - остальное просто отбрасываем.
 
ВОПРОС в следующем: как это бестрее и проще реализовать технически ?
- настроечныйм файлом почтового обработчика(.procmailrc) ?
- perl/php скриптом работающем по крону ?
- каким-то софтом под винды (постоянно работающая машина под виндами есть) ?
- другое решение ?

спустя 1 час 17 минут [обр] Дмитрий Кучкин(3/236)[досье]

Средствами почтового сервера почта направляется на программу-обработчик, написанную на любом удобном языке.
Пример для sendmail:
в файл /etc/aliases добавляется строка

mymail: "| /usr/bin/mymailhandler", mymail

вся почта, приходящая на mymail@mymail.ru, кроме того, что сохранится в локальном почтовом ящике mymail, будет попадать на обработку программе /usr/bin/mymailhandler

Программа mymailhandler проверяет адрес отправителя и, если он тот, что нам нужен, обрабатывает письмо (выделяет subject, отсекает вложения, выполняет все нужные преобразования) и, если текущее время с 10:00 до 22:00, отсылает как уведомление результат обработки. Если текущее время больше 22:00 или меньше 10:00, уведомление кладется в очередь, организованную, например, в виде каталога с файлами. В 10:00 каждый день программа mymailhandler запускается через cron с каким-нибудь ключом, заставляющим ее отправить все уведомления, имеющиеся в очереди, с удалением их из очереди после отправки.
Как вариант, функцию обработки письма и функцию отправки можно реализовать в виде отдельных программ.

спустя 12 минут [обр] Антон Дюжев(0/4)[досье]

Спасибо !

А если у меня shared хостинг ?
Существует ли при этом какой либо аналог /etc/aliases ?

спустя 3 минуты [обр] Дмитрий Кучкин(3/236)[досье]
Файл .forward в домашнем каталоге
спустя 17 минут [обр] Антон Дюжев(0/4)[досье]

Эх... у меня похоже вообще никаких скриптов на тарифном плане нет.
Правда .forward в принципе пашет !

Нельзя ли при таких условиях сделать хотя бы тупую отсылку самджекта или ну хоть всей копии письма (не пересылку !) на другой адрес ?

спустя 3 минуты [обр] Антон Дюжев(0/4)[досье]
Естественно - копия не всех писем, а только с определенного адреса.
спустя 3 минуты [обр] Дмитрий Кучкин(3/236)[досье]
Только с определенного адреса без фильтра, поддерживаемого почтовой системой, либо фильтра в виде внешнего скрипта IMHO никак
А если всю почту копировать, то вписать адрес в .forward
myanothermail@mail.ru, mymail
спустя 40 минут [обр] Антон Дюжев(0/4)[досье]

Ну .procmail то доступен.
И даже копирование работает :)

:0:
* ^ FROM.*user1@domain1.ru
{
  :0 c
  !user2@domain2.ru
}

Но... мне копию нужно отправлять на на чтото@sms.beemail.ru , а оно не отправляет туда сходу :(

Можно как то сказать .procmail, чтобы он тест письма отправил в качестве копии или просто "пришло письмо" ?

спустя 55 минут [обр] Дмитрий Кучкин(3/236)[досье]

Мало что понял...

Вот так не работает?

:0hc
* ^From.*user1@domain1.ru
! user2@domain2.ru
спустя 15 минут [обр] Антон Дюжев(0/4)[досье]
  1. Так не работает (даже пересылка на обычную почту) - почему не знаю.
  1. чтото@sms.beemail.ru - адрес мобилы и туда копии сообщений не приходят вообще.
Я думал туда просто послать строчку "Пришло сообщение" через sendmail или mail например.
Пока никак...
спустя 29 минут [обр] Антон Дюжев(0/4)[досье]
Вроде прояснилось.
Оператор мобилы не принимает на адрес по умолчанию мессаджи от роботов.
Нужно заводить адрес для роботов специальный.
http://www.beonline.ru/portal/comm/mem.sms?section=forw2sms
Вроде есть реакция...
спустя 12 дней [обр] Евгений Иванов(0/6)[досье]
господа, то такое .forward
, расскажите
спустя 5 дней [обр] Антон Дюжев(0/4)[досье]

.forward - настроечный файл для procmail
позволяет управлять почтой - писать автооответчики, форвардинг, спам-фильтры.

 
Только пока не пойму как в отсылаемом сообщении заменить пустые строки например на '*'.

спустя 1 час 10 минут [обр] Антон Дюжев(0/4)[досье]

А лучше вообще кдалить пустые строки - как это сделать ?

Работающий форвардинг такой:

:0 H c
* From.*user@mail\.ru
! user2@mail.ru
спустя 2 часа 13 минут [обр] arto(11/494)[досье]

настройки для procmail хранятся в .procmailrc, man procmail procmailrc

работать с текстом письма: man formail sed

спустя 4 месяца 1 день [обр] Антон Дюжев(0/4)[досье]

В принципе я остановился на следующих скриптах.

Форвардит письма пришедшие с адресов adresat1@yandex.ru,
adresat2@rambler.ru, adresat3@mail.ru на адрес myforwardmail@yandex.ru

:0 H c
* From.*(adresat1@yandex\.ru|adresat2@rambler\.ru|adresat3@mail\.ru) 
! myforwardmail@yandex.ru

Форвардит письма пришедшие с адресов adresat1@yandex.ru
на адрес myforwardmail@yandex.ru удаляя при этом пустые строки

:0 c 
* H ?? From:.*adresat1@yandex\.ru
{
 :0 fbw
 | sed -e '/^$/d'
 
 :0 
 ! myforwardmail@yandex.ru
}

Форвардит письма пришедшие с адресов adresat1@yandex.ru
на адрес myforwardmail@yandex.ru заменяя при этом пустые строки на символ
подчеркивания.

:0 c 
* H ?? From:.* adresat1@yandex\.ru
{
 :0 fbw
 | sed -e 's/^$/_/g'
 
 :0 
 ! myforwardmail @yandex.ru
}

Когда будете пересылать по ftp - обязательно в ASCII формате (не в Binary)!

ТЕПЕРЬ ВОПРОС
Хотелось бы добавить еще условие, а имеено:
Если письмо от пользователя adresat1@yandex.ru в кодировке koi8-r, то
в копию перекодируем (средствами sed или formail) и windows1251 , не забывая сменить заголовок charset.
Как это сделать ?

спустя 21 час [обр] arto(11/494)[досье]
сообщение промодерировано
:0 H
* ^Context-Type: text/plain; .+charset=.*koi8-r.*
{
    :0 f
    | rcode -kw | formail -i "Content-Type: text/plain; charset=windows-1251"
}
повротить для разных context-type
спустя 1 день 3 часа [обр] Антон Дюжев(0/4)[досье]
rcode - эта стандартня приблуда unix ?
спустя 9 минут [обр] Антон Дюжев(0/4)[досье]
И еще вопросец. Как вышеозначенный код интегрировать в мой скрипт ?
:0 H c
* From.*(adresat1@yandex\.ru|adresat2@rambler\.ru|adresat3@mail\.ru) 
! myforwardmail@yandex.ru
спустя 28 минут [обр] Антон Дюжев(0/4)[досье]
:0 c 
* H ?? From:.*adresat1@yandex\.ru
{
 :0 H
 * ^Context-Type: text/plain; .+charset=.*koi8-r.*
 {
   :0 f
   | rcode -kw | formail -i "Content-Type: text/plain; charset=windows-1251"
 }
 
 :0 
 ! myforwardmail@yandex.ru
}
Не конвертит.
спустя 2 часа 19 минут [обр] arto(11/494)[досье]
сообщение промодерировано
:0 H
* From: .*test@test.com
{
        LOG="mail from test@test.com
"

        :0 Hf
        * ^Content-Type: text/plain;.*charset=.?koi8-r.?
        | iconv -fKOI8-R -tCP1251 | formail -i "Content-Type: text/plain; charset=windows-1251"

        :0
        | sendmail -oi -t
}
rcode — какая-то приблуда, достаточно надежно перекодирует из koi8-r в cp1251 и обратно.
iconv, к сожалению, иногда валится. но если никак, то можно и его, либо перл с Encode.
Powered by POEM™ Engine Copyright © 2002-2005