none
SMTP - Erreur 5.7.1 Unable to relay RRS feed

  • Question

  • Bonjour.

    Excusez-moi si cette question semble revenir souvent mais à force de faire des recherches, j'ai peur de m'être embrouillé.

    Depuis mon application, je souhaite envoyer des emails aussi bien en interne qu'en externe.

    En utilisant System.Net.Mail.SmtpClient, est-il possible d'éviter l'erreur "5.7.1 Unable to relay" sachant que :

    a) notre serveur de messagerie est un serveur Exchange 2010 (Windows SBS 2008) 

    b) je ne souhaite pas activer une "fonctionnalité Relay" sur ce serveur.

    Comme est capable de le faire mon client Outlook en somme.

    Si oui, j'aurais probablement d'autres questions à venir.

    Merci pour vos réponses.

    vendredi 28 septembre 2012 14:55

Réponses

  • Bonjour,

    Si vous avez désactiver le mécanisme de Relay, seul les utilisateurs authentifiés qui dispose d'un compte AD sur votre Exchange peuvent envoyer des e-mails.
    Vous devez donc spécifier un Login/Mot de passe via la propriété Credentials sur l'objet SmtpClient :

    http://msdn.microsoft.com/fr-fr/library/system.net.mail.smtpclient.credentials.aspx

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    dimanche 30 septembre 2012 21:13
    Modérateur
  • Bon... Toutes mes excuses ... C'était un problème de configuration sur le serveur Exchange.

    J'avais trouvé plusieurs liens à propos de "Accept Authoritative Domain Send" (et de l'erreur Client does not have permissions to send as this sender).

    J'avais bien essayé de l'autoriser ... sauf que je n'étais pas sur le bon connecteur.


    A force d'essais, j'étais confronté à l'erreur "Unable to relay" et je tournais en rond...

    Bref merci quand même pour vos réponses et bonne soirée !

    lundi 1 octobre 2012 15:09

Toutes les réponses

  • Bonjour,

    Si vous avez désactiver le mécanisme de Relay, seul les utilisateurs authentifiés qui dispose d'un compte AD sur votre Exchange peuvent envoyer des e-mails.
    Vous devez donc spécifier un Login/Mot de passe via la propriété Credentials sur l'objet SmtpClient :

    http://msdn.microsoft.com/fr-fr/library/system.net.mail.smtpclient.credentials.aspx

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    dimanche 30 septembre 2012 21:13
    Modérateur
  • Bonjour.

    Merci pour votre réponse qui me confirme ce que j'avais bien cru comprendre.

    Ce matin, je n'arrive plus à reproduire cette erreur, je n'ai plus que '5.7.1 Client does not have permissions to send as this sender'... Je vais chercher de ce côté-ci.

    Ceci étant, voyez-vous une erreur dans le code suivant ? :

            Dim c As SmtpClient
            Dim m As MailMessage
            TxtError.Text = ""
            Try
                c = New SmtpClient(TxtServeur.Text, CInt(TxtPort.Text))
                c.Credentials = Net.CredentialCache.DefaultNetworkCredentials
                'c.UseDefaultCredentials = True
                m = New MailMessage()
                m.From = New MailAddress(TxtMailFrom.Text)
                m.To.Add(New MailAddress(TxtMailTo.Text))
                m.Subject = TxtObjet.Text
                m.Body = TxtBody.Text
                c.Send(m)
                m.Dispose()
            Catch ex As Exception
                Dim ie As Exception
                TxtError.Text = ex.Message & " : " & ex.StackTrace & vbNewLine
                ie = ex.InnerException
                While Not ie Is Nothing
                    TxtError.AppendText(ie.Message & " : " & ie.StackTrace & vbNewLine)
                    ie = ie.InnerException
                End While
            Finally
                m = Nothing
                c = Nothing
            End Try

    Etant authentifier sur l'AD, y'a t'il une différence entre :

    c.Credentials = Net.CredentialCache.DefaultNetworkCredentials et c.UseDefaultCredentials = True

    Y'a t'il une "meilleure" solution par rapport à l'autre ?

    * Dernière question : si je souhaite utiliser les Credentials saisis par un utilisateur :

    c.Credentials = New Net.NetworkCredential(TxtUser.Text, TxtPassword.Text)

    Y'a t'il un formalisme à respecter pour le nom d'utilisateur ? (nomutilisateur ou nomutilisateur@domaine.fr ou domaine\nomutilisateur)


    lundi 1 octobre 2012 08:51
  • Bonjour,

    La solution la meilleure, devrait être la 1ere (enfin c'est pareil pour moi ^^). Faites le test.

    Ensuite le format sera la même dans les 2 cas. En tout cas moi j'ai réussi à les utiliser les deux.


    Merci de valider par "Proposer comme réponse" si celle-ci répond à votre demande !

    lundi 1 octobre 2012 09:14
  • Bon... Toutes mes excuses ... C'était un problème de configuration sur le serveur Exchange.

    J'avais trouvé plusieurs liens à propos de "Accept Authoritative Domain Send" (et de l'erreur Client does not have permissions to send as this sender).

    J'avais bien essayé de l'autoriser ... sauf que je n'étais pas sur le bon connecteur.


    A force d'essais, j'étais confronté à l'erreur "Unable to relay" et je tournais en rond...

    Bref merci quand même pour vos réponses et bonne soirée !

    lundi 1 octobre 2012 15:09