2010-08-16 26 views
4

Impossible d'envoyer le courrier. Voici ma C# source:Impossible d'envoyer le courrier avec SmtpClient

var to = "[email protected]"; 
    var subject = "test"; 
    var body = "test mail"; 
    var message = new MailMessage(from, to, subject, body); 
    var client = new SmtpClient { Credentials = new NetworkCredential("[email protected]", "mypassword") }; 
    client.Send(message); 

ici est le App.config:

<system.net> 
    <mailSettings> 
     <smtp from="[email protected]"> 
     <network 
      host="mail.mycompany.com" 
      port="25" 
      userName="[email protected]" 
      password="mypassword" 
     /> 
     </smtp> 
    </mailSettings> 
    </system.net> 

Jusqu'à présent, si l'hôte/port App.config sont mal une exception est levée, mais pas si l'utilisateur/passe sont mal (raisons de sécurité évidentes). Cependant, j'ai réussi à me connecter depuis Microsoft Outlook avec le même utilisateur/passe que dans la source.

L'e-mail n'est pas reçu, ni dans Inbox, ni dans le dossier Junk. Comment puis-je valider le côté serveur (en considérant qu'il fait partie de microsoftonline.com)? Qu'est-ce que je rate? Qu'est-ce que je fais de mal, s'il vous plait?

+0

Quelles exceptions obtenez-vous? Veuillez l'inclure dans cette requête –

+1

Que se passe-t-il si vous vous connectez en utilisant 'telnet mail.mycompany.com 25'? Si votre organisation fonctionne sur Microsoft Exchange, la connexion à SMTP risque de ne pas être aussi simple que de se connecter au port 25 et de fournir un nom d'utilisateur et un mot de passe. Par exemple, le serveur peut vous demander de vous connecter en utilisant SSL. –

+0

@Jangwenyi: les exceptions indiquent que l'hôte/port est faux, ce qui est une bonne chose. Toutefois, lorsque les exceptions ne sont pas levées, l'e-mail n'est toujours pas reçu. – BreakPhreak

Répondre

-2

obtenu une réponse de l'équipe - il était une configuration/problème de sécurité. Résolu avec IT. Merci beaucoup, tout le monde.

+1

ok, mais comment? ce serait bien d'expliquer. ce n'était pas une réponse acceptée pour n'importe qui mais vous – cr0ss

2

Je suis presque sûr que si le serveur rejette l'email pour une raison quelconque, votre code lèverait une exception. Si ce n'est pas le cas, cela signifie que le serveur accepte les courriels avec le nom d'utilisateur et le mot de passe fournis et, techniquement, les courriels «envoient» avec succès. Cependant, ce n'est pas une garantie que quelqu'un recevra des courriels. Vous devez savoir ce que le serveur de messagerie est en train de faire avec ces e-mails et pourquoi.

+0

J'ai demandé à notre équipe informatique d'ouvrir un ticket avec support microsoftonline. Cependant, en tant que développeur, je veux toujours faire mes devoirs. – BreakPhreak

+1

Je comprends mais malheureusement je ne pense pas que vous pouvez faire beaucoup, si le serrver accepte les mails mais ne les livre pas alors techniquement votre code fonctionne, si vous faites quelque chose de mal, vous ne trouverez rien d'utile jusqu'à ce que vous entendre de nouveau le soutien. Si vous payez pour un service hébergé, soyez prêt à leur dire que l'envoi de courriels par programmation n'est pas pris en charge. –

+0

Le serveur d'intégration continue (CI) (Continuous Integration Server) parvient à envoyer des messages de manière fluide. Et de cette façon ou d'une autre - je cherche n'importe quel genre de validation côté serveur je peux (devrait essayer de) effectuer. Merci quand même. – BreakPhreak

2

Le lien ci-dessous présente un exemple d'une fonction d'envoi d'e-mails très simple qui peut être appelée depuis une application de console à tester. Je sais que ce code fonctionne, donc il pourrait isoler n'importe quel problème avec votre code et peut-être jeter un peu plus de lumière sur l'endroit où le problème est.

SendEmail() – Create and Send Email Messages in C#

+0

ouais, tout comme mon code, en fait :) entre-temps eu une réponse informatique officielle - c'était un problème de configuration réseau/sécurité. – BreakPhreak

1

J'avais des problèmes de pare-feu en essayant d'utiliser smtp aussi bien. C'est une solution de rechange si vous ne voulez pas travailler avec les TI et avoir des perspectives installées. Cette méthode utilisera votre email par défaut pour envoyer si. Vous devrez également ajouter une référence (j'utilise sous COM 'Bibliothèque d'objets Microsoft Outlook 14.0')

 using Outlook = Microsoft.Office.Interop.Outlook; 

    private void sendEmail(string DistributionList, string AttachmentDestination) 
     { 
     //new outlook instance 
     Outlook.Application app = new Outlook.Application(); 

     //new mail object 
     Outlook.MailItem mail = app.CreateItem(Outlook.OlItemType.olMailItem); 

     mail.Subject = "This is coming from a C# script"; 
     mail.To = DistributionList; //your distribution list "[email protected]" 
     mail.Body = "This is the body of an email from a C# script"; 
     mail.Attachments.Add(AttachmentDestination); //location of attachment (can be ommitted) 
     mail.Send(); 
     app.Quit(); 
    } 
+0

cela s'est avéré extrêmement peu fiable –