Код C # для подтверждения адреса электронной почты

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

df1['key'] = 0
df2['key'] = 0

df_cartesian = df1.merge(df2, how='outer')
399
задан Artemix 10 July 2013 в 15:48
поделиться

10 ответов

Что насчет этого?

bool IsValidEmail(string email)
{
    try {
        var addr = new System.Net.Mail.MailAddress(email);
        return addr.Address == email;
    }
    catch {
        return false;
    }
}

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

Обратите внимание, что адреса электронной почты более снисходительны, чем вы могли подумать. Все это совершенно допустимые формы:

  • cog @ wheel
  • «зубчатое колесо апельсина» @ example.com
  • 123 @$ .xyz

В большинстве случаев ложное «недействительное» намного хуже для ваших пользователей и будущих проверок, чем ложное «действительное». Вот статья , которая раньше была общепринятым ответом на этот вопрос (с тех пор этот ответ был удален). В нем гораздо больше деталей и некоторые другие идеи о том, как решить проблему.

Обеспечение проверки работоспособности по-прежнему является хорошей идеей для взаимодействия с пользователем. Предполагая, что адрес электронной почты действителен, вы можете искать известные домены верхнего уровня, проверять домен на наличие записи MX, проверять орфографические ошибки в общих доменных именах (gmail.cmo) и т. Д. Затем представить предупреждение, выдающее пользователю возможность сказать «да, мой почтовый сервер действительно позволяет использовать

710
ответ дан 22 November 2019 в 23:24
поделиться

Лично я бы сказал, что вам просто нужно убедиться, что там есть символ @, возможно, с. характер. Есть много регулярных выражений, которые можно использовать с разной степенью правильности, но я думаю, что большинство из них не учитывают действительные адреса электронной почты или пропускают недействительные. Если люди хотят ввести поддельный адрес электронной почты, они вставят поддельный. Если вам нужно убедиться, что адрес электронной почты является действительным и что человек контролирует этот адрес электронной почты, вам нужно будет отправить им электронное письмо со специальной закодированной ссылкой, чтобы они могли убедиться, что это действительно настоящий адрес.

29
ответ дан 22 November 2019 в 23:24
поделиться

Если честно, в производственном коде лучшее, что я делаю, - это проверяю наличие символа @ .

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

8
ответ дан 22 November 2019 в 23:24
поделиться

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

^[^@\s]+@[^@\s]+(\.[^@\s]+)+$

Это по крайней мере заставит вас поместить что-то вокруг отметки @ и поставить хотя бы нормально выглядящий домен.

6
ответ дан 22 November 2019 в 23:24
поделиться

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

Общие действия заключаются в следующем: 1. есть ли в адресе электронной почты часть имени домена? (индекс @> 0) 2. с помощью DNS-запроса спросите, есть ли в домене почтовый обменник 3. открыть tcp соединение с почтовым обменником 4. используя протокол smtp, откройте сообщение на сервер, используя адрес электронной почты в качестве получателя. 5. проанализировать ответ сервера. 6. закройте сообщение, если вы дошли до этого места, все в порядке.

Это, как вы можете себе представить, очень затратно по времени и полагается на smtp, но это действительно работает.

3
ответ дан 22 November 2019 в 23:24
поделиться

Проверка адреса электронной почты не так проста, как может показаться. На самом деле теоретически невозможно полностью проверить адрес электронной почты, используя только регулярное выражение.

Ознакомьтесь с моим сообщением в блоге об этом, чтобы обсудить эту тему и реализацию F # с использованием FParsec. [/ shameless_plug]

4
ответ дан 22 November 2019 в 23:24
поделиться
bool CheckIsValidEmail(string email)
{
    try {

      var mailAddress = new System.Net.Mail.MailAddress(email);
      var isValid = mailAddress.Address == email;

      return isValid;

    }
    catch {
      return false;
    }
}
0
ответ дан 22 November 2019 в 23:24
поделиться

Что, если Вы объединение несколько решений сделать идеальным кодом?

я стал лучшим 2 Решения, имеющие самые высокие Разряды и Обзоры, и объединил их для получения более точных Ответов. его Короткое, быстрое и восхитительное.

    public static bool isValidEmail(string email)
    {
        try
        {
            var addr = new System.Net.Mail.MailAddress(email);
            if (addr.Address == email)
            {
                string expression = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*"; 
                if (Regex.IsMatch(email, expression))
                {
                    if (Regex.Replace(email, expression, string.Empty).Length == 0) 
                        return true; 
                }
                return false;
            }
            return false; 
        }
        catch
        {
            return false;
        }  
    }
