Установите ReturnPath глобально в Postfix
У меня есть Magento, использующий Sendmail и Wordpress, использующий PHPmailer для отправки почты, сгенерированной веб-приложением. Иногда кто-то неправильно вводит свой адрес электронной почты, и почта (скажем, квитанция о покупке) возвращается на путь возврата, указанный сценарием.
Я не хочу устанавливать путь возврата для каждого vhost, особенно потому, что это нелегко сделать. В идеале WP будет использовать адрес администратора блога, а Magento будет использовать одно из множества указанных полей электронной почты, но по умолчанию используется username@machinename (в моем случае username - системный пользователь, а machinename - полное доменное имя, но это не совпадает с фактическим полным хостом vhost). В результате полученная почта возвращается на сервер и, поскольку сервер используется только для исходящей SMTP, сообщения находятся там, недоставленные и, что еще хуже, непрочитанные.
Я являюсь Postfix 2.6.6 в CentOS 6.3, возможно ли глобально принудительно задавать определенный путь возврата для всех сообщений, отправляемых через сервер PHP на сервере?
2 ответа
Решение найдено! С помощью ответов @Dom & @Oguz на этот вопрос я создал записи в sender_canonical_maps
,
name
частью карты является каждое имя пользователя (которое соответствует части user @ в предыдущей настройке нежелательного user @ machinename, поскольку postfix по умолчанию не использует канонические карты отправителя) и maps to
часть - это адрес электронной почты, такой как bounces-userA@mymaindomain.com, bounces-userB@mymaindomain.com, bounces-userC@mymaindomain.com и т. д.
Важно, чтобы адрес bounces-user @ НЕ существовал как почтовый ящик в домене назначения. ЕСЛИ адрес существует, некоторые поставщики почтовых услуг (например, приложения Google) будут классифицировать электронную почту как спам, потому что она ЗНАЕТ, что вы не отправляли электронную почту (помните, что электронная почта была сгенерирована веб-приложением на каком-либо сервере), называя ее поддельным отказом, Техника, используемая спамерами. Поэтому вам нужно либо включить catchall для почтовой службы, которая работает с mymaindomain.com, либо создать псевдонимы для bounces-userA@mymaindomain.com, bounces-userB@mymaindomain.com, bounces-userC@mymaindomain.com, так далее
Обратите внимание, что я не создал отдельное сопоставление для каждого из доменов, таких как bounces@domainA.com, bounces@domainB.com, bounces@domainC.com. Это можно сделать только в том случае, если вы знаете, что bounces @ НЕ существует в каждом из доменов, И у них есть catchall ИЛИ псевдоним для bounces @. Делать это для каждого из доменов - это слишком много работы, поэтому следующим шагом было создание правила (или фильтра, на языке карт Google) в @ mymaindomain.com, чтобы перенаправить каждое сообщение-уведомление об отказе соответствующему человеку-получателю на домен A, домен B, домен C и пр.
Это лучшее решение, которое я мог придумать. Если у вас есть сотни доменов, управлять ими может быть сложно, но в моем случае это нормально.
надеюсь, это поможет
Похоже, все, что вам нужно сделать, это установить Sender
свойство для вашего phpmailer. Описание в официальной документации говорит, что $Sender
является публичной собственностью, без значения по умолчанию, и это...
Устанавливает отправитель электронной почты (Return-Path) сообщения. Если не пусто, будет отправлено через -f на sendmail или как "MAIL FROM" в режиме smtp.
Что-то вроде этого?
$phpmailer->Sender = "desirablemailbox@desirabledomain.com";
В качестве альтернативы, если вы хотите использовать общий путь возврата для всех ваших сценариев, вы можете либо изменить сам класс phpmailer и установить для Sender по умолчанию значение не пустым, либо создать себе класс-оболочку, который устанавливает его в это значение.
Установка глобального значения для PHP невозможна, потому что ничто не мешает вам открыть сокет на удаленном SMTP-сервере и отправить электронную почту напрямую. И ничто не мешает вам подключиться к localhost:25
и отправка письма с обратным путем, отличным от того, который вы пытаетесь использовать. Или, ссылаясь на sendmail
бинарный напрямую. Существует много способов отправки электронной почты (phpmailer - только один из них), и глобальные настройки просто неосуществимы. Лучшее, что вы можете сделать, - это убедиться, что вы правильно настроили тот способ, которым используете.