2012-08-09 2 views
0

메일을 보내는 데 다음 코드가 있습니다. 네트워크에 연결되어 있다면 완벽하게 작동합니다.C#으로 메일을 전송하기위한 조건

MailMessage oMail = new MailMessage(new MailAddress("[email protected]"), new MailAddress(setare[0].email)); 
     oMail.Subject = "Subject"; 
     oMail.Body = "Body"; 
     SmtpClient oSmtp = new SmtpClient(); 
     oSmtp.Host = "smtp.mail.yahoo.com";   
     oSmtp.Credentials = new NetworkCredential("andr3yy.design", "password"); 
     oSmtp.EnableSsl = false; 
     oSmtp.Port = 587; 
     oSmtp.Send(oMail); 

문제는 다음과 같습니다. 네트워크 연결이없고이 기능에 액세스 할 수없는 경우 응용 프로그램이 중단됩니다. 나는 이것을 원하지 않는다. 인터넷에 연결되어 있는지 확인하려면 조건 (if)이 필요하지만 C#을 처음 사용하는 사람은 알지 못합니다.

답변

1

좋은 방법은 이것에 대한 try/catch 블록을 사용하고 있습니다 :이 문제가 될 것입니다 경우

MailMessage oMail = new MailMessage(new MailAddress("[email protected]"), new MailAddress(setare[0].email)){ 
    Subject = "Subject", 
    Body = "Body" 
}; 

SmtpClient oSmtp = new SmtpClient() { 
    Host = "smtp.mail.yahoo.com",   
    Credentials = new NetworkCredential("andr3yy.design", "password"), 
    EnableSsl = false, 
    Port = 587 
}; 

try{ 
     oSmtp.Send(oMail); 
} 
catch(Exception e) { 

    string message = e.Message; 
    // this will handle no connection to the internet, along with other possible exceptions 
} 
+0

가변 'e'는 절대로 사용되지 않습니다. 경고. 이 경고를 어떻게 없앨 수 있습니까? – AnDr3yy

+0

변수'e'는'예외'객체'입니다. 사용하지 않으려는 경우 생략 할 수 있습니다. 그러나, 그것은 '예외'(스택 추적, 메시지, 내부 예외 등)에 대한 정보를 포함합니다. 업데이트 된 예제를 보면,'exception' 메시지를 얻을 수 있다는 것을 알 수 있습니다. 그렇게하면 경고가 제거됩니다. – Gabe

+1

완벽하게 작동합니다. 감사합니다. – AnDr3yy

1

, 당신은 아마 당신의 이메일 루틴을 사용하기 전에 네트워크 연결을 확인해야합니다.

System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()

그런 식으로, 사용자가 연결을 발견하기 전에 큰 이메일을 작성하는 그의 시간을 낭비하지 않는 것은 없다.

if (GetIsNetworkAvailable()) { 
    // your code here 
} 
+0

답변 해 주셔서 감사합니다. 나는 너의 길을 시도하지는 않지만, 고마워. – AnDr3yy