2010-04-06 4 views
1

Voici le code.smtpException n'a pas été gérée par le code utilisateur

void sendMail() 
{ 
    MailMessage mail = new MailMessage(); 

    mail.To.Add("[email protected]"); 
    mail.From = new MailAddress("[email protected]", txt_name.Text); 
    mail.Subject = txt_subject.Text; 
    mail.Body = txt_body.Text; 

    SmtpClient smtp = new SmtpClient("smtp.gmail.com"); 
    smtp.EnableSsl = true; 

    NetworkCredential yetki = new NetworkCredential("[email protected]", "11111111"); 
    smtp.Credentials = yetki; 

    smtp.Send(mail); 

    Response.Write("mailiniz başarılı bir şekilde gönderilmiştir"); 
} 

protected void btn_gonder_Click(object sender, EventArgs e) 
{ 
    sendMail(); 
} 

Répondre

2

L'erreur indiquant qu'il est unhandled signifie que vous ne l'avez pas Intercepter l'exception. Maintenant, ce que vous faites réellement dans le bloc catch pour gérer l'exception dépend de vous, comme la consignation dans un fichier, la mise en attente d'une nouvelle tentative ou l'affichage d'une boîte de message. Ou essayer de faire quelque chose pour empêcher l'exception en premier lieu.

protected void btn_gonder_Click(object sender, EventArgs e) 
{ 
    try{ 
    sendMail(); 
    } 
    catch(Exception ex) 
    { 

    } 
} 

Notez également que vous pouvez accéder à ex.Message pour voir le message d'exception, ou ajouter un point de rupture au bloc de capture et d'inspecter ex. Il est possible que vous ayez besoin de plus pour l'utiliser avec Gmail en raison des exigences d'authentification. Je ne sais pas si les informations d'identification du réseau sont suffisantes. J'ai toujours eu des problèmes et j'ai eu recours au compte de messagerie de mon FAI qui ne nécessite pas d'authentification.

+0

@gmcalab Parce que c'est un code d'infrastructure. Je ne le mettrais dans sendMail que si je prévoyais de prendre des mesures définitives pour corriger l'erreur et terminer avec succès l'appel à sendMail, ou si je prévoyais de relancer une exception plus spécialisée. Si je suis juste l'affichage d'une boîte de message, je le veux en dehors des parties réutilisables du code. Je ne voudrais pas appeler sendMail à partir d'un service et le faire essayer d'afficher une boîte de message que l'utilisateur ne verra jamais. – AaronLS

+0

@gmcalab Je veux dire vraiment, tout le but était juste de lui montrer un essai/attraper. Le sujet de l'endroit où placer le try/catch et ce qu'il faut réellement faire dans le catch varie énormément en fonction du contexte dans lequel il utilise ce code. Vous êtes borné à penser qu'il existe une solution unique pour tous. – AaronLS

+0

@gmcalab FYI J'ai donné à votre solution un upvote parce que je crois que c'est tout aussi valable que ma solution. Encore une fois, l'essai consiste à diviser les cheveux parce que c'est une discussion qui pourrait être très vaste et dépasser la portée de la question. – AaronLS

6

Utilisez un bloc try/catch

void sendMail() { 

    try{ 
     MailMessage mail = new MailMessage(); 

     mail.To.Add("[email protected]"); 

     mail.From = new MailAddress("[email protected]", txt_name.Text); 

     mail.Subject = txt_subject.Text; 

     mail.Body = txt_body.Text; 

     SmtpClient smtp = new SmtpClient("smtp.gmail.com"); 

     smtp.EnableSsl = true; 

     NetworkCredential yetki = new NetworkCredential("[email protected]", "11111111"); 
     smtp.Credentials = yetki; 

     smtp.Send(mail); 
     Response.Write("mailiniz başarılı bir şekilde gönderilmiştir"); 
    } 
    catch(Exception e){ 
     Response.Write(e.Message); 
    } 

} 
+0

J'ai changé mon code. mais il donne toujours l'erreur et le message ne pas envoyer [email protected] – ozkank

+0

@wide, Mais l'exception est maintenant gérée. correct? – Gabe

+0

oui. il est traité – ozkank

2

Vous ajoutez un bloc try/catch à votre code et ignorez l'erreur, ou vous publiez l'intégralité du message d'exception afin que nous puissions vous aider à résoudre le problème réel.

1

Selon this page lors de l'envoi du courrier via SSL, vous devez utiliser le port 465 à savoir

SmtpClient smtp = new SmtpClient("smtp.gmail.com"); 
smtp.EnableSsl = true; 
smtp.Port = 465; 
... 

Vous devriez probablement encore envelopper l'appel à Send dans un bloc try/catch et gérer SmtpException tout qui est jeté si vous le pouvez faire quelque chose à ce sujet. Notez que vous pouvez également mettre la configuration de smtpClient dans le fichier web.config (voir here par exemple).

+0

+1 me battre pour ça! :-) Oui, le port doit être réglé correctement, c'est probablement le problème –

1

Vous n'avez pas spécifié le numéro de port pour Gmail qui est 587.

smtp.port = 587; 

Et votre problème devrait être résolu. Sinon, votre code semble bon.

Questions connexes