2009-11-16 3 views
1

사용자가 목록에서 이름을 선택하여 다른 사용자에게 이메일을 보낼 수있는 앱이 있습니다. 또한 Cc에 전자 메일 주소 목록을 자유롭게 입력 할 수있는 텍스트 상자가 있습니다. 현재 Cc의 각 주소는 RFC2822와의 일치 여부를 확인하는 광범위한 정규 표현식에 의해 유효성이 검사됩니다. 정규식 각 주소를 확인하는 어떤 지점이, 또는 그냥 확인을 할 System.Net.Mail.MailAddress에 의존한다 - 주소는 다음정규식을 사용하여 SMTP 주소를 확인하는 데 필요한 모든 사항이 필요합니까?

MailMessage message = new MailMessage(/*...*/);  

//foreach address ... 
{ 
    try 
    { 
    MailAddress address = new MailAddress(strAddress); 
    message.CC.Add(address); 
    } 
    catch (FormatException fe) 
    { 
    // display error to user, don't sent the message 
    return false; 
    } 
} 
//send the message ... 

내 질문은 이것이다 ... System.Net.Mail.MailMessage.CC 수집, 이런 일에 추가 나를 위해서?

답변

2

System.Net.Mail을 사용하여 메일을 보내는 경우 MailAddress 클래스를 사용하면 클래스를 사용하여 메일을 보낼 수 있다는 것을 알았 기 때문에 유효성 검사를 수행하는 것이 좋습니다. 기술적으로 유효한 이메일 주소는 모두 허용되지 않습니다. 하지만 보낼 수없는 주소는 허용 할 수 없습니다.)

유효하지 않은 주소가 실제로 예외적 인 사례가 아니기 때문에 TryParse 메서드가 없으며 이런 식으로 흐름 제어를위한 예외를 사용하지 않아도 좋지는 않지만 근본적으로 우리가하는 것과 같은 방식입니다.

나는 무의미하게 잘못된 주소에 던져진 예외의 수를 줄이기 위해 기본 정신 테스트를 미리 추가했습니다.및 .이 합리적 위치에 있다는 것을 확인하십시오. 내 머리 꼭대기를 기억할 수는 없지만 너무 간단해서 정규식이 아닌 단지 String.IndexOf을 사용했다고 생각합니다. 그래, 그럴만 한 가치가 있다고 생각하지만, 너무 많은 시간을 낭비하지 마라.

+0

우수 감사합니다. 도움을 주셔서 감사합니다. 나는 예외를 던지기보다는 명백한 사례를 잡기 위해 간단한 정신 건강 체크의 소리를 좋아합니다. – noj

1

MailAddress에는 몇 가지 문제가있는 것 같습니다 (이 페이지 끝 부분의 설명 : http://msdn.microsoft.com/en-us/library/system.net.mail.mailaddress.aspx 참조). 차라리 Regex (예 : http://www.regular-expressions.info/email.html 참조)를 사용하면 필요할 경우 수정 작업을 수행 할 수 있으므로 MailAddress를 사용하는 경우 Microsoft에서 향후 프레임 워크 버전 또는 서비스 팩에 대한 주소 확인 버그를 수정해야합니다.

+0

비 ASCII 문자에 대한 정보 주셔서 감사합니다.하지만 System.Net.Mail을 사용하여 메일을 보내고 @pst가 지적한 것처럼 정규 표현식은 주소를 확장하지 않고 확장 할 수 있습니다 그것은 받아 들여질 것이다. – noj

1

키스. RFC2822에 대한 정규 표현식은 (이것에 대한 악명 높은 perl 정규 표현식을 확인하십시오. 나는 정규 표현식을 전혀 사용하지 않을 것입니다. 유일한 접근법이 이미 여러분을 구석에 넣었습니다.

MailAddress (또는 이미 존재하고 테스트를 거친 다른 라이브러리)에 응답할지 여부는 MailAddress의 제한 사항을 수락하는 것일뿐입니다 (충분할 수도 있음). MailAddress는 문서에서 RFC2822의 적합성을 주장하지 않지만, 받아들이는 부분을 암시합니다.

MailAddress에서 허용하는 전자 메일 주소의 준수 여부에 의존하는 코드를 이미 사용하고있는 경우에는 사전 필터를 사용하여 제한하지 않고 확장 할 수 없습니다.

+0

조언 해 주셔서 감사합니다. 코드베이스에서 400 자 이상의 정규 표현식을 삭제하는 것을 매우 기쁘게 생각합니다. – noj

관련 문제