Все работает кроме Postfix

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
burn
мл. сержант
Сообщения: 92
Зарегистрирован: 2007-08-21 1:12:11

Все работает кроме Postfix

Непрочитанное сообщение burn » 2007-11-06 15:18:38

exim+courier-imap
из админики постфикса не отправляются письма:

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

Nov  6 15:08:22 localhost exim[29220]: unqualified sender rejected: <admin> H=(localhost) [127.0.0.1] I=[127.0.0.1]:25
Nov  6 15:08:22 localhost exim[29220]: SMTP syntax error in "To: forum@steelballs.ru" H=(localhost) [127.0.0.1] I=[127.0.0.1]:25 unrecognized command
Nov  6 15:08:22 localhost exim[29220]: SMTP syntax error in "From: admin" H=(localhost) [127.0.0.1] I=[127.0.0.1]:25 unrecognized command
Nov  6 15:08:22 localhost exim[29220]: SMTP syntax error in "Subject: =?koi8-r?Q?=E4=CF=C2=D2=CF_=D0=CF=D6=C1=CC=CF=D7=C1=D4=D8!?=" H=(localhost) [127.0.0.1] I=[127.0.0.1]:25 unrecognized command
Nov  6 15:08:22 localhost exim[29220]: SMTP syntax error in "MIME-Version: 1.0" H=(localhost) [127.0.0.1] I=[127.0.0.1]:25 unrecognized command
Nov  6 15:08:22 localhost exim[29220]: SMTP call from (localhost) [127.0.0.1] I=[127.0.0.1]:25 dropped: too many unrecognized commands (last was "MIME-Version: 1.0")
Nov  6 15:08:22 localhost exim[29220]: SMTP call from (localhost) [127.0.0.1] I=[127.0.0.1]:25 dropped: too many unrecognized commands (last was "MIME-Version: 1.0")
конфиг exim:

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

#!/bin/sh
primary_hostname = mail.***.ru
# хост/имя_бд/пользователь/пароль
hide mysql_servers = localhost/***/***/****
domainlist local_domains = ${lookup mysql{SELECT `domain` \
                            FROM `domain` WHERE \
                            `domain`='${domain}' AND \
                            `active`='1'}}

domainlist relay_to_domains = ${lookup mysql{SELECT `domain` \
                            FROM `domain` WHERE \
                            `domain`='${domain}' AND \
                            `active`='1'}}

hostlist relay_from_hosts = localhost:127.0.0.0/8

acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data

#av_scanner = clamd:/var/run/clamav/clamd

qualify_domain = ***.ru

qualify_recipient = ***.ru

allow_domain_literals = false


never_users = root

#rfc1413_hosts = *
rfc1413_query_timeout = 0s


ignore_bounce_errors_after = 45m


timeout_frozen_after = 15d

freeze_tell = admin@***.ru

#helo_accept_junk_hosts = 127.0.0.1/8

auto_thaw = 1h

smtp_banner = "$primary_hostname ESMTP EXIM $version_number"

smtp_accept_max = 50
smtp_accept_max_per_connection = 25

smtp_connect_backlog = 30


smtp_accept_max_per_host = 20

split_spool_directory = true

remote_max_parallel = 15

return_size_limit = 70k

message_size_limit = 150M

helo_allow_chars = _

smtp_enforce_sync = false

log_selector = \
    +all_parents \
    +connection_reject \
    +incoming_interface \
    +lost_incoming_connection \
    +received_sender \
    +received_recipients \
    +smtp_confirmation \
    +smtp_syntax_error \
    +smtp_protocol_error \
    -queue_run

syslog_timestamp = no

# system filter
# А тут у начальства заскок - желание контролировать всё.
# Вот и пришлось сделать копию всей почты.
# Вот тока в IT отделе, как выяснилось, никто никому не пишет :)
#system_filter = /usr/local/etc/exim/copy_mail.conf


begin acl

acl_check_rcpt:

  # принимать сообщения которые пришли с локалхоста,
  # не по TCP/IP
  accept  hosts = :

  # Запрещаем письма содержащие в локальной части
  # символы @; %; !; /; |. Учтите, если у вас было
  # `percent_hack_domains` то % надо убрать.
  # Проверяются локальные домены
  deny    message       = "Недопустимые символы в адресе"
          domains       = +local_domains
          local_parts   = ^[.] : ^.*[@%!/|]

  # Проверяем недопустимые символы для
  # нелокальных получателей:
  deny    message       = "Недопустимые символы в адресе"
          domains       = !+local_domains
          local_parts   = ^[./|] : ^.*[@%!] : ^.*/\\.\\./

  # Принимаем почту для постмастеров локальных доменов без
  # проверки отправителя (я закомментировал, т.к. это -
  # основной источник спама с мой ящик).

