exim: включение автоответа письмом пользователя.

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

exim: включение автоответа письмом пользователя.

Непрочитанное сообщение BlitzKrieg » 2010-05-07 11:42:10

Собственно тут посмотрел http://wiki.exim.org/EximAutoReply?high ... utorepl%29
Все ясно все понятно.
Идея такая: пользователь, уходящий в отпуск шлет письмо на некий адрес (самому себе как вариант) к сообщению приатачивает файлик i.e. vacation.msg в котором текст, который вставляется в автоответ. Exim определяет (как вариант из бд что пользователь в отпуске) и отвечает на приходящие на адрес пользователя сообщения вставляя текст из файла в письмо. По возвращении из отпуска пользователь снова шлет письмо (самому себе/на некий адрес) и автоответ выключается. I.e. запись о том, что пользователь в отпуске может быть в бд.
Как это сделать?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: exim: включение автоответа письмом пользователя.

Непрочитанное сообщение dikens3 » 2010-05-07 11:50:38

полезные скрипты почитать?
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: exim: включение автоответа письмом пользователя.

Непрочитанное сообщение BlitzKrieg » 2010-05-07 12:23:15

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

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: exim: включение автоответа письмом пользователя.

Непрочитанное сообщение dikens3 » 2010-05-07 13:30:19

У вас какая проблема?
1. Как создать автоответчик? - полезные скрипты.
2. Как прикрепить файл или сообщение?
http://forum.lissyara.su/viewtopic.php?f=20&t=25603
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Гость
проходил мимо

Re: exim: включение автоответа письмом пользователя.

Непрочитанное сообщение Гость » 2010-05-07 13:59:55

Идея включать выключать автоответ письмом, содержащим файл с текстом автоответа.
Примерный алгоритм такой:
Пользователь вкладывает файл с текстом автоответа в письмо и отсылает на некий адрес или себе самому.
exim выковыривает из этого письма аттачмент и кладет его скажем в /var/mail/$domain/$local_part.
Далее все согласно faq по приведенной мною выше ссылке.
Т.е. при приходе письма абоненту у которого в /var/mail/$domain/$local_part есть vacation.msg отправляется автоответ с текстом из этого файла.
когда юзер возрвращается из турции он может этот файл-письмо удалить.

Гость
проходил мимо

Re: exim: включение автоответа письмом пользователя.

Непрочитанное сообщение Гость » 2010-05-07 14:10:56

Возможно отслыать письмо с неким опознавательным знаком чтобы exim брал из него текст и сувал в mysql а также ставил скажем active из 1 в 0 далее при приеме сообщений он бы проверял совпадение удреса получателя с адресом где active не 1 и при совпадении брал бы текст из mysql.
Вобщем идея - чтобы пользователь сам мог включать выключать автоответ без веб морд и прочей мути.

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: exim: включение автоответа письмом пользователя.

Непрочитанное сообщение dikens3 » 2010-05-07 19:50:58

Почему нельзя написать нормально один автоответ для всех?
Типа - пользователь временно отсутствует/спит/не читает почту/и т.п. позвоните вчера..

что касается автоматики, то это просто. Создайте некий секретный адрес XXX@domain.ru и пусть пользователь отправляет письмо по этому адресу.

В вашем случае нужно проверить отправителя и внести изменения в автоответчик при получении письма на этот адрес.
Обратно так же, только проверить включён ли уже автоответ.

Опять же на этапе DATA уже имеется всё письмо и можно забрать его из переменной и внести в mysql.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: exim: включение автоответа письмом пользователя.

Непрочитанное сообщение BlitzKrieg » 2010-05-07 23:17:29

Потому, что в одном автоответе не напишешь когда и у кого отпуск :-)
Т.е. Вы предлагаете помещать все письмо в бд, а при автоответе просто менять адресата?
Переменная message_body c message_body_visible или как-там?

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35411
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: exim: включение автоответа письмом пользователя.

Непрочитанное сообщение Alex Keda » 2010-05-07 23:39:36

он вам много чего предложил.
перечитайте пост ещё раз
Убей их всех! Бог потом рассортирует...

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: exim: включение автоответа письмом пользователя.

Непрочитанное сообщение dikens3 » 2010-05-08 0:09:53

BlitzKrieg писал(а):Потому, что в одном автоответе не напишешь когда и у кого отпуск :-)
Почему?
К сожалению пользователь сейчас в отпуске. При необходимости свяжитесь с пользователем по его телефону.