0
ответ дан 22 November 2019 в 23:24
поделиться

Как упомянуто во многих ответах, домен адресов электронной почты сложен. Я сильно препятствовал бы использованию regex в этом случае. Те, кто соответствует (большинство) случаям, чрезвычайно сложны, чтобы читать и для этого поддержать. Кроме того, тихие испытывают затруднения при поддержке всех случаев и являются медленными.

Microsoft EmailAddress класс помогает немного в этом отношении, но не прекрасен также, спорил бы я. Для проекта с открытым исходным кодом я дал его, пробуют несколько лет назад, при помощи специализированного EmailParser .

, Который используется в [EmailAddress] https://github.com/Qowaiv/Qowaiv/blob/master/src/Qowaiv/EmailAddress.cs).

При помощи этого подхода, Вы не только для проверки адресов электронной почты, но также и путем вычищения нескольких форматов отображаемых имен, при избавлении от mailto: - префикс, и нормализуя доменные литералы на основе IP-адресов, и печатая строчными литерами все (обратите внимание, что локальная часть официально чувствительна к регистру).

Ваше решение Сценария должно поддерживать (и упомянутый делает):

[TestCase(null)]
[TestCase("")]
[TestCase("..@test.com")]
[TestCase(".a@test.com")]
[TestCase("ab@sd@dd")]
[TestCase(".@s.dd")]
[TestCase("ab@988.120.150.10")]
[TestCase("ab@120.256.256.120")]
[TestCase("ab@120.25.1111.120")]
[TestCase("ab@[188.120.150.10")]
[TestCase("ab@188.120.150.10]")]
[TestCase("ab@[188.120.150.10].com")]
[TestCase("a@b.-de.cc")]
[TestCase("a@bde-.cc")]
[TestCase("a@bde.c-c")]
[TestCase("a@bde.cc.")]
[TestCase("ab@b+de.cc")]
[TestCase("a..b@bde.cc")]
[TestCase("_@bde.cc,")]
[TestCase("plainaddress")]
[TestCase("plain.address")]
[TestCase("@%^%#$@#$@#.com")]
[TestCase("@domain.com")]
[TestCase("Joe Smith <email@domain.com>")]
[TestCase("email.domain.com")]
[TestCase("email@domain@domain.com")]
[TestCase(".email@domain.com")]
[TestCase("email.@domain.com")]
[TestCase("email..email@domain.com")]
[TestCase("email@-domain.com")]
[TestCase("email@domain-.com")]
[TestCase("email@domain.com-")]
[TestCase("email@.domain.com")]
[TestCase("email@domain.com.")]
[TestCase("email@domain..com")]
[TestCase("email@111.222.333")]
[TestCase("email@111.222.333.256")]
[TestCase("email@[123.123.123.123")]
[TestCase("email@[123.123.123].123")]
[TestCase("email@123.123.123.123]")]
[TestCase("email@123.123.[123.123]")]
[TestCase("email@{leftbracket.com")]
[TestCase("email@rightbracket}.com")]
[TestCase("email@p|pe.com")]
[TestCase("isis@100%.nl")]
[TestCase("email@dollar$.com")]
[TestCase("email@r&d.com")]
[TestCase("email@#hash.com")]
[TestCase("email@wave~tilde.com")]
[TestCase("email@exclamation!mark.com")]
[TestCase("email@question?mark.com")]
[TestCase("email@obelix*asterisk.com")]
[TestCase("email@grave`accent.com")]
[TestCase("email@colon:colon.com")]
[TestCase("email@caret^xor.com")]
[TestCase("email@=qowaiv.com")]
[TestCase("email@plus+.com")]
[TestCase("email@domain.com>")]
[TestCase("email( (nested) )@plus.com")]
[TestCase("email)mirror(@plus.com")]
[TestCase("email@plus.com (not closed comment")]
[TestCase("email(with @ in comment)plus.com")]
[TestCase(@"""Joe Smith email@domain.com")]
[TestCase(@"""Joe Smith' email@domain.com")]
[TestCase(@"""Joe Smith""email@domain.com")]
[TestCase("email@mailto:domain.com")]
[TestCase("mailto:mailto:email@domain.com")]
[TestCase("Display Name <email@plus.com> (after name with display)")]
[TestCase("ReDoSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")]
public void IsInvalid(string email)
{
    Assert.IsFalse(EmailAddress.IsValid(email), email);
}

[TestCase("w@com")]
[TestCase("w.b.f@test.com")]
[TestCase("w.b.f@test.museum")]
[TestCase("a.a@test.com")]
[TestCase("ab@288.120.150.10.com")]
[TestCase("ab@188.120.150.10")]
[TestCase("ab@1.0.0.10")]
[TestCase("ab@120.25.254.120")]
[TestCase("ab@01.120.150.1")]
[TestCase("ab@88.120.150.021")]
[TestCase("ab@88.120.150.01")]
[TestCase("ab@[120.254.254.120]")]
[TestCase("local@2001:0db8:85a3:0000:0000:8a2e:0370:7334")]
[TestCase("local@[2001:0db8:85a3:0000:0000:8a2e:0370:7334]")]
[TestCase("2@bde.cc")]
[TestCase("-@bde.cc")]
[TestCase("a2@bde.cc")]
[TestCase("a-b@bde.cc")]
[TestCase("ab@b-de.cc")]
[TestCase("a+b@bde.cc")]
[TestCase("f.f.f@bde.cc")]
[TestCase("ab_c@bde.cc")]
[TestCase("_-_@bde.cc")]
[TestCase("k.haak@12move.nl")]
[TestCase("K.HAAK@12MOVE.NL")]
[TestCase("email@domain.com")]
[TestCase("email@domain")]
[TestCase("あいうえお@domain.com")]
[TestCase("local@あいうえお.com")]
[TestCase("firstname.lastname@domain.com")]
[TestCase("email@subdomain.domain.com")]
[TestCase("firstname+lastname@domain.com")]
[TestCase("email@123.123.123.123")]
[TestCase("email@[123.123.123.123]")]
[TestCase("1234567890@domain.com")]
[TestCase("a@domain.com")]
[TestCase("a.b.c.d@domain.com")]
[TestCase("aap.123.noot.mies@domain.com")]
[TestCase("1@domain.com")]
[TestCase("email@domain-one.com")]
[TestCase("_______@domain.com")]
[TestCase("email@domain.topleveldomain")]
[TestCase("email@domain.co.jp")]
[TestCase("firstname-lastname@domain.com")]
[TestCase("firstname-lastname@d.com")]
[TestCase("FIRSTNAME-LASTNAME@d--n.com")]
[TestCase("first-name-last-name@d-a-n.com")]
[TestCase("{local{name{{with{@leftbracket.com")]
[TestCase("}local}name}}with{@rightbracket.com")]
[TestCase("|local||name|with|@pipe.com")]
[TestCase("%local%%name%with%@percentage.com")]
[TestCase("$local$name$with$@dollar.com")]
[TestCase("&local&&name&with&$@amp.com")]
[TestCase("#local##name#with#@hash.com")]
[TestCase("~local~~name~with~@tilde.com")]
[TestCase("!local!!name!with!@exclamation.com")]
[TestCase("?local??name?with?@question.com")]
[TestCase("*local**name*with*@asterisk.com")]
[TestCase("`local``name`with`@grave-accent.com")]
[TestCase("^local^^name^with^@xor.com")]
[TestCase("=local==name=with=@equality.com")]
[TestCase("+local++name+with+@equality.com")]
[TestCase("Joe Smith <email@domain.com>")]
[TestCase("email@domain.com (joe Smith)")]
[TestCase(@"""Joe Smith"" email@domain.com")]
[TestCase(@"""Joe\\tSmith"" email@domain.com")]
[TestCase(@"""Joe\""Smith"" email@domain.com")]
[TestCase(@"Test |<gaaf <email@domain.com>")]
[TestCase("MailTo:casesensitve@domain.com")]
[TestCase("mailto:email@domain.com")]
[TestCase("Joe Smith <mailto:email@domain.com>")]
[TestCase("Joe Smith <mailto:email(with comment)@domain.com>")]
[TestCase(@"""With extra < within quotes"" Display Name<email@domain.com>")]
[TestCase("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")]
public void IsValid(string email)
{
    Assert.IsTrue(EmailAddress.IsValid(email), email);
}
0
ответ дан 22 November 2019 в 23:24
поделиться

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

public static bool ValidateEmail(string value, bool required, int minLength, int maxLength)
        {
           value = value.Trim();
           if (required == false && value == "") return true;
           if (required && value == "") return false;
           if (value.Length < minLength || value.Length > maxLength) return false;

           //Email must have at least one character before an @, and at least one character before the .
           int index = value.IndexOf('@');
           if (index < 1 || value.LastIndexOf('.') < index + 2) return false;
           return true;
        }
0
ответ дан 22 November 2019 в 23:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: