Какой формат принят синтаксическим анализатором System.Net.Mail.MailAddress? - PullRequest
7 голосов
/ 09 февраля 2009

Я работаю над приложением, которое использует System.Net.Mail.MailAddress и друзей для отправки электронных писем. Этот синтаксический анализатор реализует полный RFC5322 или подмножество или что? MSDN не очень готов к этой теме.

Любые намеки приветствуются.

Ответы [ 2 ]

4 голосов
/ 09 февраля 2009

Я написал небольшой фрагмент для проверки функции:

foreach (int i in Enumerable.Range(32,128-32))
{
    char c = (char)i;
    string addr = String.Format("par.t1{0}pa.r{0}t2@example.com", c);
    try
    {
        var mailAddr = new MailAddress(addr);
    }
    catch
    {
        Console.WriteLine("MailAddress failed '{0}' ({1}): {2}", c, i, addr);
    }
}

Со следующими результатами на 3.5 SP1:

MailAddress failed ' ' (32): par.t1 pa.r t2@example.com
MailAddress failed '"' (34): par.t1"pa.r"t2@example.com
MailAddress failed '(' (40): par.t1(pa.r(t2@example.com
MailAddress failed ')' (41): par.t1)pa.r)t2@example.com
MailAddress failed ',' (44): par.t1,pa.r,t2@example.com
MailAddress failed ':' (58): par.t1:pa.r:t2@example.com
MailAddress failed ';' (59): par.t1;pa.r;t2@example.com
MailAddress failed '<' (60): par.t1<pa.r<t2@example.com
MailAddress failed '>' (62): par.t1>pa.r>t2@example.com
MailAddress failed '@' (64): par.t1@pa.r@t2@example.com
MailAddress failed '[' (91): par.t1[pa.r[t2@example.com
MailAddress failed '\' (92): par.t1\pa.r\t2@example.com
MailAddress failed ']' (93): par.t1]pa.r]t2@example.com
MailAddress failed '⌂' (127): par.t1⌂pa.r⌂t2@example.com

Также кажется, что он не поддерживает локальные части "в кавычках", например "blah"@example.com.

Я не думаю, что валидатор может принять меньшее, прежде чем станет непригодным для использования.

3 голосов
/ 11 февраля 2010

В ветке обсуждения статьи Доминика Сэйерса Джерри О'Брайен сказал, что он прочитал контрольные тесты Dominic на соответствие RFC для класса System.Net.MailAddress:

System.Net.MailAddress - это только 59% соответствует спецификации RFC. В последующих комментариях отмечены конкретные случаи, когда это породило ложь положительные и ложные отрицания.

RFC чрезвычайно слабы в отношении того, что является действительным адресом электронной почты. Они допускают ряд необычных и непопулярных форматов. Итак, я думаю, что реальный вопрос в том, достаточно ли System.Net.MailAddress в большинстве реальных ситуаций?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...