Что значит какой пользователь? Тот которому идёт письмо.
BlitzKrieg писал(а):Т.е. Вы предлагаете помещать все письмо в бд, а при автоответе просто менять адресата?
и отвечает на приходящие на адрес пользователя сообщения вставляя текст из файла в письмо.
Идея включать выключать автоответ письмом, содержащим файл с текстом автоответа.
Да это вы предлагаете, я просто показал мысль что можно и с базой работать.
BlitzKrieg писал(а):Переменная message_body c message_body_visible или как-там?
Да.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: exim: включение автоответа письмом пользователя.

Непрочитанное сообщение BlitzKrieg » 2010-05-08 0:11:31

TO:Alex Keda
При всем уважении к вам вы не в тему. Много это ссылки на посты в которых нет ответа на мой вопрос? Из всего писаного подполковником толкьо последний пост дельный но по факту уже запоздалый.
Последний раз редактировалось BlitzKrieg 2010-05-08 0:15:21, всего редактировалось 1 раз.

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: exim: включение автоответа письмом пользователя.

Непрочитанное сообщение BlitzKrieg » 2010-05-08 0:14:20

Отпуск понятие весьма растяжимое... где-то он 20 дней, а где-то как придется, на заводах предпраздничный день на час короче, наверное, потому, что работы много. :-)
Вы даже не подрзреваете как может поворачиваться ситуация... i.e. пользователь сейчас в италии и телефон какой у него он даже сам не знает пока туда не приедет. Однако же отправить письмо через наш сервер может.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35411
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: exim: включение автоответа письмом пользователя.

Непрочитанное сообщение Alex Keda » 2010-05-08 9:13:34

BlitzKrieg писал(а):TO:Alex Keda
При всем уважении к вам вы не в тему. Много это ссылки на посты в которых нет ответа на мой вопрос? Из всего писаного подполковником толкьо последний пост дельный но по факту уже запоздалый.
да я как раз в тему.
просто вы не хотите думать, а хотите готвого решения.
тут вам его не будет. тут только направления выдаются - в которых надо думать.
Дикенс вам их выдал более чем достаточно.
Убей их всех! Бог потом рассортирует...

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: exim: включение автоответа письмом пользователя.

Непрочитанное сообщение BlitzKrieg » 2010-05-08 13:47:22

Направления думать - это линки на тот же фак тока раком? Я думать люблю просто таки обожаю. Только тут дело не в думать, а в знании возможностей. Я exim настраиваю второй раз в жизни, Вы какой? Код готовый мне не нужен, мне нужно было предложение по реализации исходя из моих требований в проекции на возможности exim. Тем более коли уж даже я указал переменную, то Вам и подполковнику наверняка особого труда не составило бы ее указать. По большому счету в нее все и упиралось.

Сейчас мне видится таким алгоритм, пользователь шлет письмо на некий адрес, по этому событию ехим пихает в базу $message_body и ставит некий флаг что юзер отдыхает, далее при ответе берет тело письма из бд.
Вот если бы Вы мне или подполковник не давали ссылок а просто написали эти строки, уверяю Вас я бы уж нашел в документации как и чего сделать и молился о Вашем и подполковника благополучии и здравии. А так отдает каким-то высокомерием и т.д. :bn:

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: exim: включение автоответа письмом пользователя.

Непрочитанное сообщение dikens3 » 2010-05-08 13:55:22

Решение задачи бывает в 2 этапа.

Первый:
Идея, её словесное обсуждение, возможность реализации и т.п.
На данном этапе никакой точности быть не может, просто набросок.

Второй:
Сама реализация идеи. Тут помощь оказывается при возникновении трудностей. Если никто ничего не сделал, то ни о какой помощи говорить не стоит.
Например вы сообщаете, что хочу блокировать что-то, сделал это, но не работает...
Вот если бы Вы мне или подполковник не давали ссылок а просто написали эти строки
Вы писали про 1-й этап, о возможности или невозможности. Я ответил на вашу просьбу, но вам и пункт 2 реализовать понимаешь надо было. Писать вопросы нужно правильно - Сделайте за меня вот это, потому что не знаю как, тогда и куча желающих сразу появится.

Я не прав?
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: exim: включение автоответа письмом пользователя.

Непрочитанное сообщение BlitzKrieg » 2010-05-08 14:19:40

Конечно правы, Вы ведь старше по званию.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35411
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: exim: включение автоответа письмом пользователя.

Непрочитанное сообщение Alex Keda » 2010-05-09 13:53:08

кроме FAQ есть ещё и дока.
на русском, кстати.
прочтите - 90% вопросов сами отпадут.
========
тока не надо рассказов что она большая и вы ниасилите.
это вам так кажется. она маленькая.
Убей их всех! Бог потом рассортирует...

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: exim: включение автоответа письмом пользователя.

