IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

SmtpClient, MailMessage et OVH


Sujet :

C#

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 58
    Par défaut SmtpClient, MailMessage et OVH
    Bonjours, pour l’envoie de mails j'utilise ce bout de code qui fonctionne parfaitement avec Gmail, mais ça marche pas avec OVH , j’obtiens toujours le message : Le délai d'attente de l'opération a expiré.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
            private void RadButton_Click(object sender, RoutedEventArgs e)
            {
     
                System.Net.ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(RemoteServerCertificateValidationCallback);
                var smtp = new SmtpClient
                {
                    Host = le_host,
                    Port = le_port,
                    EnableSsl = true,
                    DeliveryMethod = SmtpDeliveryMethod.Network,
                    UseDefaultCredentials = false,
                    Credentials = new NetworkCredential(nom_utilisateur, mot_de_passe)
                };
     
                    var message = new MailMessage()
                                    {
                                        From = new MailAddress(mail_emeteur),
                                        Subject = objet_mail,
                                        Body = message_mail
                                    };
                    using (message)
                    {
                        foreach (string distinatair in liste_distinatairs)
                        {
                            message.To.Add(new MailAddress(distinatair, distinatair));
                        }
     
                        message.CC.Add(new MailAddress(distinatair_en_copie, "Son_Nom"));
     
                        foreach (string fichier in list_chemins_des_fichiers)
                        {
                            FileStream fs = new FileStream(fichier, FileMode.Open, FileAccess.Read);
                            Attachment a = new Attachment(fs, fichier, MediaTypeNames.Application.Octet);
                            message.Attachments.Add(a);
                        }
     
                        try
                        {
                            smtp.Send(message);
                        }
                        catch (Exception ex)
                        {
                            //afficher message
                        }
                    }
            }
     
            private bool RemoteServerCertificateValidationCallback(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
            {
                //accepte tout les certificats
                return true;
            }
    j'ai utilisé tout les paramètres possibles et imaginables, même les combinaisons de paramètres les moins improbables par désespoir (avec/sans SSL en intervertissant les ports etc...) sans suces

  2. #2
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198

  3. #3
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 610
    Par défaut
    Salut,

    Quel port utilises tu? 587 ou 465?
    Identifiant smtp est bien du type "user@domain.fr"?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    C'est une appli web qui s'exécute sur un serveur OVH, ou une appli cliente qui tente de se connecter depuis l'extérieur ? Pas sûr que les serveurs SMTP d'OVH soient accessibles depuis l'extérieur...

  5. #5
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 58
    Par défaut
    j'ai vus tout ce qu'il y avais à voir ici et et ça n'a pas était d'un intérêt violant .

    Salut,

    Quel port utilises tu? 587 ou 465?
    Identifiant smtp est bien du type "user@domain.fr"?
    j'ai essayé toutes les combinaisons possibles de ces paramètres, même les plus improbables :

    le_port = 587 / 465 / 25
    nom_utilisateur = utilisateur@domaine.com
    le_host = smtp.domaine.com / mail.domaine.com / ns0.ovh.net / ssl0.ovh.net
    EnableSsl = true / false
    UseDefaultCredentials = true / false
    ServerCertificateValidationCallback = Avec / Sans
    message.Attachments = Avec / Sans
    message.CC = Avec / Sans

    C'est une appli web qui s'exécute sur un serveur OVH, ou une appli cliente qui tente de se connecter depuis l'extérieur ? Pas sûr que les serveurs SMTP d'OVH soient accessibles depuis l'extérieur...
    c'est une appli cliente qui tente de se connecter depuis l'extérieur, comme le fait si bien Outlook

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par s.toubal Voir le message
    comme le fait si bien Outlook
    Bah regarde la configuration SMTP dans Outlook alors
    Par contre si tu ne fais que recevoir des messages avec Outlook, ça ne prouve rien, vu que ce n'est pas le même protocole

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Bon, je viens de faire le test avec mon hébergement OVH, et ça fonctionne bien.

    Il y juste 2 "subtilités" :
    - il faut s'authentifier : si tu ne l'as pas encore fait, crée une compte mail via le manager OVH, et utilise le comme Credentials.
    - il faut utiliser le port 587, et non 25, car le 25 est souvent bloqué par les FAI (cf. cette page : http://guides.ovh.com/ConfigurationEmail)

    Voilà mon test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
        var client = new SmtpClient
        {
            Host = "smtp.mondomaine.net",
            Port = 587,
            Credentials = new NetworkCredential("test@mondomaine.net", "monmotdepasse")
        };
     
        var msg = new MailMessage
        {
            From = new MailAddress("test@mondomaine.net"),
            To = { new MailAddress("destinataire@gmail.com") },
            Subject = "Test SMTP",
            Body = "Test SMTP"
        };
        client.Send(msg);

  8. #8
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 58
    Par défaut
    Bah regarde la configuration SMTP dans Outlook alors
    Par contre si tu ne fais que recevoir des messages avec Outlook, ça ne prouve rien, vu que ce n'est pas le même protocole
    justement j'ai commancé par là, reprendre la meme config qui marche sur Outlook, ca marche en envois/reception (smtp/pop3).

    Bon, je viens de faire le test avec mon hébergement OVH, et ça fonctionne bien.

    Il y juste 2 "subtilités" :
    - il faut s'authentifier : si tu ne l'as pas encore fait, crée une compte mail via le manager OVH, et utilise le comme Credentials.
    - il faut utiliser le port 587, et non 25, car le 25 est souvent bloqué par les FAI (cf. cette page : http://guides.ovh.com/ConfigurationEmail)
    c'est exactement ce que je fait, je m'authentifie, et j'utilise le bon port (pour le port 25 c’était juste un test par désespoir).

    je viens de reprendre exactement ton code tel qu'il est, j'ai mis mon serveur smtp, j'ai mis mon compte et mot de passe pour l’authentification, et mis un destinataire, j’obtiens à chque fois cette erreure :

    SmtpException : Échec d'envoi du courrier.
    InerException : Impossible de se connecter au serveur distant

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Il n'y a pas plus de détails dans l'exception ? Tu peux poster le ToString de l'exception ?

    Tu es peut-être derrière un firewall qui bloque l'accès...

  10. #10
    Membre Expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 067
    Par défaut
    j'ai intégré un composant sur mon site qui utilise le paramétrage du web.config pour envoyer des mails, voici ma configuration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      <system.net>
        <mailSettings>
          <smtp>
            <network host="smtp.domaine.fr"  port="587" userName="admin@domaine.fr" password="******" />
          </smtp>
        </mailSettings>
      </system.net>
    il faut que ton site soit déployer chez ovh pour que ça marche je ne crois pas que ça marche en local

  11. #11
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 58
    Par défaut
    Exeption.ToString();
    System.Net.Mail.SmtpException: Échec d'envoi du courrier. ---> System.Net.WebException: Impossible de se connecter au serveur distant ---> System.Net.Sockets.SocketException: Aucune connexion n’a pu être établie car l’ordinateur cible l’a expressément refusée 37.59.34.152:587
    à System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
    à System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception)
    --- Fin de la trace de la pile d'exception interne ---
    à System.Net.ServicePoint.GetConnection(PooledStream PooledStream, Object owner, Boolean async, IPAddress& address, Socket& abortSocket, Socket& abortSocket6, Int32 timeout)
    à System.Net.PooledStream.Activate(Object owningObject, Boolean async, Int32 timeout, GeneralAsyncDelegate asyncCallback)
    à System.Net.PooledStream.Activate(Object owningObject, GeneralAsyncDelegate asyncCallback)
    à System.Net.ConnectionPool.GetConnection(Object owningObject, GeneralAsyncDelegate asyncCallback, Int32 creationTimeout)
    à System.Net.Mail.SmtpConnection.GetConnection(ServicePoint servicePoint)
    à System.Net.Mail.SmtpTransport.GetConnection(ServicePoint servicePoint)
    à System.Net.Mail.SmtpClient.GetConnection()
    à System.Net.Mail.SmtpClient.Send(MailMessage message)
    --- Fin de la trace de la pile d'exception interne ---
    à System.Net.Mail.SmtpClient.Send(MailMessage message)
    à Operator.MainWindow.button1_Click(Object sender, RoutedEventArgs e) dans C:\Operator\MainWindow.xaml.cs:ligne 582
    je suis connecté directement à internet via mon modem, j'ai essayer via plusieurs connexions (mon modem de chez moi, clé 3G)

    il faut que ton site soit déployer chez ovh pour que ça marche je ne crois pas que ça marche en local
    il ne s'agit pas d'un site mais d'une application Desktop en WPF.

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par youtpout978 Voir le message
    il faut que ton site soit déployer chez ovh pour que ça marche je ne crois pas que ça marche en local
    Bah si, j'ai testé, et pour moi ça marche nickel...

    Citation Envoyé par s.toubal Voir le message
    Aucune connexion n’a pu être établie car l’ordinateur cible l’a expressément refusée 37.59.34.152:587
    OK, donc c'est vraiment une erreur réseau ; il y a quelque chose qui bloque entre toi et le serveur, que ce soit au niveau du FAI ou d'OVH.
    Par contre ce qui est bizarre c'est qu'au début tu avais une erreur de Timeout, alors que maintenant il dit directement que la connexion a échoué...

  13. #13
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 58
    Par défaut
    OK, donc c'est vraiment une erreur réseau ; il y a quelque chose qui bloque entre toi et le serveur, que ce soit au niveau du FAI ou d'OVH.
    Par contre ce qui est bizarre c'est qu'au début tu avais une erreur de Timeout, alors que maintenant il dit directement que la connexion a échoué...
    ça vas être difficile à trouver , j’ai installé y a quelque jours un sniffer pour tenter de comparer ce qui se passe dans le reseau quand ça marche avec Gmail et ce qui se passe quand ça marche pas avec OVH, mais j’étais vite découragé, c'est plus compliqué qu ce que j'imaginais

    Pour l’erreur TimeOut, après avoir mis jusqu’à 10 minutes de TimeOut, j’ai finis par, observer après plusieurs tentatives, que finalement c'est une erreurs standard qui se déclenche si pour une raison X ou Y la connexion échoue, donc c'est un message un peut standard qui veut dire simplement "je ne peut pas attendre plus que ça par ce que y a quelque chose qui cloche quelque part".

    C'est en quelque sort le bloque "Try Catch" qui englobe le tout et qui reçoit toutes les autres erreurs qui ne sont pas traités explicitent dans ses sous blocs.

  14. #14
    Membre Expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 067
    Par défaut
    Est-ce que ton firewall ou même ton routeur ne bloquerait pas le port 587 pour cette application ?
    Je viens de tester ton code et chez moi ça marche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Net.Mail;
    using System.Net;
     
    namespace SendMail
    {
        public partial class Form1 : Form
        {
            private const string host = "smtp.domaine.fr";
            private const int port = 587;
            private const string userName = "admin@domaine.fr";
            private const string password = "*****";
            private const string destinataire = "nom@msn.com";
     
            public Form1()
            {
                InitializeComponent();
            }
     
            private void btnMessage_Click(object sender, EventArgs e)
            {
                System.Net.ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(RemoteServerCertificateValidationCallback);
                var smtp = new SmtpClient
                {
                    Host = host,
                    Port = port,
                    EnableSsl = false,
                    DeliveryMethod = SmtpDeliveryMethod.Network,
                    UseDefaultCredentials = false,
                    Credentials = new NetworkCredential(userName, password)
                };
     
                var message = new MailMessage()
                                {
                                    From = new MailAddress(userName),
                                    Subject = txtObjet.Text,
                                    Body = rtbMessage.Text
                                };
                using (message)
                {
                    message.To.Add(destinataire);
                    try
                    {
                        smtp.Send(message);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }
     
            private bool RemoteServerCertificateValidationCallback(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
            {
                //accepte tout les certificats
                return true;
            }
     
        }
    }

  15. #15
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 58
    Par défaut
    Est-ce que ton firewall ou même ton routeur ne bloquerait pas le port 587 pour cette application ?
    Je viens de tester ton code et chez moi ça marche
    Je pense que non puisque ce même port marche quand j'utilise Gmail. s'il etait bloqué même gmail devrais être affecté.

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 12
    Par défaut
    J'ai exactement le même problème que l'initiateur du post.
    Le problème vient bien d'OVH car si je place les credentials sur un autre fournisseur (avec tout le reste du code identique), ça fonctionne...

    Qqun aurait des news à ce sujet ?

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 12
    Par défaut
    Je me réponds à moi même ...

    ça fonctionne avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     With SmtpServer
                .Port = 587
                .Host = "SSL0.OVH.NET"
                .EnableSsl = False
                .Timeout = 40000 'arbitraire
                .DeliveryMethod = SmtpDeliveryMethod.Network
                .UseDefaultCredentials = False
                .Credentials = New System.Net.NetworkCredential("monadresse@domainchezovh.com", "password")
            End With
    Mais si on passe sur le port 465 et ssl enabled, ça ne fonctionne pas (alors que ça fonctionne très bien sur le même ordi avec Thunderbird).

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 12
    Par défaut
    Je me réponds encore à moi-même : le problème vient d'un choix de conception de la classe smtp dans .net

    here is no way to use Implicit SSL (SMTPS) with System.Net.Mail. Implicit SSL would have the entire connection is wrapped in an SSL layer. A specific port would be used (port 465 is common). There is no formal RFC covering Implicit SSL.... This is not considered a bug, it’s by design.



    Source ici : http://forum.ovh.com/showthread.php?...-par-c-asp-net

    J'ai essayé avec la dernière version en date du Framework (4.5.1), pas mieux.
    Ovh semble au courant de ce problème, mais à ma connaissance, il n'est pas possible de faire du ssl sur un autre port. Dommage.

Discussions similaires

  1. Réponses: 17
    Dernier message: 09/05/2009, 21h54
  2. [ovh] message incompréhensible
    Par sami_c dans le forum OVH
    Réponses: 4
    Dernier message: 29/01/2007, 16h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo