23

Я на самом деле начал думать об этом, потому что я забыл отправить кому-то письмо по электронной почте, которую я должен был отправить, и я хотел, чтобы он получил копию без двойной отправки всем остальным. Я просто отправил его ему, но мне все еще интересно.

Где обрабатываются списки CC и BCC в SMTP? Нужно ли управлять SMTP-сервером или это можно сделать на стороне клиента?

Спасибо!

5 ответов5

17

Короче говоря - да, это возможно, если вы можете подключиться непосредственно к SMTP-серверу получателя. По причинам, изложенным Рупом в своем ответе, это может быть не особенно практично, и если вы находитесь в сети за брандмауэром, вы, возможно, вообще не сможете установить соединение с удаленным сервером через TCP-порт 25.

Предполагая, что это не относится к вам, вот деталь:

Когда вы (как почтовый клиент) подключаетесь к почтовому серверу получателя, все, о чем заботится этот сервер (для целей доставки), - это получатели, указанные в RCPT TO: См. RFC2821 - Простой протокол пересылки почты. Он не различает тип получателя (to:, cc: или bcc:), он просто знает, что вы говорите «убедитесь, что получатель на вашем сервере получает это».

Однако, что касается действительного почтового клиента получателя, именно заголовки в сообщении говорят, кем были все получатели сообщения. См. RFC2822 - Формат интернет-сообщения.

Другими словами, заголовки TO:, CC: и BCC: существуют для почтового клиента, тогда как фактическое распределение обрабатывается во время SMTP-диалога с почтовыми серверами.

Таким образом, вы можете на самом деле поговорить с SMTP-сервером, который выглядит примерно так:

C:>telnet aspmx.l.google.com 25
220 mx.google.com ESMTP f70si17620845wej.110
HELO myserver.mydomain.co.uk
250 mx.google.com at your service
MAIL FROM: <test@mydomain.co.uk>
250 2.1.0 OK f70si17620845wej.110
RCPT TO: <user_i_missed_out@mydomain.co.uk>
250 2.1.5 OK f70si17620845wej.110
DATA
354  Go ahead f70si17620845wej.110
To: recipient_on_original@somewhere.com
cc: another_recipient_on_original@somewhere.com, user_i_missed_out@mydomain.co.uk
Subject: My email

Hi - this is a test
.
250 2.0.0 OK 1277401976 f70si17620845wej.110
QUIT
221 2.0.0 closing connection f70si17620845wej.110


Connection to host lost.

В user_i_missed_out@mydomain.co.uk получает копию электронного письма, в котором он указан в списке копий, а также оригинальный адресат recipient_on_original@somewhere.com account_on_original@somewhere.com и первоначальный получатель another_recipient_on_original@somewhere.com .

Однако, поскольку мы никогда не подключались к почтовым серверам последних двух, они фактически не получают письмо второй раз. И поскольку мы не можем изменить письма, которые уже были отправлены им, они никогда не заметят, что мы добавили другого получателя cc.

4

Что происходит

  1. Вы отправляете электронное письмо на локальный (или интернет-провайдер) SMTP-сервер
  2. Ваш локальный SMTP-сервер расширяет список получателей и определяет список серверов, с которыми ему нужно будет общаться для всех получателей. Он удаляет заголовок BCC из сообщения.
  3. Для каждого сервера он подключается и говорит: «Вот электронная почта для получателей X, Y: здесь заголовки и тело сообщения»

т. е. если вы можете внедрить письмо в 3, доставить непосредственно на домашний SMTP-сервер пропущенного пользователя CC, то вы можете доставить ему CC, не отправляя почту всем остальным. В частности, получатель BCC получит заголовки и текст сообщения, в которых они вообще не упоминаются (за исключением, возможно, заголовка X-Envelope-To).

В практическом плане, тем не менее, намного легче отправить всем. Чтобы сделать это эффективно, вам нужно изменить почтовый клиент и локальный SMTP-сервер, чтобы он поддерживал поддельный список получателей или список исключений для отправки, который он обрабатывает во время расширения получателей.

2

Эта проблема фактически решается существующей незавершенной работой IETF: Cosmetic Carbon Copy. К сожалению, я не знаю ни одного почтового клиента, который бы на самом деле внедрял CCC, так как черновик считается бессмысленной шуткой для Первоапрельского дня.

На самом деле, то, что вы спрашиваете, возможно, в основном потому, что содержание электронного письма фактически не влияет на то, кому письмо отправляется на уровне SMTP. Почтовые клиенты пишутся так, чтобы отправлять почту всем в поля «Кому», «CC» и «BCC», но они не обязаны делать это по какому-либо стандарту.

Обновлено: если быть точным, при отправке почты на SMTP-сервер отправитель использует команду RCPT, чтобы указать, на какие адреса электронной почты должно быть доставлено сообщение. Затем он отправляет содержимое письма с помощью команды DATA. SMTP-сервер не должен смотреть на контент. Должна быть возможность добавить одного получателя в строку заголовка CC сообщения и попросить SMPT-сервер доставить его только на этот один адрес.

0

Если я правильно понимаю, что вы пытаетесь сделать, это отправить сообщение во второй раз, включая первоначальных получателей в заголовках To: и CC:, но только это сообщение было получено некоторыми дополнительными получателями. Как уже отмечалось в других ответах, это может быть выполнено вашим почтовым клиентом, который связывается с SMTP-сервером и указывает только одного получателя, но включает заголовки To: и Cc: исходного письма.

Почтовый клиент Apple имеет функциональность, которая может эффективно это делать. Функция Redirect может быть найдена в меню Message или в контекстном меню сообщения. Эта функция предназначена для прозрачной пересылки электронной почты кому-либо без добавления Fwd: в строку темы и увеличения уровня цитаты, но ее также можно использовать в сообщениях, которые вы отправили ранее. Он сохраняет поля To/Cc/From исходного сообщения одинаковыми и добавляет новых получателей в заголовки Resent-To и Resent-CC. Единственными получателями повторно отправленного сообщения будут те, кого вы укажете при его составлении. Не совсем понятно, как это работает, когда вы используете эту функцию, поэтому обязательно проверьте ее заранее.

-1

Это может быть разрешено / не разрешено для каждого клиента, но вы можете попробовать поместить что-то фальшивое (например, «; нераскрытые получатели ;;») в Кому и поместить всех в BCC. Затем повторение процесса сделает его похожим на одно и то же электронное письмо, если никто не будет внимательно следить за отметками времени, потоками сообщений и тому подобным.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .