Я работаю над своего рода сервером рассылки и использую функцию PHP mail (). Я пытаюсь найти способ, чтобы получатель мог видеть несколько адресов в поле To: без фактической отправки PHP по этим адресам. Например:
список адресов электронной почты «[email protected]» следует пересылать по адресам «[email protected]» и «[email protected]»
электронное письмо от физического лица отправляется на «[email protected]» и «[email protected]»
сервер списков получает электронное письмо по адресу «[email protected]» и хочет переслать его соответствующим образом
когда Джон и Мэри получают переадресованное письмо в своих почтовых ящиках, в поле «Кому:» должно отображаться, что оно было отправлено на «[email protected]» и «[email protected]»
Поэтому мой вопрос заключается в том, как я могу заставить почтовую функцию PHP отправлять электронные письма ТОЛЬКО на «[email protected]» и «[email protected]», но НЕ на «[email protected]», при этом показывая «jack» @ agency.org «в поле» Кому: «в электронном письме, которое получают Джон и Мэри?
Могу ли я установить какой-либо заголовок, который будет показывать адрес в поле «Кому:», но не будет отправлять его по этому адресу?
РЕДАКТИРОВАТЬ: существующий код будет что-то вроде этого:
$to = "To: [email protected], [email protected]";
$from = "From: [email protected]";
$new_headers = $to."\r\n".$from."\r\n"."Bcc: [email protected], [email protected]"."\r\n";
mail("","Subject Here","message here", $new_headers);
Это работает и пересылает его Джону и Мэри соответственно, но «[email protected]» получит две копии электронного письма (одну от оригинального отправителя и одну от переадресованной копии).
Насколько мне известно, нет никакого способа не отправить сообщение кому-либо из перечисленных в качестве получателя, если вы не используете что-то вроде постфикс.
Однако вы должны быть в состоянии сделать что-то вроде изменения /etc/mail/address.resolve
файл, или если это не работает или не существует, другой вариант может быть изменить фактическое /etc/hosts
файл, чтобы он думал example.org
указывает на тот же IP-адрес, что и localhost
:
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.0.1 localhost example.org
Я нашел решение. Вместо использования PHP mail()
функция, я использовал exec()
функция для вызова sendmail
из командной строки. С sendmail вы можете указать разные заголовки: и envelope-to :. Таким образом, код будет выглядеть примерно так:
$message = "To: [email protected], [email protected]\r\nFrom: [email protected]\r\nSubject: subject line\r\n\r\n message content here";
exec("/usr/bin/sendmail [email protected] [email protected] <<< ".escapeshellarg($message));
Тогда он на самом деле доставляется только по адресам «[email protected]» и «[email protected]», но им кажется, что он был отправлен по адресам «[email protected]» и «[email protected]».