burzilov
@burzilov

PHP-функция mail(), 5-й аргумент?

Универсальный почтовый скрипт PHPMailer при отправке письма с помощью функции mail() в качестве 5-го аргумента функции подставляет строку "-oi -f mail@example.com".

Популярный фреймворк CodeIgniter делает тоже самое, только без флага "-oi".



Но valuehost.ru не отправляет письмо, если в 5-м параметре есть ключ "-f".



Не хочется (да и неправильно это) изменять код фреймворка. Правильнее было бы внести нужные изменения в настройки сервера, я думаю. Проблема в том, что я не знаю, какие это должны быть настройки (надеюсь, админы валюхоста пойдут навстречу, если я им подскажу, что и где исправить).



Кто-нибудь сталкивался с такой проблемой? Кто-нибудь знает, по каким причинам mail() может отказываться работать с ключом "-f"?



Заранее очень благодарю :)
  • Вопрос задан
  • 4904 просмотра
Пригласить эксперта
Ответы на вопрос 6
charon
@charon
я как бывший суппорт хостера с проблемой знаком. У нас почтовиком был exim. Суть происшествия в том, что почтовый сервер запрещает подставлять в поле Sender любое имя, а только то, от кого запускается процесс (РНР). Также можно включить разрешение такой подстановки, но лично я бы на сервере массового хостинга этого не делал. Такой запрет помогает отслеживать спаммеров и взломанных клиентов. А вот на ВПСах и колокейшене часто отключали такую проверку.
Ответ написан
Читаем тут описание 5 параметра (additional_parameters).
Суть — пятый параметр используется для передачи дополнительных флагов программе, используемой для отправки почты. Например, этот параметр можно использовать, чтобы установить адрес конвертного отправителя при использовании sendmail с флагом -f.
Там же идет отдельное указание. Пользователь, под которым работает веб-сервер, должен быть добавлен в «доверенные» (trusted) в конфигурации sendmail, чтобы предотвратить добавление заголовка «X-Warning», когда отправитель задается с помощью флага -f. Для пользователей sendmail, этот файл — /etc/mail/trusted-users.
В итоге для подробностей ответа на ваш вопрос стоит почитать документацию по программе, отправляющей почту на сервере.
Ответ написан
evg_vl
@evg_vl
С PHP 4.2.3 этот параметер запрещён в безопасном режиме и функция mail() будет выдавать предупреждающее сообщение, и возвращать FALSE, если вы попытаетесь использовать её.
Возможно это ваш случай и valuehost.ru использует безопасный режим
Ответ написан
AotD
@AotD
PHP, Redis, Postgresql
А почему не воспользоваться функцией sendmail того-же CodeIgniter?
$config['protocol'] = 'sendmail';
$config['mailpath'] = '/usr/sbin/sendmail';

$this->email->initialize($config);
...
Ответ написан
charon
@charon
вам надо как-то отучить вашу CMS вставлять 5-ый аргумент.
В доке codeigniter.com/user_guide/libraries/email.html написано, что есть возможность в конфиге config/email.php (по умолчанию не существует) задать настройки отправки почты. В т.ч. можно сделать отправку через SMTP-соединение, а не локальный почтовый сервер.
Попробуйте пойти этим путём.
Ответ написан
AotD
@AotD
PHP, Redis, Postgresql
А может стоит задуматься нужен ли вам вообще valuehost.ru?
Я конечно не отговариваю, но когда я делал один проэктец в котором заказчик уже озаботился доменом и хостингом (да-да, valuehost) — обплевался при работе. Начиная от того что они не привязали домен к аккаунту (как такое вообще возможно?), потом привязали его криво (вводим адрес сайта и… попадаем на какой-то немецкий паркинг-пейдж), заканчивая бесконечными «да, это особенности конфигов нашего сервера, нет, менять никто не будет, наша freeBSD самая freeBSD из всех free и BSD», хотя на 3х других хостингах все прекрасно работало и бегало :(
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы