Страница 1 из 1

Exim + mysql: autoreply

Добавлено: 2007-09-14 18:28:15
Wombat
Нашел в интернете код роутера и транспорта для организации "vacation autoreply", основанный на файлах. Решил переделать его под свою БД mysql:

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

router_autoreply:
    driver = accept
    condition =  ${lookup mysql{ \
        SELECT u.is_autoreply_enabled \
        FROM users u INNER JOIN domains d ON u.domain_id=d.domain_id \
        WHERE u.user_name='${quote_mysql:$local_part}' AND d.domain_name='${quote_mysql:$domain}' \
            AND u.is_smtp_enabled=1 AND u.is_autoreply_enabled=1 AND u.autoreply_text IS NOT NULL \
        }{true}{false}}
    no_expn
    no_verify
    transport = transport_autoreply
    unseen


transport_autoreply:
    driver = autoreply
    from = $local_part@$domain
    to = $sender_address
    subject = "Re: $h_subject"
    text = ${lookup mysql{ \
        SELECT u.autoreply_text \
        FROM users u INNER JOIN domains d ON u.domain_id=d.domain_id \
        WHERE u.user_name='${quote_mysql:$local_part}' AND d.domain_name='${quote_mysql:$domain}' \
            AND u.is_smtp_enabled=1 AND u.is_autoreply_enabled=1 AND u.autoreply_text IS NOT NULL \
        }}
Проверил - работает. Только вот смущают меня эти lookups в плане производительности. Можно ли как-то получить одним запросом данные в условии (например, в роутере) и записать их в переменные? Чтобы в транспорте можно было пользоваться сразу готовой, скажем, "$autoreply_text".

з.ы. Может еще чего важного не хватает - посоветуйте плз :|

Re: Exim + mysql: autoreply

Добавлено: 2007-09-14 20:02:16
Alex Keda
думаю, что можно на это забить.
у меня в локалке на каждое письмо два десятка запросов к MySQL и на внутреннем роутинге - столько же к LDAP.
это не самое узкое место на котором надо экономить.

Re: Exim + mysql: autoreply

Добавлено: 2007-09-15 20:17:35
dikens3
to Wombat
Нашел в интернете код роутера и транспорта для организации "vacation autoreply", основанный на файлах. Решил переделать его под свою БД mysql:
Если есть желание скидывай в полезные настройки для Exim.

Re: Exim + mysql: autoreply

Добавлено: 2007-09-15 20:46:46
-cat-
dikens3 писал(а):Если есть желание скидывай в полезные настройки для Exim.
А где их мона посмотрить

Re: Exim + mysql: autoreply

Добавлено: 2007-09-15 20:50:01
dikens3
-cat- писал(а):
dikens3 писал(а):Если есть желание скидывай в полезные настройки для Exim.
А где их мона посмотрить
http://forum.lissyara.su/viewtopic.php?f=20&t=3577
P.S. Тем прилеплена, самая верхняя.

Re: Exim + mysql: autoreply

Добавлено: 2007-09-17 12:02:21
Wombat
dikens3 писал(а):Если есть желание скидывай в полезные настройки для Exim.
Погоняю этот роутер с месяц на реальной почте, может доработаю немного. Потом скину "stable"-версию :twisted:

Re: Exim + mysql: autoreply

Добавлено: 2007-10-18 10:10:08
Wombat
Роутер пока что не выдерживает проверку временем. За время использования возникло несколько проблем.

Первая проблема - глюки с кодировкой subject

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

subject = "Re: $h_subject"
Если приходит письмо с не-английскими символами в сабже, то это правило выдает ошибку "non-printable characters". В результате письмо не доходит и отдается ошибка (вроде 550, точно уже не помню).
Пробовал ${escape:$h_subject} - не помогает. Сдается мне, надо как-то производить MIME-раскодировку заголовка, добавлять туда "Re: " и кодировать снова.
Или более простой вариант - забить на переменную $h_subject и просто возвращать "Re: "



Все бы хорошо, если бы не вторая проблема - autoreply локальным юзверям

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

to = $sender_address
Сюда подставляется адрес отправителя. Если отправитель не локальный, проблем нет. Однако, если отправка от локального пользователя, в переменную $sender_address подставляется значение вида:

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

"localusername@localdomain.com"@localserver.fqdn.com
В результате "550 Unrouteable address".

Мысли по поводу описанных проблем - приветствуются :) Хочется уже довести фичу до работоспособного состояния.

Re: Exim + mysql: autoreply

Добавлено: 2007-10-18 10:44:20
Alex Keda
про сабджект - правильно отдаётся - ибо это не по стандарту.
про сотальное - надо в дебага смотреть откуда оно лезет

Re: Exim + mysql: autoreply

Добавлено: 2011-07-15 17:34:09
g1itch
На самом деле exim сам декодирует заголовки, когда к ним обращаются через $h_XXX. Так что пишем:

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

# как я понимаю, зависит от системной $LANG
# по умолчанию ISO-8859-1
headers_charset = UTF-8

transport_autoreply:
  ...
  subject = ${rfc2047:Re: $h_subject:}