У меня есть Magento, использующий Sendmail и Wordpress, использующий PHPmailer для отправки почты, созданной веб-приложением. Иногда кто-то вводит свой адрес электронной почты неправильно, и почта (скажем, квитанция о покупке) будет возвратиться к пути возврата, указанному скриптом.
Я не хочу устанавливать обратный путь для каждого виртуального хоста, особенно потому, что он не без труда сделано. В идеале WP будет использовать адрес администратора блога, а Magento будет использовать одно из многочисленных указанных полей электронной почты, но по умолчанию они используют имя пользователя @ machinename (в моем случае имя пользователя - это системный пользователь, а имя машины - полное доменное имя, но это не то же самое, что фактическое полное доменное имя vhost). В результате возвращенная почта возвращается на сервер, и, поскольку сервер используется только для исходящего SMTP, сообщения остаются там недоставленными и, что еще хуже, непрочитанными.
Я Postfix 2.6.6 на CentOS 6.3, возможно ли глобально принудительно указать конкретный путь возврата для всех сообщений, отправленных через PHP на сервере?
Решение найдено! С помощью ответов @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 для перенаправления каждого сообщения с уведомлением о недоставке соответствующему человеку-получателю на domainA, domainB, domainC и так далее.
Это лучшее решение, которое я мог придумать. Если у вас есть сотни доменов, управлять этим будет сложно, но в моем случае это нормально.
надеюсь, это поможет
Похоже, все, что вам нужно сделать, это установить Sender
свойство для вашего phpmailer. Описание в официальная документация Говорит, что $Sender
это общедоступное свойство без значения по умолчанию, и оно ...
Устанавливает адрес электронной почты отправителя (обратный путь) сообщения. Если не пусто, будет отправлено через -f в sendmail или как «MAIL FROM» в режиме smtp.
Что-то вроде этого?
$phpmailer->Sender = "desirablemailbox@desirabledomain.com";
В качестве альтернативы, если вам нужен общий путь возврата для всех ваших скриптов, вы можете либо изменить сам класс phpmailer, либо установить для отправителя по умолчанию значение не быть пустым или создать класс-оболочку, который устанавливает для него это значение.
Установить глобальное значение для PHP невозможно, потому что ничто не мешает вам открыть сокет для удаленного SMTP-сервера и напрямую отправить электронное письмо. И вам ничего не мешает подключиться к localhost:25
и отправка почты с другим обратным путем, отличным от того, который вы пытаетесь использовать. Или вызывая sendmail
двоичный напрямую. Есть много способов отправки электронной почты (phpmailer - лишь один из них), и глобальная настройка просто невозможна. Лучшее, что вы можете сделать, это убедиться, что вы правильно настроили тот способ, которым вы пользуетесь.