SMTP: Чи можна когось переглядати, не надсилаючи оригінал?


24

Я насправді почав думати про це, тому що забув надіслати комусь на адресу електронної пошти, який я повинен був надіслати, і хотів, щоб він отримав копію без подвійного надсилання всім іншим. Я в кінцевому підсумку просто переслав його йому, але мені все одно цікаво.

Де списки CC та BCC обробляються в SMTP? Чи потрібно вам керувати SMTP-сервером, чи це можна зробити клієнтом?

Дякую!

email  smtp 

5
чому це знижується? Адже це цікаве запитання ...

5
@Achilles - подробиці того, чи можливо це можливо, є АБСОЛЮТНО питанням програмування IMHO. Це визначено в RFC 2821 і 2822. Наприкінці дня всі поштові клієнти там запрограмовані відповідно до цих визначень, і кожен розробник тут, можливо, в якийсь момент повинен заглибитися в SMTP. Я, звичайно, маю.

3
БУДЬ ласка, припиніть голосування, щоб закрити це, оскільки "належить до SuperUser". Тільки тому, що ОП каже, що саме дії надсилання електронного листа змусили його замислитися над проблемою, але це не робить актуального питання "не пов'язаним з програмуванням". Якби у мене виникло питання щодо впровадження http, яке виникло у мене, коли я натиснув на веб-посилання, чи це було б "не пов'язано з програмуванням"? №

Відповіді:


17

Якщо коротко - так, це можливо, якщо ви можете підключитися безпосередньо до SMTP-сервера одержувачів. З причин, які Rup окреслює у своїй відповіді, це може бути не особливо практично, і якщо ви знаходитесь в мережі за брандмауером, ви взагалі не зможете встановити з'єднання з віддаленим сервером на порту TCP 25.

Якщо припустити, що це не стосується вас, то ось деталь:

Коли ви (як поштовий клієнт) підключаєтесь до поштового сервера одержувача, усі, про які піклується сервер (для цілей доставки), є одержувачами, зазначеними в RCPT TO:. Див. RFC2821 - Простий протокол передачі пошти . Він не відрізняє тип одержувача (до:, 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.

Однак, оскільки ми ніколи фактично не підключалися до поштових серверів останніх двох, вони насправді не отримують електронну пошту вдруге. Оскільки ми не можемо змінити пошти, які вже були відправлені їм раніше, вони ніколи не помітять, що ми додали ще одного одержувача комп’ютера.


4

Що трапляється, так і є

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

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

На практиці, однак, це набагато простіше надіслати всім. Щоб зробити це ефективно, вам потрібно буде змінити клієнта електронної пошти та локального SMTP-сервера, щоб підтримувати підроблений список одержувачів або список не виключення надсилань до виключень, який він обробляє під час розширення одержувача.


2

Ця проблема фактично вирішується існуючою незавершеною роботою IETF: Косметична копія вуглецю . На жаль, я не знаю жодного клієнта електронної пошти, який насправді реалізує CCC, оскільки проект вважається безглуздим жартом до Дня дурня.

Якщо говорити серйозно, те, що ви запитуєте, можливо, головним чином тому, що вміст електронної пошти насправді не впливає, кому надсилається пошта на рівні SMTP. Клієнти електронної пошти пишуться для того, щоб надсилати пошту всім у полях To, CC та BCC, але вони не зобов’язані це робити за будь-яким стандартом.

Оновлено: Для точності під час надсилання пошти на SMTP-сервер відправник використовує команду RCPT, щоб вказати, на які адреси електронної пошти слід надіслати повідомлення. Потім він надсилає вміст пошти за допомогою команди DATA. Сервер SMTP не повинен дивитися на вміст. Повинно бути можливим додати одного одержувача до рядка заголовка CC повідомлення та попросити сервер SMPT доставити його лише на одну адресу.


0

Якщо я правильно це розумію, те, що ви намагаєтеся зробити, - це надіслати повідомлення вдруге, включаючи оригінальних одержувачів у заголовках To: та CC:, але лише це повідомлення отримано деяким додатковим одержувачем. Як зазначалося в інших відповідях, це може бути досягнуто вашим клієнтом електронної пошти, спілкуючись із SMTP-сервером та вказавши лише одного одержувача, але включаючи заголовки To: та Cc: оригіналу електронної пошти.

У клієнта Apple Mail є функціонал, який може це ефективно зробити. Функцію перенаправлення можна знайти в меню Повідомлення або контекстному меню для повідомлення. Ця функція розрахована на те, щоб прозоро переслати електронний лист комусь іншому без додавання Fwd: до теми теми та підвищення рівня цитати, але також може бути використана для повідомлень, які ви надіслали раніше. Він зберігає поля To / Cc / From вихідного повідомлення однаковими і додає нових одержувачів у заголовки Resent-To та Resent-CC. Єдиними одержувачами повторного повідомлення будуть ті, кого ви вказали під час його складання. Це не зовсім очевидно, як це працює, коли ви користуєтесь функцією, тому обов'язково попередньо протестуйте її.


-1

Це може бути дозволено / заборонено на основі клієнта за клієнтом, але ви можете спробувати помістити щось підроблене (наприклад, "; нерозголошені одержувачі; Тоді повторення процесу зробить його схожим на те саме повідомлення електронної пошти, якщо ніхто не пильно стежить за тимчасовими позначками та потоковими повідомленнями тощо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.