Заменить return-path; envelop-from
Модератор: xM
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
- рядовой
- Сообщения: 37
- Зарегистрирован: 2008-08-28 8:25:03
Заменить return-path; envelop-from
Здравствуйте.
На сервер в качестве MTA используется exim, обслуживает несколько виртуальных доменов. PHP скрипт на одном из сайтов занимается отсылкой сообщений. При этом заголовки: Subject, From, To, Reply-To устанавливаются в скрипте. А вот заголовки return-path, envelop-from устанавливает сам MTA. Т.к. скрипт запускается веб-сервером, то в и загаловках return-path; envelop-from: www@domain.com. Для пользователя, мыло которого подставляется в заголовок from: <user@site.com> нет виртуального домена, который бы обслуживал exim. Вопрос в том как и где (на каком этапе) можно поменять заголовки return-path; envelop-from с www@domain.com на user@site.com. Подозреваю, что если менять заголвки при помощи ACL, то делать это следует про проверке DATA, а вот как это сделать не знаю =(.
На сервер в качестве MTA используется exim, обслуживает несколько виртуальных доменов. PHP скрипт на одном из сайтов занимается отсылкой сообщений. При этом заголовки: Subject, From, To, Reply-To устанавливаются в скрипте. А вот заголовки return-path, envelop-from устанавливает сам MTA. Т.к. скрипт запускается веб-сервером, то в и загаловках return-path; envelop-from: www@domain.com. Для пользователя, мыло которого подставляется в заголовок from: <user@site.com> нет виртуального домена, который бы обслуживал exim. Вопрос в том как и где (на каком этапе) можно поменять заголовки return-path; envelop-from с www@domain.com на user@site.com. Подозреваю, что если менять заголвки при помощи ACL, то делать это следует про проверке DATA, а вот как это сделать не знаю =(.
Услуги хостинговой компании 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/
-
- сержант
- Сообщения: 249
- Зарегистрирован: 2009-02-06 23:02:40
- Откуда: Москва
- Контактная информация:
Re: Заменить return-path; envelop-from
1. Попробуйте переключить PHP на отправку почты по SMTP. Заодно и от спама от своего сайта подстрахуетесь.
2. Если отправка почты происходит с несуществующего адреса, Вы рискуете. Лучше настроить этот site.com. ИМХО в идеале д. б. так: http://moury.livejournal.com/74798.html
2. Если отправка почты происходит с несуществующего адреса, Вы рискуете. Лучше настроить этот site.com. ИМХО в идеале д. б. так: http://moury.livejournal.com/74798.html
Сисадмин - вождь апачей
-
- рядовой
- Сообщения: 37
- Зарегистрирован: 2008-08-28 8:25:03
Re: Заменить return-path; envelop-from
Поступил следующим образом:
Код: Выделить всё
Begin rewirte
www@domain\.com "${if eq {${address:$h_from:}}{user@site.com}{user@site.com}fail}" sF
-
- сержант
- Сообщения: 280
- Зарегистрирован: 2008-05-30 12:16:02
- Откуда: Киев
- Контактная информация:
Заменить return-path; envelop-from
Здравствуйте.
Столкнулся с точно такой же проблемой.
У меня веб интерфейс почты на roundcube естественно он шлет все письма от пользователя от которого работает пхп.
Bounce письма соответственно не возвращаются, ну и все вытекающие отсюда последствия.
И я до путя не пойму это мне пхп ковырять нужно или exim?
Столкнулся с точно такой же проблемой.
У меня веб интерфейс почты на roundcube естественно он шлет все письма от пользователя от которого работает пхп.
Bounce письма соответственно не возвращаются, ну и все вытекающие отсюда последствия.
И я до путя не пойму это мне пхп ковырять нужно или exim?
- xM
- ст. лейтенант
- Сообщения: 1316
- Зарегистрирован: 2009-01-15 23:57:41
- Откуда: Königsberg
- Контактная информация:
Заменить return-path; envelop-from
Что-то у вас неправильно настроено, значит.
Roundcube успешно отправляет от имени аутентифицированного пользователя.
IT voodoo blog https://kostikov.co
-
- сержант
- Сообщения: 280
- Зарегистрирован: 2008-05-30 12:16:02
- Откуда: Киев
- Контактная информация:
Заменить return-path; envelop-from
Вот и хотелось бы понять что именно, exim или php?
- xM
- ст. лейтенант
- Сообщения: 1316
- Зарегистрирован: 2009-01-15 23:57:41
- Откуда: Königsberg
- Контактная информация:
Заменить return-path; envelop-from
IT voodoo blog https://kostikov.co
-
- сержант
- Сообщения: 280
- Зарегистрирован: 2008-05-30 12:16:02
- Откуда: Киев
- Контактная информация:
Заменить return-path; envelop-from
Я думаю сам Roundcube не причем потому что вообще использование функции mail в php приводит к отправке письма с return-path и sender пользователя от которого работает php.
Например, есть сайт site.com php настроен в режиме fcgid и работает от пользователя в системе user.
Есть электронный адрес info@site.com. если отправить письмо функцией mail то оно уйдет от пользователя user@домен_который_прописан_в_exim_как_primary_hostname.
Например, есть сайт site.com php настроен в режиме fcgid и работает от пользователя в системе user.
Есть электронный адрес info@site.com. если отправить письмо функцией mail то оно уйдет от пользователя user@домен_который_прописан_в_exim_как_primary_hostname.
- xM
- ст. лейтенант
- Сообщения: 1316
- Зарегистрирован: 2009-01-15 23:57:41
- Откуда: Königsberg
- Контактная информация:
Заменить return-path; envelop-from
Поразительно, но у меня ничего подобного не происходит. Письмо отправляется от имени отправителя, а все хедеры корректны.
ЧЯДНТ?
Потом, с чего вы решили, что Roundcube использует штатный mail ? Я вот, хотя и исходники в этой части не смотрел, думаю что там своя реализация клиентов SMTP и IMAP.
IT voodoo blog https://kostikov.co
-
- сержант
- Сообщения: 280
- Зарегистрирован: 2008-05-30 12:16:02
- Откуда: Киев
- Контактная информация:
Заменить return-path; envelop-from
Ну я просто наблюдаю идентичную картину при отправке функцией mail и Roundcube.
Беглый прогон по конфигурационному файлу подтвердил догадку (If left blank, the PHP mail() function is used).
// SMTP server host (for sending mails).
// To use SSL/TLS connection, enter hostname with prefix ssl:// or tls://
// If left blank, the PHP mail() function is used
// Supported replacement variables:
// %h - user's IMAP hostname
// %n - hostname ($_SERVER['SERVER_NAME'])
// %t - hostname without the first part
// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
// %z - IMAP domain (IMAP hostname without the first part)
// For example %n = mail.domain.tld, %t = domain.tld
$config['smtp_server'] = '';
То есть если мне сильно захочется что бы Roundcube отправлял прилежно письма то нужно настроить через отправку smtp сервер.
Но мне даже больше хочется настроить корректную работу функции mail в php.
И я не могу понять как это сделать.
Беглый прогон по конфигурационному файлу подтвердил догадку (If left blank, the PHP mail() function is used).
// SMTP server host (for sending mails).
// To use SSL/TLS connection, enter hostname with prefix ssl:// or tls://
// If left blank, the PHP mail() function is used
// Supported replacement variables:
// %h - user's IMAP hostname
// %n - hostname ($_SERVER['SERVER_NAME'])
// %t - hostname without the first part
// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
// %z - IMAP domain (IMAP hostname without the first part)
// For example %n = mail.domain.tld, %t = domain.tld
$config['smtp_server'] = '';
То есть если мне сильно захочется что бы Roundcube отправлял прилежно письма то нужно настроить через отправку smtp сервер.
Но мне даже больше хочется настроить корректную работу функции mail в php.
И я не могу понять как это сделать.
- xM
- ст. лейтенант
- Сообщения: 1316
- Зарегистрирован: 2009-01-15 23:57:41
- Откуда: Königsberg
- Контактная информация:
Заменить return-path; envelop-from
Ну так вам там английским по-белому написано. Пропишите аутентификацию и серверы и будет всё отправляться от того, кого надо, а не от PHP mail().
Проблема решена.
IT voodoo blog https://kostikov.co
-
- сержант
- Сообщения: 280
- Зарегистрирован: 2008-05-30 12:16:02
- Откуда: Киев
- Контактная информация:
Заменить return-path; envelop-from
Ну, понятно с Roundcube разобрались.
Теперь попробуем разобраться почему PHP mail() некоректно работает??? Будут предположения??
Функция php mail() просто формирует строку следующего вида: $additional_headers To: $to Subject: $subject $message а затем передает ее на обработку стандартной UNIX'овой команде отправки почты, которая носит имя /usr/sbin/sendmail.
Запуская из консоли mail с параметром -f, например так mail -s subject user@site.net -ffrom_user@domain.com я получаю желаемый результат. Тоесть в return-path стоит from_user@domain.com. Но запуская в php mail с тем же параметром ничего не происходит.
Теперь попробуем разобраться почему PHP mail() некоректно работает??? Будут предположения??
Функция php mail() просто формирует строку следующего вида: $additional_headers To: $to Subject: $subject $message а затем передает ее на обработку стандартной UNIX'овой команде отправки почты, которая носит имя /usr/sbin/sendmail.
Запуская из консоли mail с параметром -f, например так mail -s subject user@site.net -ffrom_user@domain.com я получаю желаемый результат. Тоесть в return-path стоит from_user@domain.com. Но запуская в php mail с тем же параметром ничего не происходит.
- xM
- ст. лейтенант
- Сообщения: 1316
- Зарегистрирован: 2009-01-15 23:57:41
- Откуда: Königsberg
- Контактная информация:
Заменить return-path; envelop-from
Это вам надо в другую часть форума, полагаю.
IT voodoo blog https://kostikov.co
- Alex Keda
- стреляли...
- Сообщения: 35439
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
- Контактная информация:
Заменить return-path; envelop-from
Шоп спам не рассылали, так сделано
Убей их всех! Бог потом рассортирует...
-
- сержант
- Сообщения: 280
- Зарегистрирован: 2008-05-30 12:16:02
- Откуда: Киев
- Контактная информация:
Заменить return-path; envelop-from
Ну это, как минимум, неэффективный способ защиты. А с другой стороны как быть легитимным пользователям?
- xM
- ст. лейтенант
- Сообщения: 1316
- Зарегистрирован: 2009-01-15 23:57:41
- Откуда: Königsberg
- Контактная информация:
Заменить return-path; envelop-from
Проблема (если вы считаете это проблемой) решается добавлением в заголовки PHP mail() корректно сформированных полей return-path и envelop-from. При их наличии перезаписи на дефолтные не будет.
IT voodoo blog https://kostikov.co
-
- сержант
- Сообщения: 280
- Зарегистрирован: 2008-05-30 12:16:02
- Откуда: Киев
- Контактная информация:
Заменить return-path; envelop-from
Давайте сосредоточимся на return-path, так как, на него приходят bounce и соответственно я не могу обрабатывать ошибки отправки почты.
Если Вы имеете ввиду, что я могу установить какие хотите заголовки четвертым параметром функции, PHP mail()
Например
То, вероятно, Вы ошибаетесь, так как, Return-Path - это заголовок обработки, который совершенно реально генерирует сам sendmail (exim) при пересылке письма. При чем в отличие от Received: from **** он его не дописывает, а переписывает. Как раз во избежание подделки адреса отправителя.
Для формирования правильного return-path в PHP mail () используется 5 параметр который называется "установка дополнительного параметра командной строки" или другими словами позволяет задавать аргументы для вызова команды sendmail (exim), в том числе, ключ "-f".
что равносильно
С командной строки у меня сервер прекрасно отправляет и подменяет на правильные return-path с php я перепробовал все возможные настройки в php.ini но не помогло.
Пока ищу дальше.
Если Вы имеете ввиду, что я могу установить какие хотите заголовки четвертым параметром функции, PHP mail()
Например
Код: Выделить всё
$header .= "Return-Path: ".$_FROM."\r\n";
Для формирования правильного return-path в PHP mail () используется 5 параметр который называется "установка дополнительного параметра командной строки" или другими словами позволяет задавать аргументы для вызова команды sendmail (exim), в том числе, ключ "-f".
Код: Выделить всё
mail("nobody@example.com", "the subject", $message, "From: webmaster@example.com", "-fwebmaster@example.com");
Код: Выделить всё
mail -s the subject nobody@example.com -fwebmaster@example.com
Пока ищу дальше.
-
- сержант
- Сообщения: 280
- Зарегистрирован: 2008-05-30 12:16:02
- Откуда: Киев
- Контактная информация:
Заменить return-path; envelop-from
А вот и разгадка
После добавления пользователя от которого работает php в trusted_users все стало прекрасно работать.
Всем спасибо.
а у меня в trusted_users не был указан пользователь от которого работал php.# If this option is set, then any process that is running as one of the
# listed users may pass a message to Exim and specify the sender's
# address using the "-f" command line option, without Exim's adding a
# "Sender" header.
# trusted_users = mail
trusted_users = mail:root
После добавления пользователя от которого работает php в trusted_users все стало прекрасно работать.
Всем спасибо.
- xM
- ст. лейтенант
- Сообщения: 1316
- Зарегистрирован: 2009-01-15 23:57:41
- Откуда: Königsberg
- Контактная информация:
Заменить return-path; envelop-from
Не ошибаюсь. Вот такая строка вполне себе работала:Источник цитаты То, вероятно, Вы ошибаетесь, так как, Return-Path - это заголовок обработки, который совершенно реально генерирует сам sendmail (exim) при пересылке письма.
Код: Выделить всё
mail($mail, $subj, $text, $headers, "-f");
Впрочем, вы и сами ключ -f нашли.
UPD. Тонкий момент - поля хедеров надо не забывать разбивать через \r\n
IT voodoo blog https://kostikov.co