Страница 1 из 1
Заменить return-path; envelop-from
Добавлено: 2012-05-16 8:28:36
orfan
Здравствуйте.
На сервер в качестве 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, а вот как это сделать не знаю =(.
Re: Заменить return-path; envelop-from
Добавлено: 2012-05-17 7:13:48
moury
1. Попробуйте переключить PHP на отправку почты по SMTP. Заодно и от спама от своего сайта подстрахуетесь.
2. Если отправка почты происходит с несуществующего адреса, Вы рискуете. Лучше настроить этот site.com. ИМХО в идеале д. б. так:
http://moury.livejournal.com/74798.html
Re: Заменить return-path; envelop-from
Добавлено: 2012-05-17 13:45:21
orfan
Поступил следующим образом:
Код: Выделить всё
Begin rewirte
www@domain\.com "${if eq {${address:$h_from:}}{user@site.com}{user@site.com}fail}" sF
Заменить return-path; envelop-from
Добавлено: 2016-08-12 15:27:27
Nick_mad
Здравствуйте.
Столкнулся с точно такой же проблемой.
У меня веб интерфейс почты на roundcube естественно он шлет все письма от пользователя от которого работает пхп.
Bounce письма соответственно не возвращаются, ну и все вытекающие отсюда последствия.
И я до путя не пойму это мне пхп ковырять нужно или exim?
Заменить return-path; envelop-from
Добавлено: 2016-08-12 18:38:01
xM
Nick_mad писал(а): У меня веб интерфейс почты на roundcube естественно он шлет все письма от пользователя от которого работает пхп.
Что-то у вас неправильно настроено, значит.
Roundcube успешно отправляет от имени аутентифицированного пользователя.
Заменить return-path; envelop-from
Добавлено: 2016-08-15 9:51:08
Nick_mad
Вот и хотелось бы понять что именно, exim или php?
Заменить return-path; envelop-from
Добавлено: 2016-08-15 10:24:26
xM
Nick_mad писал(а): Вот и хотелось бы понять что именно, exim или php?
Roundcube
Заменить return-path; envelop-from
Добавлено: 2016-08-15 10:58:26
Nick_mad
Я думаю сам Roundcube не причем потому что вообще использование функции mail в php приводит к отправке письма с return-path и sender пользователя от которого работает php.
Например, есть сайт site.com php настроен в режиме fcgid и работает от пользователя в системе user.
Есть электронный адрес
info@site.com. если отправить письмо функцией mail то оно уйдет от пользователя user@домен_который_прописан_в_exim_как_primary_hostname.
Заменить return-path; envelop-from
Добавлено: 2016-08-15 16:27:39
xM
Nick_mad писал(а): Я думаю сам Roundcube не причем потому что вообще использование функции mail в php приводит к отправке письма с return-path и sender пользователя от которого работает php.
Поразительно, но у меня ничего подобного не происходит. Письмо отправляется от имени отправителя, а все хедеры корректны.
ЧЯДНТ?
Потом, с чего вы решили, что Roundcube использует штатный mail ? Я вот, хотя и исходники в этой части не смотрел, думаю что там своя реализация клиентов SMTP и IMAP.
Заменить return-path; envelop-from
Добавлено: 2016-08-15 17:14:53
Nick_mad
Ну я просто наблюдаю идентичную картину при отправке функцией 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.
И я не могу понять как это сделать.
Заменить return-path; envelop-from
Добавлено: 2016-08-15 19:04:08
xM
Nick_mad писал(а): Беглый прогон по конфигурационному файлу подтвердил догадку (If left blank, the PHP mail() function is used).
Ну так вам там английским по-белому написано. Пропишите аутентификацию и серверы и будет всё отправляться от того, кого надо, а не от PHP mail().
Проблема решена.
Заменить return-path; envelop-from
Добавлено: 2016-08-16 10:17:01
Nick_mad
Ну, понятно с 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 с тем же параметром ничего не происходит.
Заменить return-path; envelop-from
Добавлено: 2016-08-16 10:58:20
xM
Nick_mad писал(а):попробуем разобраться почему PHP mail() некоректно работает
Это вам надо в другую часть форума, полагаю.
Заменить return-path; envelop-from
Добавлено: 2016-08-23 7:33:20
Alex Keda
Шоп спам не рассылали, так сделано
Заменить return-path; envelop-from
Добавлено: 2016-08-23 9:10:15
Nick_mad
Ну это, как минимум, неэффективный способ защиты. А с другой стороны как быть легитимным пользователям?
Заменить return-path; envelop-from
Добавлено: 2016-08-23 11:19:25
xM
Nick_mad писал(а): Ну это, как минимум, неэффективный способ защиты. А с другой стороны как быть легитимным пользователям?
Проблема (если вы считаете это проблемой) решается добавлением в заголовки PHP mail() корректно сформированных полей
return-path и
envelop-from. При их наличии перезаписи на дефолтные не будет.
Заменить return-path; envelop-from
Добавлено: 2016-08-23 11:53:21
Nick_mad
Давайте сосредоточимся на return-path, так как, на него приходят bounce и соответственно я не могу обрабатывать ошибки отправки почты.
Если Вы имеете ввиду, что я могу установить какие хотите заголовки четвертым параметром функции, PHP mail()
Например
То, вероятно, Вы ошибаетесь, так как, Return-Path - это заголовок обработки, который совершенно реально генерирует сам sendmail (exim) при пересылке письма. При чем в отличие от Received: from **** он его не дописывает, а переписывает. Как раз во избежание подделки адреса отправителя.
Для формирования правильного 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
С командной строки у меня сервер прекрасно отправляет и подменяет на правильные return-path с php я перепробовал все возможные настройки в php.ini но не помогло.
Пока ищу дальше.
Заменить return-path; envelop-from
Добавлено: 2016-08-23 15:01:01
Nick_mad
А вот и разгадка
# 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
а у меня в trusted_users не был указан пользователь от которого работал php.
После добавления пользователя от которого работает php в trusted_users все стало прекрасно работать.
Всем спасибо.
Заменить return-path; envelop-from
Добавлено: 2016-08-23 19:21:10
xM
Источник цитаты То, вероятно, Вы ошибаетесь, так как, Return-Path - это заголовок обработки, который совершенно реально генерирует сам sendmail (exim) при пересылке письма.
Не ошибаюсь. Вот такая строка вполне себе работала:
В
$headers дописываете нужные заголовки.
Впрочем, вы и сами ключ -f нашли.
UPD. Тонкий момент - поля хедеров надо не забывать разбивать через
\r\n