#  accept  local_parts   = postmaster
#          domains       = +local_domains

  # Запрещщаем, если невозможно проверить отправителя
  # (отсутствует в списке локальных пользователей)
  # У себя я это закоментил, по причине, что некоторые
  # железяки (принтеры, & etc) и программы (Касперский, DrWEB)
  # умеют слать почту, в случае проблем но не умеют ставить
  # нужного отправителя. Такие письма эта проверка не пускает.
#  require verify        = sender

  # Запрещщаем тех, кто не обменивается приветственными
  # сообщениями (HELO/EHLO)
  deny    message       = "HELO/EHLO обязано быть по SMTP RFC"
          condition     = ${if eq{$sender_helo_name}{}{yes}{no}}

   accept  authenticated = *

# Рубаем нах, тех, кто подставляет свой IP в HELO
  deny    message       = "Не надо пихать свой IP в качестве HELO!"
          hosts         =  *:!+relay_from_hosts
          condition     = ${if eq{$sender_helo_name}\
                          {$sender_host_address}{true}{false}}


# Рубаем тех, кто в HELO пихает мой IP (2500 за месяц!)
  deny    condition     = ${if eq{$sender_helo_name}\
                          {$interface_address}{yes}{no}}
          hosts         = !127.0.0.1 : !localhost : *
          message       = "Это мой IP-адрес! Пшёл прочь!"

# Рубаем тех, кто в HELO пихает только цифры
# (не бывает хостов ТОЛЬКО из цифр)
  deny    condition     = ${if match{$sender_helo_name}\
                          {\N^\d+$\N}{yes}{no}}
          hosts         = !127.0.0.1:!localhost:*
          message       = "В HELO не могут быть тока цифры!"

  # Рубаем хосты типа *adsl*; *dialup*; *pool*;....
  # Нормальные люди с таких не пишут. Если будут
  # проблемы - уберёте проблемный пункт (у меня клиенты
  # имеют запись типа asdl-1233.zone.su - я ADSL убрал...)
  deny    message       = "Не нравится мне Ваш хост..."
          condition     = ${if match{$sender_host_name} \
                               {adsl|dialup|pool|peer|dhcp} \
                               {yes}{no}}
  # Рубаем тех, кто в блэк-листах. Серваки перебираются
  # сверху вниз, если не хост не найден на первом, то
  # запрашивается второй, и т.д. Если не найден ни в одном
  # из списка - то почта пропускается.
  deny    message       = "host in blacklist - $dnslist_domain \n $dnslist_text"
          dnslists      = opm.blitzed.org : \
                          proxies.blackholes.easynet.nl : \
                          cbl.abuseat.org : \
                          bl.spamcop.net : \
                          bl.csma.biz : \
                          dynablock.njabl.org : \


  # Задержка. (это такой метод борьбы со спамом,
  # основанный на принципе его рассылки) На этом рубается
  # почти весь спам. Единственно - метод неприменим на
  # реально загруженных MTA - т.к. в результате ему
  # приходится держать много открытых соединений.
  # но на офисе в сотню-две человек - шикарный метод.
  #
  # более сложный вариант, смотрите в статье по exim и
  # курьер имап. Т.к. там метод боле умный (просто правил
  # больше :), то можно и на более загруженные сервера ставить)
  warn
        # ставим дефолтовую задержку в 20 секунд
        set acl_m0 = 0s
  #warn
        # ставим задержку в 0 секунд своим хостам и
        # дружественным сетям (соседняя контора :))
   #     hosts = +relay_from_hosts : 213.234.195.226/28
    #    set acl_m0 = 0s
  warn
        # пишем в логи задержку (если оно вам надо)
        logwrite = Delay $acl_m0 for $sender_host_name \
        [$sender_host_address] with HELO=$sender_helo_name. Mail \
        from $sender_address to $local_part@$domain.
        delay = $acl_m0







  # Проверка получателя в локальных доменах.
  # Если не проходит, то проверяется следующий ACL,
  # и если непрошёл и там - deny
  accept  domains       = +local_domains
          endpass
          message       = "В этом домене нет такого пользователя"
          verify        = recipient

  # Проверяем получателя в релейных доменах
  # Опять-таки если не проходит -> следующий ACL,
  # и если непрошёл и там - deny
  accept  domains       = +relay_to_domains
          endpass
          message       = "Моя сервера не знать маршрут на этот хост..."
          verify        = recipient

  # Разрешаем почту от доменов в списке relay_from_hosts
  accept  hosts         = +relay_from_hosts

  # Если неподошло ни одно правило - чувак явно ищет
  # открытый релей. Пшёл прочь. :)
  deny    message       = "Свободен. Это тебе не ОпенРелей."


