如何将电子邮件地址映射到SOA RNAME字段?

时间:2012-08-20 20:45:50

标签: python dns dnspython

是否存在将电子邮件地址映射到SOA记录的RNAME字段(及其反向)的现有/标准算法?我正在使用dnspython包但我在源代码树中没有看到任何东西来处理这个问题。我遇到了一个有句号''的边缘情况。在需要转义的用户名中,想知道是否还有其他边缘情况我不知道。 RFC 1035只是声明:

  

A<域名>它指定负责此区域的人员的邮箱。

RFC 1183中的简短提及外,没有任何更新1035的RFC扩展到RNAME字段。

1 个答案:

答案 0 :(得分:2)

以下是我使用dnspython提出的内容:

from dns.name import from_text


def email_to_rname(email):
    """Convert standard email address into RNAME field for SOA record.

    >>> email_to_rname('johndoe@example.com')
    <DNS name johndoe.example.com.>
    >>> email_to_rname('john.doe@example.com')
    <DNS name john\.doe.example.com.>
    >>> print email_to_rname('johndoe@example.com')
    johndoe.example.com.
    >>> print email_to_rname('john.doe@example.com')
    john\.doe.example.com.

    """
    username, domain = email.split('@', 1)
    username = username.replace('.', '\\.')  # escape . in username
    return from_text('.'.join((username, domain)))


def rname_to_email(rname):
    """Convert SOA record RNAME field into standard email address.

    >>> rname_to_email(from_text('johndoe.example.com.'))
    'johndoe@example.com'
    >>> rname_to_email(from_text('john\\.doe.example.com.'))
    'john.doe@example.com'
    >>> rname_to_email(email_to_rname('johndoe@example.com'))
    'johndoe@example.com'
    >>> rname_to_email(email_to_rname('john.doe@example.com'))
    'john.doe@example.com'

    """
    labels = list(rname)
    username, domain = labels[0], '.'.join(labels[1:]).rstrip('.')
    username = username.replace('\\.', '.')  # unescape . in username
    return '@'.join((username, domain))