Непрочитанное сообщение BlitzKrieg » 2010-05-17 16:51:10

Потихоньку делается.
Вот вопрос возник. $message_body по умолчанию 500 символов, messagу_body_visible это понятно. Но как быть когда неизвестно сколько символов?
Т.е. мне нужно все после DATA целиком пихнуть в бд, все ок, но как пихнуть именно все что после DATA а не только все что укладывается в messagу_body_visible

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: exim: включение автоответа письмом пользователя.

Непрочитанное сообщение BlitzKrieg » 2010-05-17 19:55:36

Вобщем вопрос такой.
Я сделал следующее: при отправке на адрес vacation@domain.ru проверяется есть ли в таблице автоответа пользователь, если нет до вносится его адрес, если есть то запись с его адресом вытирается.
При проверке тела письма при наличии записи о пользователе в той таблице добавляется в таблицу $message_body, message_body_newlines=true.

ТАким образом после этого в таблице имею вот что:

Код: Выделить всё

| test@domain.ru | This is a multi-part message in MIME format.

------=_NextPart_000_0116_01CAF601.28694BF0
Content-Type: text/plain;
        charset="koi8-r"
Content-Transfer-Encoding: quoted-printable

Privet
------=_NextPart_000_0116_01CAF601.28694BF0
Content-Type: text/html;
        charset="koi8-r"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; charset=3Dkoi8-r">
<META content=3D"MSHTML 6.00.2900.2180" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT face=3DArial size=3D2>Privet</FONT></DIV></BODY></HTML>

------=_NextPart_000_0116_01CAF601.28694BF0--

КОгда автоответ включен (т.е. есть запись в указанной таблице) то при написании письма на test@domain.ru приходит автоответ. В теле все, что в таблице, т.е. это не воспринимается клиентом как служебная информация, а как текст письма.
Что я не так делаю?
Пробовал слать просто письмо и сравнивать с автоответом, разница есть, Не хватает части заголовков и т.д. ПРобовал в таблицу ручками пихать так чтобы наиболее было похоже на простое письмо результат тот же.

Вот письмо, написаное ручками:

Код: Выделить всё

Return-path: <it@domain.ru>
Envelope-to: test@domain.ru
Delivery-date: Mon, 17 May 2010 20:39:48 +0400
Received: from host ([88.111.240.11]:2065 helo=fdjdsakljdafl)
        by mail2.domain.ru with smtps (TLSv1:RC4-MD5:128)
        (Exim 4.71 (FreeBSD))
        (envelope-from <it@domain.ru>)
        id 1OE3M4-000ExY-Br
        for test@domain.ru; Mon, 17 May 2010 20:39:48 +0400
Message-ID: <011201caf5df$931576d0$0201a8c0@fdjdsakljdafl>
From: <it@domain.ru>
To: <test@domain.ru>
Subject: Privet
Date: Mon, 17 May 2010 20:39:50 +0400
MIME-Version: 1.0
Content-Type: multipart/alternative;
        boundary="----=_NextPart_000_010F_01CAF601.18C16C50"
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2900.2180
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180

This is a multi-part message in MIME format.

------=_NextPart_000_010F_01CAF601.18C16C50
Content-Type: text/plain;
        charset="koi8-r"
Content-Transfer-Encoding: quoted-printable

Privet
------=_NextPart_000_010F_01CAF601.18C16C50
Content-Type: text/html;
        charset="koi8-r"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; charset=3Dkoi8-r">
<META content=3D"MSHTML 6.00.2900.2180" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT face=3DArial size=3D2>Privet</FONT></DIV></BODY></HTML>

------=_NextPart_000_010F_01CAF601.18C16C50--
А вот автоответ:

Код: Выделить всё

Return-path: <>
Envelope-to: test@domain.ru
Delivery-date: Mon, 17 May 2010 20:40:22 +0400
Received: from mailnull by mail2.domain.ru with local (Exim 4.71 (FreeBSD))
        id 1OE3Mc-000EyI-0k
        for test@domain.ru; Mon, 17 May 2010 20:40:22 +0400
Date: Mon, 17 May 2010 20:40:22 +0400
Message-Id: <E1OE3Mc-000EyI-0k@mail2.domain.ru>
From: it@domain.ru
To: test@domain.ru
Subject: Re:
In-Reply-To: <012401caf5df$a6b4f670$0201a8c0@fdjdsakljdafl>
References: <012401caf5df$a6b4f670$0201a8c0@fdjdsakljdafl>
Auto-Submitted: auto-replied

