программа автоматизации бухучета
"ИНФОБУХГАЛТЕР"
продажа, установка, настройка, сопровождение
Вологда, ул.Козленская, д.35, офис 325
 (8172)21-15-70

Отправка почты из скрипта на fvds.ru
 
У нас есть складской модуль "Склад-3". Это наша собственная разработка. Уже лет 10 мы наращиваем его функционал. В частности с ним тесно интегрировано WEB-приложение "Прайс-лист". В части загрузки номенклатуры и разделов в виде иерархического дерева. По сути - это интернет-магазин с возможностью заказа. При оформлении заказа тут-же посылается письмо менеджеру с выбранными товарами, количеством и данными заказчика. До этого все сайты с "Прайс-листами" размещались на виртуальном хостинге на 1gb.ru. И проблем с почтой не было.
Но там свои заморочки. То запросов слишком много, то обработка напрягает процессор. И решил я для нового клиента осенью 2014-го "Прайс-лист" сделать на VDS (FreeBCD) на  fvds.ru. Там с нагрузками и скоростью все намного лучше. Но поскольку это VDS, то и все приходится делать самому. В частности при попытке отправить почту из скрипта ничего не происходило. В качестве почтовика уже установлен EXIM. Разработка Кембриджского университета. Что уже как-то напрягло. Можно было подключить за небольшую сумму ISP-панель и все сделать быстро. Но это слишком просто))). VDS хорош тем, что имеешь полный доступ к серверу, апачу, РНР, mySQL и прочим службам сервера. Это очень бодрит. Недели 2 почитав статьи и руководство по EXIM, как всегда я отступился. Ничего не получалось. Потом еще через неделю взялся всерьез и добился таки отправки почты. Прием меня не интересует, т.к. mail.ru меня полностью устраивает.
Допустим сайт имеет такой адрес www.vasya.ru
Вот тут без SSH  доступа к серверу через терминал не обойтись. У меня для обработки фото есть комп с UBANTU, что сильно все упростило. Просто набираешь в терминале: ssh root@188.190.273.155 (188.190.273.155 - ip сервера), далее пароль который указан в "первом" письме и все. Можно и лазить по всему серверу.
/usr/local/etc/exim - дир. exim
в нем нужные файлы для редактирования.
но редактировать удобнее через VDS-панель. Как это сделать написано в статье про автоподдомены.
Терминал нужен для поиска файлов и тестировании связи.
Для проверки, что почта может уйти можно набрать в ssh:
exim -bt vasya@domen.ru

если все хорошо, то будет ответ

vasya@domen.ru
    <-- vasya@domen.ru
    <-- vasya@domen.ru

  router = procmail, transport = procmail_pipe

Но таким ответом я наслаждался намного позже, а получал вот такое:
vasya@domen.ru is undeliverable: Unknown user
    <--vasya@domen.ru


/usr/local/etc/exim/configure
это основной файл конфигурации. я его долго изучал, но так ничего там и не менял. вроде бы.

/usr/local/etc/exim/aliases
список почтовых алиасов. можно настроить тут псевдонимы. пересылку на другие адреса. но и тут я ничего не трогал. мне бы просто отправить.

/usr/local/etc/exim/domains
почтовые домены. вот тут пришлось редактировать. тут было что-то другое типа vasya_1.fvds.ru:vasya_1.fvds.ru::no, сделал так:
domen.ru:domen.ru::no

Ну и наконец, надо создать почтового пользователя. Пользователи хранятся в файле:
/usr/local/etc/exim/passwd
тут надо добавить запись о пользователе в определенном формате

vasya@domen.ru:1000:1002:0:/home/vasya/data/email:no:passw
vasya@domen.ru - это по сути email. vasya-пользователь.
1000 - UID пользователя, которому принадлежит ящик, 
1002 - GID пользователя, которому принадлежит ящик
           UID и GID можно посмотреть в файле /etc/passwd (запись типа "vasya:*:1000:1002:vasya:/home/vasya/data:/bin/csh")
0 - размер почтового ящика (0 - неограниченно)

/home/vasya/data/email - путь к директории почтового ящика

passw - пароль к ящику

Ну вот и все. Я тупо перегрузил весь VDS из VDS-панели. Это я тогда думал, что все))).

Но письма все равно не уходили. Но в логах была уже другая ошибка.

логи можно глянуть в терминале:  cat /var/log/exim/mainlog

в скрипте ранее письмо отправлялось так:

$res_=mail("vasya@mail.ru","Оформлен заказ....","Болты - 1 кг.......","MIME-Version: 1.0 Content-type: text/html; charset=utf-8")

В логах отправитель был не vasya@domen.ru, а что-то типа vasya_1@domen.fvds.ru.

Но поскольку терминальная команда exim -bt vasya@domen.ru отрабатывалась отлично, меня уж было не остановить))).

$res_=mail("vasya@mail.ru","Оформлен заказ....","Болты - 1 кг.......","MIME-Version: 1.0 Content-type: text/html; charset=utf-8",'-fvasya@domen.ru')

т.е. явно указал отправителя с ключом "-f".

Запустил скрипт и услышал как "вякнул" Mail.Ru Агент. Еще раз запустил и опять "вякнул". Письма в отличие от 1gb, уходят практически мгновенно. Отправил на Яндекс-почту, и тоже пришло моментально.

Т.е. главное создать почтового пользователя не любого, а который есть в файле /etc/passwd. Который создан вами, обычно он в конце списка.  Потом  многие почтовые сервера при получении предложения получить письмо, посылают обратный запрос, проверяя, что адрес отправителя действителен. Там как-то проверяют на соответствие доменов в заголовке письма и реально полученный при запросе по ip. Типа защита от спама. Поэтому чтобы письмо дошло, в заголовке должен быть реальный адрес отправителя, и отправлен он должен быть с того-же домена. Потом еще должны быть соответствующие правильные MX-записи в DNS-зоне. Но у меня это все было нормально сразу.