Обнаружение переадресованной электронной почты - PullRequest
13 голосов
/ 19 января 2011

Есть ли способ обнаружить (используя заголовки RFC 2822), что электронная почта является перенаправленной электронной почтой?

Ответы [ 2 ]

18 голосов
/ 20 января 2011

Есть две вещи, которые обычно называются «пересылка».

Когда вы настраиваете автоматическую переадресацию на уровне учетной записи на другой адрес электронной почты, ваша почтовая система обычно вводит дополнительный заголовок, чтобы позволить ей обнаруживать и прерывать почтовые петли. К сожалению, название этого заголовка никогда не было стандартизировано. Некоторые используют Delivered-To, некоторые используют X-Loop, некоторые используют X-Original-To, некоторые используют X-заголовок, принадлежащий их почтовому программному обеспечению. Но нет единственного поля заголовка, которое присутствует во всех случаях.

Когда вы вручную пересылаете сообщение, нажимая кнопку «Переслать» в почтовой программе и вводя адрес электронной почты получателя и некоторый описательный текст, генерируется новое сообщение с новым заголовком Message-ID. Набор заголовков в этом сообщении будет неотличим от обычного ответа - In-Reply-To и References установлены точно так же. Единственное отличие состоит в том, что заголовок Subject будет обычно начинаться с "Fwd:" или заканчиваться на "(fwd)". («Обычно», поскольку некоторые клиенты форматируют его как «[Fwd: <original subject>]» с квадратными скобками вокруг новой темы, некоторые клиенты переводят префикс Fwd: на свой язык, а некоторые пользователи вручную редактируют Subject, прежде чем нажать «отправить»). .)

Итак, есть хорошие подсказки , что сообщение пересылается, но нет жестких и быстрых правил.

3 голосов
/ 19 января 2011

При чтении spec , CTRL + F для "forward" дает следующие поля заголовка:

resent-date     =       "Resent-Date:" date-time CRLF  
resent-from     =       "Resent-From:" mailbox-list CRLF  
resent-sender   =       "Resent-Sender:" mailbox CRLF  
resent-to       =       "Resent-To:" address-list CRLF  
resent-cc       =       "Resent-Cc:" address-list CRLF  
resent-bcc      =       "Resent-Bcc:" (address-list / [CFWS]) CRLF
resent-msg-id   =       "Resent-Message-ID:" msg-id CRLF

Хотя я не уверен, использует ли это основное почтовое программное обеспечение.

РЕДАКТИРОВАТЬ

Прочтите спецификацию слишком быстро, есть также следующее примечание:

Примечание: Повторное введение сообщения в транспортную системуи использование повторно отправленных полей отличается от «пересылки».«Пересылка» имеет два значения: Одно из значений пересылки состоит в том, что пользователь может сказать программе чтения почты, чтобы она пересылала копию сообщения другому человеку, делая пересылаемое сообщение телом нового сообщения.Пересылаемое сообщение в этом смысле, по-видимому, не пришло от исходного отправителя, а является совершенно новым сообщением от отправителя сообщения.С другой стороны, переадресация также используется для обозначения того, когда почтовая транспортная программа получает сообщение и пересылает его в другое место назначения для окончательной доставки.Повторно отправленные поля заголовка не предназначены для использования с любым типом пересылки.

Других уведомлений о «пересылке» нет, поэтому нет никаких полей заголовка, которые можно использовать для обнаружения переадресации, кромеsubject = "Fwd: <msg>" конвенция.

...