# Тут идут ACL проверяющие содержимое (тело) письма.
# Без них будут пропускаться все сообщения.

acl_check_data:

  # Проверяем письмо на вирусы
  #deny malware = *
  #message = "In e-mail found VIRUS - $malware_name"

  # Если есть необходимость - тут проверки на спам

  # Пропускаем остальное
  accept



# чё делаем с почтой
begin routers

# Поиск маршрута к хосту в DNS. Если маршрут не найден в DNS -
# то это `унроутабле аддресс`. Не проверяются локальные
# домены, 0.0.0.0 и 127.0.0.0/8
dnslookup:
  driver = dnslookup
  domains = ! +local_domains
  transport = remote_smtp
  ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
  no_more

system_aliases:
    driver      = redirect
    allow_fail
    allow_defer
    data = ${lookup mysql{SELECT `goto` FROM `alias` WHERE \
           `address`='${quote_mysql:$local_part@$domain}' OR \
           `address`='${quote_mysql:@$domain}'}}

mysqluser:
  driver = accept
  condition = ${if eq{}{${lookup mysql{SELECT `maildir` FROM `mailbox` \
              WHERE `username`='${quote_mysql:$local_part@$domain}'}}}{no}{yes}}
  transport = mysql_delivery

# начинаются транспорты - как доставляем почту
begin transports

# Доставка на удалённые хосты - по SMTP
remote_smtp:
    driver = smtp

mysql_delivery:
    driver = appendfile
    check_string = ""
    create_directory
    delivery_date_add
    directory = ${lookup mysql{SELECT CONCAT('/var/mail/exim/', `maildir`) \
                FROM `mailbox` WHERE `username`='${local_part}@${domain}'}}
    directory_mode = 770
    envelope_to_add
    group = mail
    maildir_format
    maildir_tag = ,S=$message_size
    message_prefix = ""
    message_suffix = ""
    mode = 0600

address_file:
    driver = appendfile
    delivery_date_add
    envelope_to_add
    return_path_add

# Имя программы
address_pipe:
  driver = pipe
  return_output

# Транспорт для автоответов
address_reply:
  driver = autoreply



# Начинаются повторы недоставленных писем.
begin retry

# Этот кусок я не трогал. Думаю разработчики лучше знают,
# какие тут должны быть цифирьки. Если же вы это знаете
# лучше их - меняйте. Хотя... А какого, если Вы такой
# умный, читаете этот мануал? Может ну, их, цифирьки, а? :)
# Address or Domain  Error   Retries
# -----------------  -----   -------
*                    *       F,2h,15m; G,16h,1h,1.5; F,4d,6h


# преобразование адресов. У меня такого нету.
begin rewrite


# Секция авторизации при отправке писем. Ввиду того,
# что почтовых клиентов много, и все всё делают
# по-своему, то и механизмов авторизации три...
begin authenticators

