2009-07-29 5 views
4

안녕하세요. 어떻게 C# winforms에서 전자 메일의 유효성을 검사 할 수 있습니까?C# winforms 응용 프로그램의 전자 메일 확인

+3

유효성 검사 이메일 주소 형식을 사용하도록 보장? 전자 메일 주소가 존재 함을 확인합니까? 전자 메일이 배달되었거나 수신되었는지 확인하십시오. 이메일의 개념을 확인 하시겠습니까? 여기에 어떤 질문이 있습니까? – glenatron

+1

"진짜 질문이 아닙니다"라고 여러분! – Cerebrus

답변

2

This page 이메일 주소와 일치하는 좋은 정규 표현식이 있습니다.

이것은 공식적인 확인 일뿐입니다. 전자 메일 주소가 실제로 존재하는지 확인하려면 주소로 실제 전자 메일을 보내고 메일 서버의 응답을 확인해야합니다.

는 그리고이 작업이 성공하더라도 SMTP 서버가 잘못된받는 사람 주소를 무시하도록 구성 할 수 있습니다.

0

정규식을 사용하여 유효성을 검사 할 수 있습니다. 거기에 대해 부동 다양한 다른 사람이 있지만 같이 내가 사용했던보다 포괄적 인 것들, 아주 긴 here

9

당신은 이메일 주소의 유효성을 검사하는 정규 표현식을 사용할 수 있습니다 : 당신이 유효성을 검사 할 경우

RegEx reg=new RegEx(@"^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,6}$", RegexOptions.IgnoreCase); ///Object initialization for Regex 
if(reg.IsMatch("email string")) 
    //valid email 
+4

대소 문자를 구분하지 않는 경우에만 작동합니다. 'RegexOptions.IgnoreCase'를 포함하십시오 – Dinah

1

을 주소 형식, 당신은 아마 정규 표현식을 사용해야합니다. 거기에 수천 개의 예제가 있으므로 최선의 것을 찾아서 선택할 수 있습니다.

당신이 주소가 있는지 확인하려면

this article는 특정 코드 예제를 제공하지 않고,이 작업을 수행하는 방법에 대한 몇 가지 포인터를 제공합니다.

+0

PHP에서 C#과 아무런 관련이 없지만 실제로 원격 서버에 연결하는 방법을 설명하는 좋은 링크가 포함되어 있습니다. –

0

가장 좋은 방법은 '@'두으로 분할 별도로 사서함 부분과 도메인 부분을 확인하는 것입니다. 나는 reg-ex가 떠 다니는 것을 알고 있지만 이것들은 상당히 복잡해질 수 있습니다.

RFC2822 섹션 3.4는 유효한 이메일 주소를 완전히 정의합니다. addr-specdot-atom의 사양을 찾으십시오.

본질적으로 사서함 부분은 영숫자이거나!, #, $, %, &, ', *, +, -, /, =, ^, _ 중 하나의 문자열입니다. ,`, {, |,}, ~ 그리고 풀 스톱 '.' 도메인 부분은 비슷한 규칙을 따릅니다. 유연성을 감안할 때

는 가장 쉬운 방법은 단순히 하나가 않는 말을 문자열 체크 할 수있다 '@', 그들은 위의 설정에서하지 문자 가 포함 된 경우 다음 볼 별도로 사서함 및 도메인 부분을 확인합니다. 이것이 정규 표현식으로 수행되는지 또는 다른 방식으로 수행되는지는 사용자의 선택입니다. ,,

public bool IsValidEmailAddress (string email) 
{ 
    try 
    { 
     MailAddress ma = new MailAddress (email); 

     return true; 
    } 
    catch 
    { 
     return false; 
    } 
} 

부여는 (예를 들어, 비 라틴 문자) 일부 기술적으로 유효한 이메일 주소에 잘못된 반응을 발사합니다

7

가장 좋은 방법은 자신을 .NET이 유효성 검사 작업을 전달하는 것 하지만 어쨌든 그 주소로 보낼 수 없으므로 처음부터 필터링 할 수도 있습니다. "@

