SMTP: можно ли кому-то CC без отправки оригинала?

24

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

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

Благодарность!


источник
5
почему это понижается? В конце концов, это интересный вопрос ...
5
@Achilles - детали того, возможно ли это, АБСОЛЮТНО - программный вопрос ИМХО. Это определено в RFC 2821 и 2822. В конце концов, все почтовые клиенты там запрограммированы в соответствии с этими определениями, и каждый разработчик может в какой-то момент вникнуть в SMTP. У меня конечно есть.
3
ПОЖАЛУЙСТА, прекратите голосование, чтобы закрыть это как «принадлежит SuperUser». Просто потому, что ОП говорит, что именно отправка электронного письма заставила его задуматься о проблеме, этот вопрос не делает вопрос «не связанным с программированием». Если бы у меня возник вопрос по реализации http, когда я нажал на веб-ссылку, это было бы "не связано с программированием"? Нет.

Ответы:

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и исходного получателя копии 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-сервер доставить его только на этот один адрес.

Karmastan
источник
0

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

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

NReilingh
источник
-1

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

Дэвид
источник