# А вот по какому методу авторизуется оутглюк - я уже и
# не помню... Хотя в своё время долго ковырялся,
# пока настроил... Толь plain, толь login...
auth_plain:
  driver = plaintext
  public_name = PLAIN
  server_condition = ${lookup mysql{SELECT `username` FROM \
                     `mailbox` WHERE `username` = \
                     '${quote_mysql:$1@***.ru}' AND `password` = \
                     '${quote_mysql:$2}'}{yes}{no}}
  server_prompts = :
  server_set_id = $2

# Вроде по этому оутглюк, а по предыдущему нетскейп.
auth_login:
  driver = plaintext
  public_name = LOGIN
  server_condition = ${lookup mysql{SELECT `username` FROM \
                     `mailbox` WHERE `username` = \
                     '${quote_mysql:$1@***.ru}' AND `password` = \
                     '${quote_mysql:$2}'}{yes}{no}}
  server_prompts = Username:: : Password::
  server_set_id = $1

# А так авторизуется "Летучая Мышь" - TheBat!
auth_cram_md5:
  driver = cram_md5
  public_name = CRAM-MD5
  server_secret = ${lookup mysql{SELECT `password` FROM \
                        `mailbox` WHERE `username` \
                        = '${quote_mysql:$1@***.ru}'}{$value}fail}
  server_set_id = $1

Хостинговая компания 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/
Выделенные сервера, Россия, Москва, от 2460 рублей (8 CPU, 8Gb RAM, 2x500Gb HDD, RAID 3ware 9750):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

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

Re: Все работает кроме Postfix

Непрочитанное сообщение Alex Keda » 2007-11-06 16:34:42

забить?
Убей их всех! Бог потом рассортирует...

burn
мл. сержант
Сообщения: 92
Зарегистрирован: 2007-08-21 1:12:11

Re: Все работает кроме Postfix

Непрочитанное сообщение burn » 2007-11-06 17:21:28

lissyara писал(а):забить?
эта функция нужна мне для создания ящика... альтернатива есть?

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

Re: Все работает кроме Postfix

Непрочитанное сообщение Alex Keda » 2007-11-06 19:35:11

dovecot - сам создаёт при первом заходе юзера.
Убей их всех! Бог потом рассортирует...

burn
мл. сержант
Сообщения: 92
Зарегистрирован: 2007-08-21 1:12:11

Re: Все работает кроме Postfix

Непрочитанное сообщение burn » 2007-11-06 19:46:38

lissyara писал(а):dovecot - сам создаёт при первом заходе юзера.
а на эксиме?

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

Re: Все работает кроме Postfix

Непрочитанное сообщение Alex Keda » 2007-11-06 19:47:13

надо отправить юзеру письмо.
Убей их всех! Бог потом рассортирует...

burn
мл. сержант
Сообщения: 92
Зарегистрирован: 2007-08-21 1:12:11

Re: Все работает кроме Postfix

Непрочитанное сообщение burn » 2007-11-06 19:57:47

lissyara писал(а):надо отправить юзеру письмо.
это понятно. короче нужно постфикс крутить

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

Re: Все работает кроме Postfix

Непрочитанное сообщение Alex Keda » 2007-11-06 22:02:51

нет.
надо либо читать документацию на функцию mail() в php, либо раздел документации exim касающийся главной конфигурации.
Сомбинация Ctrl+C и Ctrl+V не отменяет прочтения конфигов и документации по используемымм програмным средствам.
Убей их всех! Бог потом рассортирует...

burn
мл. сержант
Сообщения: 92
Зарегистрирован: 2007-08-21 1:12:11

Re: Все работает кроме Postfix

Непрочитанное сообщение burn » 2007-11-06 23:56:21

еще одна проблема возникла!
клиент периодически пишет messege is gone и почта не получается.
делаю

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

chmod -R 777 /var/mail/exim
почта загружается клиентом. wtf?

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

Re: Все работает кроме Postfix

Непрочитанное сообщение Alex Keda » 2007-11-07 0:05:24

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