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

Silverlight Discussion :

Envoyer un mail : Crash


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Par défaut Envoyer un mail : Crash
    Bonjour,
    Je suis en train de tester l'envoi de mail via mon site (hébergé sur Free). Je ne sais même si ça peut marcher d'ailleurs. Pour tester j'essaie de mettre en oeuvre un exemple trouvé sur le net.
    J'ai donc créé un nouveau projet appelé SendEmail. Dans le projet SendEmail.Web, j'ai créé un Service Web appelé MailServ.asmx dont le contenu est :
    Code c# : 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
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Services;
    using System.Net.Mail;
     
    namespace SendEmail.Web
    {
        [WebService(Namespace = "http://monsite.free.fr/")]
     
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        [System.ComponentModel.ToolboxItem(false)]
        public class MailServ : System.Web.Services.WebService
        {
     
            [WebMethod]
            public bool Send(string fromEmail, string toEmail, string subject, string body)
            {
                try
                {
                    MailMessage message = new MailMessage();
                    message.From = new MailAddress(fromEmail);
                    message.To.Add(new MailAddress(toEmail));
                    message.Subject = subject;
                    message.Body = body;
                    message.IsBodyHtml = false;
                    SmtpClient smtp = new SmtpClient();
                    smtp.EnableSsl = true;
                    smtp.Send(message);
                    return true;
                }
                catch
                {
                    return false;
                }
            }
        }
    }

    J'ai ajouté ce service en tant que Service Web au projet SendEmail. Je l'ai appelé Proxy.
    Le code de ma MainPage est le suivant :
    Code c# : 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
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using System.ServiceModel;
     
    namespace SendEmail
    {
        public partial class MainPage : UserControl
        {
            public MainPage()
            {
                InitializeComponent();
            }
     
            private void button1_Click(object sender, RoutedEventArgs e)
            {
                BasicHttpBinding bind = new BasicHttpBinding();
                EndpointAddress endpoint = new EndpointAddress("http://localhost:51639/SendEmailWeb/MailServ.asmx");
                Proxy.MailServSoapClient mailService = new SendEmail.Proxy.MailServSoapClient(bind, endpoint);
                mailService.SendAsync("monsite@free.fr", "destinataire@hotmail.fr", "Test mail", "Alors ca marche ?");
                mailService.SendCompleted += new EventHandler<Proxy.SendCompletedEventArgs>(mailService_SendCompleted);
     
            }
            void mailService_SendCompleted(object sender, Proxy.SendCompletedEventArgs e)
            {
                if (e.Result)
                {
                    resultTextBlock.Foreground = new SolidColorBrush(Colors.Blue);
                    resultTextBlock.Text = "Your email has been sent successfully!";
                }
                else
                {
                    resultTextBlock.Foreground = new SolidColorBrush(Colors.Red);
                    resultTextBlock.Text = "Sending failed.";
                }
            }
     
        }
    }
    N.B. : monsite@free.fr est l'adresse free que j'ai créée
    Enfin j'ai configuré le fichier Web.config de la manière suivante :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <system.web>
            <compilation debug="true" targetFramework="4.0" />
        </system.web>
      <system.net>
        <mailSettings>
          <smtp>
            <network host="smtp.free.fr" port="25" userName="monsite@free.fr" password="monpassword"/>
          </smtp>
        </mailSettings>
      </system.net>
    </configuration>
    A l'éxécution, j'ai le message suivant :
    Une erreur s'est produite en tentant d'effectuer une demande à l'URI 'http://localhost:51639/SendEmailWeb/MailServ.asmx'. Ce problème peut être dû à une tentative d'accès à un service entre domaines sans qu'une stratégie entre domaines appropriée soit en place, ou une stratégie inadaptée aux services SOAP. Il est possible que vous soyez contraint de contacter le propriétaire du service pour publier un fichier de stratégie entre domaines et veiller à ce qu'il autorise l'envoi d'en-têtes HTTP SOAP. Cette erreur peut également être liée à l'utilisation de types internes dans le proxy de service Web sans utiliser l'attribut InternalsVisibleToAttribute. Consultez l'exception interne pour plus de détails.
    En testant sur mon site Free directement, j'ai pas le message mais je ne reçois pas le mail.

    En espérant que vous puissiez m'aider.
    Merci beaucoup
    Cédric

  2. #2
    Membre éprouvé Avatar de Niitaku
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2009
    Messages : 119
    Par défaut
    Bonjour,

    Il semble que le site hébergeant ton service web nécessite un fichier de stratégie d'accès client Silverlight, plus connu par son nom clientaccesspolicy.xml.

    Ce fichier permet d'autoriser Silverlight à faire un accès cross-domain vers ce service.
    Il doit être placé à la racine du site web hébergeant le service.

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0" encoding="utf-8"?>
      <access-policy>
        <cross-domain-access>
          <policy>
            <allow-from http-request-headers="SOAPAction">
              <domain uri="http://monsite.free.fr"/>
            </allow-from>
            <grant-to>
              <resource path="/dossier_du_service/" include-subpaths="true"/>
            </grant-to>
         </policy>
        </cross-domain-access>
      </access-policy>

    J'espère ne pas me tromper sur l'origine de cette erreur, sinon j'aurai l'air fin. ^^'

    Edit : Dans la balise domain, tu dois spécifier l'adresse du site accédant au service qui sera autorisée ou sinon tu peux simplement mettre '*' pour autoriser tout le monde.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Par défaut
    Merci beaucoup pour ta réponse
    Pour le path j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <resource path="/" include-subpaths="true"/>
    puisque tout est à la racine. Mais ca n'a pas l'air de marcher.
    Petite question, ce fichier clientaccesspolicy.xml doit faire partie de la solution ?

  4. #4
    Membre éprouvé Avatar de Niitaku
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2009
    Messages : 119
    Par défaut
    Pas nécessairement, il doit juste se trouver à la racine du site Internet qui héberge le service pour autoriser des applications Silverlight d'autres domaines à se connecter.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Par défaut
    Il doit y avoir quelque chose qui m'achappe.
    J'ai rajouté à la racine un autre fichier crossdomain.xml dont le contenu est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE cross-domain-policy SYSTEM "????">
    <cross-domain-policy>
    	  <allow-http-request-headers-from domain="*" headers="SOAPAction,Content-Type"/>
    </cross-domain-policy>
    Je ne sais pas quoi mettre dans SYSTEM.
    Bref je suis perdu complet (ça doit se voir je pense )

  6. #6
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Une question m'intrigue:
    Comment arrives tu à héberger de l'ASP.Net sur Free qui n'héberge que du PHP?

  7. #7
    Membre éprouvé Avatar de Niitaku
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2009
    Messages : 119
    Par défaut
    Il doit certainement héberger son service sur un serveur IIS, non ? ^^'

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. envoyer un mail avec mon programme
    Par shrek dans le forum C++Builder
    Réponses: 8
    Dernier message: 06/12/2006, 12h27
  2. [VB6] Comment envoyer un mail HTML par Winsocks ?
    Par hedgehog dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 07/05/2004, 10h04
  3. [Debutant(e)]envoyer un mail en jsp
    Par SegmentationFault dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 19/01/2004, 18h28
  4. configurer sql pour envoyer des mails
    Par arwen dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 29/07/2003, 15h28

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