This is a multi-part message in MIME format.

------=_NextPart_000_0116_01CAF601.28694BF0
Content-Type: text/plain;
        charset="koi8-r"
Content-Transfer-Encoding: quoted-printable

Privet
------=_NextPart_000_0116_01CAF601.28694BF0
Content-Type: text/html;
        charset="koi8-r"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; charset=3Dkoi8-r">
<META content=3D"MSHTML 6.00.2900.2180" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT face=3DArial size=3D2>Privet</FONT></DIV></BODY></HTML>

------=_NextPart_000_0116_01CAF601.28694BF0--


BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: exim: включение автоответа письмом пользователя.

Непрочитанное сообщение BlitzKrieg » 2010-05-18 9:40:38

Решил пока проблему отправкой письма на vacation@domain.ru как текст. Тада все ок. На данный момент такой вариант вполне устраивает.

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: exim: включение автоответа письмом пользователя.

Непрочитанное сообщение BlitzKrieg » 2010-05-18 20:53:49

Вобщем сделал так:
Ну таблица чот типа такого

Код: Выделить всё

CREATE TABLE holiday(recipient varchar(255), body text default NULL);
Переменная
message_body_visible =65535
message_body_newlines=true


Макросы:

Код: Выделить всё

CHECK_USER=SELECT COUNT(*) FROM holiday WHERE recipient='${quote_mysql:$sender_address}';
INSERT_USER=INSERT INTO holiday(recipient) values ('${quote_mysql:$sender_address}');
DELETE_USER=DELETE FROM holiday WHERE recipient='${quote_mysql:$sender_address}';
ADD_BODY=UPDATE holiday SET body='${quote_mysql:$message_body}' WHERE recipient='${quote_mysql:$sender_address}' AND body IS NULL;
acl_check_rcpt:

Код: Выделить всё

#AUTOREPLAY

warn  hosts = +relay_from_hosts
      domains = +relay_to_domains
      local_parts = vacation
      set acl_m5 = ${lookup mysql{CHECK_USER}{$value}{0}}

warn  hosts = +relay_from_hosts
      domains = +relay_to_domains
      local_parts = vacation
      condition = ${if == {$acl_m5}{0}{yes}{no}}
      set acl_m6 = ${lookup mysql{INSERT_USER}{$value}{0}}

warn  hosts = +relay_from_hosts
      domains = +relay_to_domains
      local_parts = vacation
      condition = ${if == {$acl_m5}{1}{yes}{no}}
      set acl_m6 = ${lookup mysql{DELETE_USER}{$value}{0}}
acl_check_data:

Код: Выделить всё

warn
     hosts      = +relay_from_hosts
     set acl_m8 = ${lookup mysql{CHECK_USER}{$value}{0}}


warn
     hosts      = +relay_from_hosts
     condition  = ${if == {$acl_m8}{1}{yes}{no}}
     set acl_m9 = ${lookup mysql{ADD_BODY}{$value}{0}}
routers:

Код: Выделить всё

vacation_autoreply:
driver = accept
condition = ${if eq{} {${lookup mysql{SELECT recipient FROM holiday WHERE recipient='${quote_mysql:$local_part}@${quote_mysql:$domain}'}}}{no}{yes}}
domains = +local_domains
no_expn
no_verify
transport = vacation_autoreply
unseen
transports:

Код: Выделить всё

vacation_autoreply:
driver = autoreply
to = $sender_address
from = "$local_part@$domain"
subject = Re: $h_subject
text = ${lookup mysql{SELECT body FROM holiday WHERE recipient='${quote_mysql:$local_part}@${quote_mysql:$domain}'}{$value}{0}}
Покритикуйте, пожалуйста, что где не так.

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: exim: включение автоответа письмом пользователя.

Непрочитанное сообщение dikens3 » 2010-05-19 9:02:28

Код: Выделить всё

warn  hosts = +relay_from_hosts
      domains = +relay_to_domains
      local_parts = vacation
      set acl_m5 = ${lookup mysql{CHECK_USER}{$value}{0}}
      condition = ${if == {$acl_m5}{0}{yes}{no}}
      set acl_m6 = ${lookup mysql{INSERT_USER}{$value}{0}}
Аналогично в дата.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: exim: включение автоответа письмом пользователя.

Непрочитанное сообщение BlitzKrieg » 2010-05-19 13:04:38

Спасибо.
Так как я сделал это ошибка или просто некошерно? :-)

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: exim: включение автоответа письмом пользователя.

Непрочитанное сообщение dikens3 » 2010-05-19 22:08:00

Правильнее и быстрее.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.