Связка Exim+Dovecot+Jabber
Модератор: xM
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
- проходил мимо
Связка Exim+Dovecot+Jabber
Возникла необходимость слать клиентам уведомления о пришедшей почте по jabber. Локалпарты жаберовских акаунтов совпадают с почтовыми. По ящикам почта раскидывается довекотовским деливером. Думаю заюзать консольную утилю sendxmpp, вызывая ее в транспорте локальной доставки вместе с деливером. Собственно интересует городил ли кто чего подобного и на какие грабли наступал?
Услуги хостинговой компании Host-Food.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/
Тарифы на виртуальные сервера (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/
-
- проходил мимо
Re: Связка Exim+Dovecot+Jabber
Итак, консольная утилита для отсылки джаббер-сообщений работает.
Назрел конкретный вопрос - можно ли в транспорте pipe кроме запуска довкотного деливера запускать еще одну команду, если точнее - перловый скрипт?
Назрел конкретный вопрос - можно ли в транспорте pipe кроме запуска довкотного деливера запускать еще одну команду, если точнее - перловый скрипт?
-
- проходил мимо
Re: Связка Exim+Dovecot+Jabber
мда... моему скрипту надо передавать только локалпарт, на него ненадо скидывать само сообщение, может делать ето в транспорте плохая идея? буду признателен за направление на путь истинный
-
- ст. сержант
- Сообщения: 370
- Зарегистрирован: 2007-12-06 10:02:02
- Откуда: Penza
- Контактная информация:
Re: Связка Exim+Dovecot+Jabber
Кажется для некоторых jabber серверов есть плагины которые могут проверять почту. Например в openfire есть Email Listener http://www.igniterealtime.org/projects/ ... eadme.html
-
- проходил мимо
- Сообщения: 4
- Зарегистрирован: 2010-03-14 4:14:52
Re: Связка Exim+Dovecot+Jabber
Я делал с помощью shadow_transport. В понедельник выложу конфиг.
-
- проходил мимо
- Сообщения: 4
- Зарегистрирован: 2010-03-14 4:14:52
Re: Связка Exim+Dovecot+Jabber
Код: Выделить всё
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
-
- проходил мимо
- Сообщения: 1
- Зарегистрирован: 2010-03-31 17:26:42
Re: Связка Exim+Dovecot+Jabber
А можно поподробнее, куда вписывать этот скрипт? Очень хочу настроить транспорт mysmtp-t (http://www.jawiki.ru/Mysmpt-t), который сейчас у меня работает только на отправку почты, хочу чтобы мог и получать. Но к сожалению в описании к нему написаны только настройки для postfix, который невозможен на моём сервере, запрещают ставить. Стоят Dovecot+Exim. Почтовым сервером пользуются похоже что Exim. Dovecot имеет такие настройки в dovecot.conf:
Помогите подружить с транспортом, настройки для которого для postfix такие:
Код: Выделить всё
#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
}
}
}
Настройка 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 и наоборот.
-
- рядовой
- Сообщения: 16
- Зарегистрирован: 2010-08-23 21:50:42
Re: Связка Exim+Dovecot+Jabber
я вот так сделал:
надо вставит в конце описания транспорта осуществляющего доставку
отправка сообщений xmpp.py:
преимущество этого скрипта в том что нет проблемы с кодировкой в теме письма
Код: Выделить всё
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)