2013-02-15 3 views
7

Как вычислить уникальную строку идентификатора для каждого письма в учетной записи IMAP?Получение уникального идентификатора электронной почты с IMAP в PHP

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

Не все письма имеют message_id, и я не вижу, какая разница между message_id и uid - может ли кто-нибудь мне сказать?

Мне кажется, что message_id не изменяется при использовании imap_append - может кто-нибудь подтвердить это?

При создании уникального строкового идентификатора для каждого письма есть много других вариантов, чем просто идентификатор сообщения, название FX электронной почты и дата, но я не знаю, что выбрать: http://www.php.net/manual/en/function.imap-headerinfo.php

+0

Проверка против ('From',' Date' и 'Size') может дать уникальную комбинацию. К сожалению, очень немногие, кто работал с PHP-IMAP, не обновляют примеры в руководствах. – SparKot

+0

Does 'imap_uid()' return 'message_id'? Что он возвращает для писем без 'message_id'? – SparKot

+0

Я думаю, что изменения uid на некоторых операциях .... но я не уверен ... –

ответ

2

по мне уникальный идентификатор может генерироваться следующим образом:

ключ: время эпохальное почты (от поля даты)

Но в то же время пользователь может получить несколько писем.

ключ: время эпохи почты + MailSize

На конкретное время приемника идентификатор может Получать Diferent письма одного и тот же размера

KEY: время эпохи почты + MailSize + Recieveing ​​сервера IP (может получить от получаемого: поле)

В определенное время идентификатор приемника может получать разные письма одинакового размера от одного и того же ip также.

ключ: эпоха время почты + MailSize + Recieveing ​​IP-адрес сервера (может получить из полученного: поле) + md5sum почты.

Возможность дублирования для этого ключа очень очень низкая.

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

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

7

UID уникален в почтовом ящике, но не отображает между почтовыми ящиками, поэтому не подходит для сопоставления писем между почтовыми ящиками.

message_id предназначен для того, чтобы быть глобально уникальным для всех электронных писем и генерируется сервером отправки электронной почты. Если сервер настроен правильно, каждое отправленное сообщение будет иметь message_id, и это можно использовать для сопоставления электронной почты через почтовые ящики. Однако плохо сконфигурированные серверы не могут назначать message_id.В этом случае хэш-код senderaddress & udate всегда был для меня уникальным - если электронные письма поступали от одного и того же человека в тот же микросекунды, это будет одно и то же сообщение. Примечание. Использовать отправителя, а не от него, можно легко обмануть, чем отправителя.

Смежные вопросы