Связка Exim+Dovecot+Jabber

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
tolik_dub
проходил мимо

Связка Exim+Dovecot+Jabber

Непрочитанное сообщение tolik_dub » 2010-03-02 20:05:39

Возникла необходимость слать клиентам уведомления о пришедшей почте по jabber. Локалпарты жаберовских акаунтов совпадают с почтовыми. По ящикам почта раскидывается довекотовским деливером. Думаю заюзать консольную утилю sendxmpp, вызывая ее в транспорте локальной доставки вместе с деливером. Собственно интересует городил ли кто чего подобного и на какие грабли наступал?

Хостинговая компания 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/

tolik_dub
проходил мимо

Re: Связка Exim+Dovecot+Jabber

Непрочитанное сообщение tolik_dub » 2010-03-03 0:49:22

Итак, консольная утилита для отсылки джаббер-сообщений работает.
Назрел конкретный вопрос - можно ли в транспорте pipe кроме запуска довкотного деливера запускать еще одну команду, если точнее - перловый скрипт?

tolik_dub
проходил мимо

Re: Связка Exim+Dovecot+Jabber

Непрочитанное сообщение tolik_dub » 2010-03-03 1:07:52

мда... моему скрипту надо передавать только локалпарт, на него ненадо скидывать само сообщение, может делать ето в транспорте плохая идея? буду признателен за направление на путь истинный

densan
ст. сержант
Сообщения: 370
Зарегистрирован: 2007-12-06 10:02:02
Откуда: Penza
Контактная информация:

Re: Связка Exim+Dovecot+Jabber

Непрочитанное сообщение densan » 2010-03-05 17:41:34

Кажется для некоторых jabber серверов есть плагины которые могут проверять почту. Например в openfire есть Email Listener http://www.igniterealtime.org/projects/ ... eadme.html

viiri
проходил мимо
Сообщения: 4
Зарегистрирован: 2010-03-14 4:14:52

Re: Связка Exim+Dovecot+Jabber

Непрочитанное сообщение viiri » 2010-03-14 4:21:29

Я делал с помощью shadow_transport. В понедельник выложу конфиг.

viiri
проходил мимо
Сообщения: 4
Зарегистрирован: 2010-03-14 4:14:52

Re: Связка Exim+Dovecot+Jabber

Непрочитанное сообщение viiri » 2010-03-23 9:21:05

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

jabber:
    driver = pipe
    command = /bin/sh -c "echo 'You have an incoming mail from ${sender_address}\r\n' | /usr/local/bin/sendxmpp -f /usr/local/etc/.sendxmpprc -s 'Incoming mail' ${lookup mysql{SELECT `jid` FROM `jabber` WHERE `address`='${quote_mysql:$local_part@$domain}' AND active='1'}}" 
    user = mailnull
    group = mail
  
dovecot_delivery:
    driver = pipe
    command = /usr/local/libexec/dovecot/deliver -d $local_part@$domain
    message_prefix =
    message_suffix =
    delivery_date_add
    envelope_to_add
    return_path_add
    log_output
    user = mailnull
    shadow_transport = jabber

Pavel81
проходил мимо
Сообщения: 1
Зарегистрирован: 2010-03-31 17:26:42

Re: Связка Exim+Dovecot+Jabber

Непрочитанное сообщение Pavel81 » 2010-03-31 17:36:00

А можно поподробнее, куда вписывать этот скрипт? Очень хочу настроить транспорт mysmtp-t (http://www.jawiki.ru/Mysmpt-t), который сейчас у меня работает только на отправку почты, хочу чтобы мог и получать. Но к сожалению в описании к нему написаны только настройки для postfix, который невозможен на моём сервере, запрещают ставить. Стоят Dovecot+Exim. Почтовым сервером пользуются похоже что Exim. Dovecot имеет такие настройки в dovecot.conf:

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

#base_dir = /var/run/dovecot/

protocols = imap pop3
disable_plaintext_auth = no
syslog_facility = local0
ssl_disable = yes

mail_location = maildir:/var/mail/virtual/%d/%n
mail_privileged_group = mail

dotlock_use_excl = yes
verbose_proctitle = yes
first_valid_uid = 93
last_valid_uid = 93
first_valid_gid = 93
last_valid_gid = 93

maildir_copy_with_hardlinks = yes
maildir_copy_preserve_filename = yes
auth_debug=yes

protocol imap {
  login_greeting_capability = yes
  imap_client_workarounds = delay-newmail netscape-eoh tb-extra-mailbox-sep
}
  
protocol pop3 {
  pop3_enable_last = yes
  pop3_uidl_format = %08Xu%08Xv
  pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}

auth_username_format = %Lu

auth default {
  mechanisms = plain login

  passdb passwd-file {
    args = /etc/exim/virtual_users
  }

  userdb static {
    args = uid=exim gid=exim
  }

  user = root

  socket listen {
    master {
      path = /var/run/dovecot/auth-master
      mode = 0600
      #user = 
      #group = 
    }
    client {
      path = /var/run/dovecot/auth-client
      mode = 0660
    }
  }
}
Помогите подружить с транспортом, настройки для которого для postfix такие:
Настройка MTA Postfix

Если у Вас уже имеется настроенный MTA Postfix, то изменения конфигурации для поддержания дополнительного домена будут минимальные, в случае необходимости настройки следует обратиться к официальной документации, так как объём данного документа не позволяет нам покрыть даже часть возможных вариантов настройки почтового сервера пусть даже небольшого масштаба.

Итак, для настройки postfix нам необходимо внести изменения в файлы main.cf и master.cf, которые можно отнести, пожалуй, к самым главным файлам настройки postfix и в файле transport, который указывает на маршрутизацию писем по получателю.
[edit]
Изменения в файле main.cf

В пункт mydestination необходимо добавить обслуживаемый jabber-домен, например для jabber.org:
mydestination = $myhostname, localhost, jabber.org

(в данном случае добавлен только jabber.org в конец списка) Также требуется отключить проверку пользователей домена jabber на присутствие в системе:
local_recipient_maps =

То есть достаточно присвоить этому параметру пустое значение. (Такая настройка небезопасна в отношении спама!) Чтобы исключить опасность, необходимо создать дополнительный файл, который будет содержать запись, что все пользователи jabber-домена являются допустимыми. Подробнее об этом можно прочитать в документации по postfix. Если параметр transport_maps ещё не включает в себя файл transport, то добавьте его:
transport_maps = hash:/etc/postfix/transport
[edit]
Изменения в файле master.cf

Добавляем следующие строки для транспорта:
jabber unix - n n - - pipe \
flags=DRhu user=jabber argv=/opt/jabber/mailgate/smtpbot ${sender} ${recipient}

Здесь в поле user указывается пользователь, с правами которого работает jabber-сервер, и в параметре argv указывается полный путь до файла smtpbot в файловой системе сервера.
[edit]
Изменения в файле transport

В файл transport вписываем строчку для нашего домена (на примере jabber.org):
jabber.org jabber:
[edit]
Проверка и запуск

После завершения настройки необходимо выполнить команду postmap transport, задать postfix команду перечитать конфигурацию (в Linux - /etc/init.d/postfix reload) и в файле /var/log/mail проверить, что postfix работает нормально. Затем можно в клиенте jabber подключаться к транспорту и пересылать сообщения из jabber на email и наоборот.

zibadi
рядовой
Сообщения: 16
Зарегистрирован: 2010-08-23 21:50:42

Re: Связка Exim+Dovecot+Jabber

Непрочитанное сообщение zibadi » 2010-09-03 22:42:43

я вот так сделал:

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

jabber:
 driver = pipe
 command = /путь к скрипту/xmpp.py -t "$tod_log Новое письмо от <${sender_address}>"\ 
 -m "Тема сообщения:$h_subject Адрес сервера: http://mail.myhost.ru" \
 -u "${lookup mysql{SELECT `localpart` FROM `users` WHERE `username`='${quote_mysql:$local_part@$domain}'}}@myhost.ru"
 user = Debian-exim
 group = Debian-exim

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

shadow_transport = jabber
надо вставит в конце описания транспорта осуществляющего доставку
отправка сообщений xmpp.py:

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

#!/usr/bin/python
import xmpp,  optparse
p = optparse.OptionParser()
#опции передаваемые скрипту
p.add_option('-m') #тело сообщения
p.add_option('-u') #кому сообщение
p.add_option('-t') #тема сообщения
o, a = p.parse_args()
msg = o.m
adr = o.u
tem = o.t
def jabber_report(msg):
        FROM_JID = "lastmail@myhost.ru"
        JID_PASS = "password"
        J_SERVER = "myhost.ru"
        TO_JID = adr
        RES = "Mail_info"        
        jid = xmpp.protocol.JID(FROM_JID)
        cl = xmpp.Client(jid.getDomain(), debug = [])
        if not cl.connect((J_SERVER,5222)):
                raise IOError('Can not connect to server.')
        if not cl.auth(jid.getNode(),JID_PASS, RES):
                raise IOError('Can not auth with server.')
        cl.send(xmpp.Message(TO_JID, msg, '',tem))
        cl.disconnect()
jabber_report(msg)
преимущество этого скрипта в том что нет проблемы с кодировкой в теме письма