public static bool ValidEmail(string email) 
{ 
    var regex = new Regex(

^((([AZ] | \ D | [#의 \의 $ %의 & '* :

+0

IsValidEmailAddress는 TLD가 없어도 true를 반환합니다. 예 : myname @ mycompany가 성공합니다. –

+0

@ Mark Maslar : 예, 알고 있습니다. 유효한 이메일 주소입니다. 일반적으로 그 중 하나를받지는 못합니다. – User

+0

저는 admin @ localhost입니다! – Axarydax

0

나는 클라이언트 측에서 검증하는 jQuery 플러그인에서 정규식을 사용했습니다! + -/= \ \^{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_? {\ |} ~] | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF]) +) *) (| (\ X22)을 ((((\ (\ x0 \ x0 \ x0 \ x0 \ x0 \ x0 \ x0 \ x0a)) \ (\ x20 \ x23- \ x5b] | [\ x5d- \ x7e] | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF]) | (\ ([\ x01- \ X09 \ X0B \ x0c \ x0d- \ x7f] | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF]))))) *) (((\ x20 | \ x09) * (\ x0d \ x0a))?(([az] | \ d | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF]) | (([x] ] | \ d | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF]) ([az] | \ d | - |. | | ~ | [\ u00A0- \ uD7FF \ uF900- \ uFDCF ([az] | [\ u00A0- \ uFFEF]) ([az] | \ d | [\ u00A0- \ uDEFFF \ uF900- \ uFDCF \ uFDF0- \ uFFEF])) ([az] | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF]) ([az] | \ d | - |. ([az] | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF]))))). $ ", RegexOptions.Compiled)

return regex.IsMatch(email); 
} 
0

Chris' 기사를 사용하여, 나는 (신용 @ townco billandr, 빌 Andreozzi에 부여되는 DNSLookup 라이브러리를 함께 묶어 문자열에 대한 확장 메서드를 만들어 mpass.com 소스에서), 톰 얀센에 의해 최소 텔넷 구현 (http://www.corebvba.be) 내 자신의 정규식 이메일 주소의 유효성을 검사하는 방법 :

/// <summary> 
/// The regular expression to test the string against. 
/// </summary> 
private static readonly Regex validEmailRegex = new Regex(
    @"^(([^<>()[\]\\.,;:\[email protected]\""]+" 
    + @"(\.[^<>()[\]\\.,;:\[email protected]\""]+)*)|(\"".+\""))@" 
    + @"((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" 
    + @"\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+" 
    + @"[a-zA-Z]{2,}))$", 
    RegexOptions.Compiled); 

/// <summary> 
/// Determines whether the specified string is a valid email address. 
/// </summary> 
/// <param name="value"> 
/// The string to validate. 
/// </param> 
/// <returns> 
/// <c>true</c> if the specified string is a valid email address; 
/// otherwise, <c>false</c>. 
/// </returns> 
public static bool IsValidEmailAddress(this string value) 
{ 
    if (!validEmailRegex.IsMatch(value)) 
    { 
     return false; 
    } 

    var mailServer = new DNS().LookupMX(value.Split('@')[1]); 

    if (!mailServer.MoveNext()) 
    { 
     return false; 
    } 

    var telnet = new TelnetConnection(((DNS_MX_DATA)((DNS_WRAPPER)mailServer.Current).dnsData).pNameExchange, 25); 

    try 
    { 
     if (!TelnetCompare(telnet.Read(), "220")) 
     { 
      return false; 
     } 

     telnet.WriteLine("helo hi"); 
     if (!TelnetCompare(telnet.Read(), "250")) 
     { 
      return false; 
     } 

     telnet.WriteLine("mail from: " + value); 
     if (!TelnetCompare(telnet.Read(), "250")) 
     { 
      return false; 
     } 

     telnet.WriteLine("rcpt to: " + value); 
     if (!TelnetCompare(telnet.Read(), "250")) 
     { 
      return false; 
     } 
    } 
    finally 
    { 
     telnet.WriteLine("quit"); 
    } 

    return true; 
} 

/// <summary> 
/// Compares two strings for length and content from the Telnet stream. 
/// </summary> 
/// <param name="input">The input string.</param> 
/// <param name="response">The desired response.</param> 
/// <returns>true if the response is the first characters if the input, 
/// false otherwise</returns> 
private static bool TelnetCompare(string input, string response) 
{ 
    if (string.IsNullOrEmpty(input) || string.IsNullOrEmpty(response)) 
    { 
     return false; 
    } 

    if (input.Length < response.Length) 
    { 
     return false; 
    } 

    return string.CompareOrdinal(input.Substring(0, response.Length), response) == 0; 
} 
0
private void textBox1_Validating(object sender, CancelEventArgs e) 
{ 
System.Text.RegularExpressions.Regex rEMail = new System.Text.RegularExpressions.Regex(@"^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$"); 
if (textBox1.Text.Length > 0) 
{ 
if (!rEMail.IsMatch(textBox1.Text)) 
{ 
MessageBox.Show("E-Mail expected", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
textBox1.SelectAll(); 
e.Cancel = true; 
} 
} 
} 
0

정규식 등록 = 새 정규 표현식 (@ "\ + w ([ - +.] \ w +) @ \ w + ([-.] \ w +). \ w + ([-.] \ w +) * ");

정규식

 if (!reg.IsMatch(email.Text.Trim())) 


     { 
      errorProvider1.SetError(email, "Please provide a valid Email Address"); 

      email.Focus(); 

      return; 

     } 

에 대한 /// 개체 초기화 네임 스페이스 System.Text.RegularExpression에게

관련 문제