Как уже говорили другие, вы должны использовать uuid3 или uuid5. (Какой, на самом деле, не имеет значения, если вы не заботитесь о криптографии. Я буду использовать uuid3 в этом примере.) Теперь вам нужно определиться с пространством имен.
DNS не имеет смысла, поскольку он принимает только полные доменные имена, которые, безусловно, не являются адресом электронной почты. X.500 теоретически можно использовать, если вы находитесь в LDAP, но это все же более сложно, чем необходимо. Насколько мне известно, у дерева OID нет дуги для электронной почты - и это правильно, поскольку они пытаются создать постоянный реестр, а адрес электронной почты на самом деле не является постоянным.
Итак, это оставляет URI. Являются ли адреса электронной почты URI? К счастью, да. [Формально это только для URL-адресов, но, к счастью, адреса электронной почты тоже являются URL-адресами.] Синтаксис URI описан в этой статье Википедии . Таким образом, вы должны найти схему, а затем вписать в нее свои данные. IANA предоставляет вам список схем , где вы можете найти «mailto» как «Адрес электронной почты», «Постоянную» схему. Похоже, именно то, что мы хотим.
Вы также получаете ссылку на RFC, в данном случае RFC 6068 , которая говорит вам, как именно вы должны отформатировать адрес электронной почты. Возможная проблема заключается в том, что вы говорите о «идентификаторе электронной почты», который может означать только «локальную часть» («имя пользователя», как его обычно называют). Конечно, это не сработает, поскольку не является уникальным во всем мире.
[Единственный способ заставить его работать, это как-то ограничить пространство имен для вашего почтового сервера. Вы можете делать это с MX-записями и DNS, но гораздо проще просто зашифровать домен во весь адрес электронной почты.]
def email_uuid(email_id, domain='your.domain.example.com'):
from uuid import uuid3, NAMESPACE_URL
if '@' not in email_id:
email_id += '@' + domain
return uuid3(NAMESPACE_URL, 'mailto:' + email_id)