Intereting Posts
вставить массив в таблицу, используя для цикла Получение двух переменных в URL-адресе с помощью htaccess Лучшие рекомендации: какой лучший способ для создания верхних и нижних колонтитулов? Удаление части пути в php Возможно ли запустить Coldfusion & PHP на одном сервере и на веб-сайте? Получить первый день недели в PHP? Перевод Gettext или базы данных Доступ к переменным из родительской области в анонимной функции PHP Доступ к конфигурации модуля в Zend Framework 2 Обновление таблицы соединений с новыми значениями Отображать изображения по очереди со следующей и предыдущей функциональностью Как проверить, существует ли ключ в Couchbase? Определите ближайший гексаговый цвет к списку существующих шестнадцатеричных значений Как избавиться от исключения Unipot SoapFault: выглядит так, как будто у нас нет XML-документа в … "error Что такое СОЛЬ и как его использовать?

Отправка писем BCC с использованием SMTP-сервера?

Некоторое время я это заметил на некоторых моих кодах:

/** * Add a BCC. * * Note that according to the conventions of the SMTP protocol all * addresses, including BCC addresses, are included in every email as it * is sent over the Internet. The BCC addresses are stripped off blind * copy email only at the destination email server. * * @param string $email * @param string $name * @return object Email */ 

Я не помню, откуда я его получил ( возможный источник ), но это не должно иметь отношения к этому вопросу. В принципе, всякий раз, когда я пытаюсь отправить электронное письмо с помощью BCC через SMTP, адреса BCC не скрыты. Я прочитал весь RFC для протокола SMTP (пару лет назад), и я не думаю, что у меня что-то не хватает.

Странно то, что если я отправлю электронное письмо с BCC с помощью встроенной функции mail() все будет работать правильно, и я не знаю, почему, – я бы хотел отправить своего собственного отправителя электронной почты, но я не понимаю этого.

Может кто-то пролить свет на этот темный предмет?

Адреса BCC не удаляются на целевом сервере электронной почты. Это не так, как это работает.

Как работает SMTP

  • Отправитель отправит список команд RCPT TO на SMTP-сервер, по одному для каждого адреса электронной почты получателя, и эта команда не различает, является ли приемник обычным приемником типа To, CC или BCC.
  • Достаточно скоро после вызова команды, которая сообщает SMTP-серверу, кто является отправителем, кто является сервером, и все остальное, только тогда отправитель вызовет команду DATA , в которой будет содержаться содержимое электронной почты, состоящее из заголовков электронной почты и тело – тот, который получен почтовыми клиентами. Среди этих заголовков электронной почты обычно – адрес, адрес, адрес CC.
  • Адрес BCC не отображается получателю, просто потому, что он не распечатывается в команде DATA , а не потому, что целевой SMTP-сервер удалил их. Целевой SMTP-сервер будет просто ссылаться на RCPT TO для списка адресов электронной почты, которые должны получать содержимое электронной почты. На самом деле неважно, находится ли приемник в списке To, CC или BCC.
    Обновление (для уточнения): адреса электронной почты BCC должны быть указаны в списке команд RCPT TO , но заголовок BCC не следует печатать в команде DATA .

Цитируя часть RFC, которая, по моему мнению, имеет отношение к вашему делу:

Обратите внимание, что почтовые данные включают элементы заголовка заметки, такие как Date, Subject, To, Cc, From [2].

Отправка собственного отправителя электронной почты

Пару лет назад, я искренне думаю, довольно долго назад, чтобы предположить, что вы все еще запоминаете конец до конца RFC 821 . 🙂

Очень поздно, но принятый ответ по сути ошибочен.

Во-первых, SMTP не имеет ничего общего с BCC . SMTP в качестве протокола касается только пути возврата (запрос MAIL ), списка получателей (запрос RCPT ) и данных, которые необходимо передать (запрос DATA ). Если вы хотите отправить электронное письмо кому-либо через SMTP, вы должны указать свой адрес в запросе RCPT , периоде.

Содержимое электронной почты – DATA , эффективно – указано полностью отдельно, в RFC2822 . В том, как BCC следует обрабатывать, существует большая широта. Спецификация дает три способа обработки BCC , и только в одном из них BCC удаляется при подготовке электронной почты. Если я использую Thunderbird в качестве почтового клиента, например, и укажу его на SMTP-сервер, а затем посмотрю на сообщение в строке, то обнаруживаю, что BCC Thunderbird ушел (из SMTP DATA ) и SMTP-соединения вместо этого содержит стандартный запрос RCPT для адресного адреса Оконечного устройства. Итак, Thunderbird преобразует BCC в RCPT , но это не единственный способ сделать это.

Другое место для обработки BCC – в MTA – другими словами, на любом SMTP-сервере, на который указывает ваш почтовый клиент. Sendmail, например, ищет все строки To , Cc и Bcc в SMTP DATA , а затем строит список адресов из этих строк, а затем удаляет строку Bcc . Вы можете убедить Sendmail держать Bcc если хотите. Если sendmail не является назначенным MTA, он будет подключаться к другому MTA через SMTP и отправлять адреса получателей через RCPT . Другими словами, если sendmail является целевым MTA, и он получает Bcc , он будет лишать его, вопреки утверждению Amry.

В комментариях есть и путаница. Вы можете указать адреса RCPT для любого домена, а не только список адресов в одном домене. MTA должен искать записи MX для доменов назначения, чтобы определить, куда отправлять все. Заявления google.com и yahoo.com неверны.