Есть письмо, отправлется из скрипта через SMTP гуглопочты. В письме есть заголовок Bcc. Весь мой предыдущий опыт, RFC 2822, да и само название заголовка, говорят о том, что получатель не должен знать кому отправлялась копия. Однако же заголовок добирается до получателя в целости и сохранности. Возникает вопрос — с какого перепугу и как с этим бороться!?
Конечно. проблему можно было бы решить отказавшись от smtp Gmail, но в силу ряда причин этот вариант пока не рассматривается. Может быть нужно что-то подкрутить в настройках гугло-аккаунта? Или есть еще какая магия, которая заставит гуглопочту уважать требования RFC?
При передаче по SMTP заголовка BCC быть не должно. Адреса, на которые вы хотите послать «слепую» копию должны быть в SMTP-конверте (т.е. присутствовать в командах RCPT TO:) но отсутствовать в RFC 822 заголовках. Заголовок Bcc используется в почтовых программах до передачи письма по SMTP, по SMTP его передавать не надо.
Хм… т.е. передвая письмо на доставку SMTP-серверу почтовый клиент должен сам подготовить нужное количество писем (сообразно количеству получателей из Bcc)? И так-же должен поступать и скрипт? Занятно. пойду читать до наступления просветления. Спасибо за подсказку!
Нет, почтовый клиент готовит одно письмо и список получателей. Сначала клиент авторизуется (при необходимости) и передает на сервер сведения об отправителе (SMTP-команда MAIL FROM:) и о получателях (SMTP-команда RCPT TO:, дается на каждого получателя письма, т.о. можно указать несколько получателей для одного письма). Далее дается команда DATA и передается письмо вместе со всеми заголовками. То, что вы указываете в To:, Cc: и Bcc: серверу абсолютно все равно, он не разбирает эти заголовки, а производит доставку по адресам указанным в RCPT To. Т.е. с точки зрения SMTP нет никакой разницы в получателях из To CC и BCC, разница исключительно в заголовках. Получатели указываются в поле To, получатели копии в Cc, а получатели слепой копии нигде. Поле Bcc это вспомогательное поле, на удаленный сервер оно не передается, оно нужно, например, чтобы полный список получателей хранить в «отправленных» в почтовой программе или в черновиках.