Отправляя электронные письма BCC с помощью SMTP -сервера?

StackOverflow https://stackoverflow.com/questions/2750211

  •  02-10-2019
  •  | 
  •  

Вопрос

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

/**
 * 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
 */

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

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

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

Это было полезно?

Решение

Адреса BCC не сняты на сервере почтового почты назначения. Это не так, как это работает.

Как на самом деле работает SMTP

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

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

Обратите внимание, что почтовые данные включают в себя элементы заголовка памяти, такие как дата, субъект, к CC, от [2].

Разверните собственный отправитель электронной почты

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top