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


24

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

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

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

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


0

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

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


-1

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.