Email senden mit C#/Silverlight



  • Der sieht im Prinzip genauso aus wie in der Anleitung.

    using System;
    using System.Collections.Generic;
    using System.Web;
    using System.Web.Services;
    using System.Net.Mail;
    
    /// <summary>
    /// Zusammenfassungsbeschreibung für MailServ
    /// </summary>
    [WebService(Namespace = "http://beispiel.de/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    // Um das Aufrufen dieses Webdiensts aus einem Skript mit ASP.NET AJAX zuzulassen, heben Sie die Auskommentierung der folgenden Zeile auf. 
    // [System.Web.Script.Services.ScriptService]
    public class MailServ : System.Web.Services.WebService
    {
    
        public MailServ()
        {
    
            //Auskommentierung der folgenden Zeile bei Verwendung von Designkomponenten aufheben 
            //InitializeComponent(); 
        }
    
        [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 (Exception ex)
            {
                return false;
            }
    
         }
    }
    

    Ja, das die Anleitung nicht Problemlos laufen soll habe ich auch gemerkt und es steht auch unter den Kommentaren. Dort wurde sogar dasselbe Problem wie bei mir beschrieben, allerdings kam darauf keine Antwort.



  • Numax schrieb:

    Die nachfolgende Zeile ist es die wieder den Fehler ausgibt, das ein Assemblyverweis oder eine Using-Directive fehlt:

    Proxy.MailServSoapClient mailService = new SendEmail.Proxy.MailServSoapClient(bind, endpoint);
    

    Bei SendEmail wird der fehler ausgegeben. Jedoch finde ich nicht den Namespace in dem das integriert sein soll, bzw. ist er wahrscheinlich nicht in Silverlight vorhanden.

    Der Namespace "Proxy" sowie die Klasse "MailServSoapClient" wird automatisch von VisualStudio durch das Hinzufügen der "Service Reference" erzeugt - Den Namen "Proxy" hast du da nämlich eingegeben (oder solltest du haben)

    Aber abgesehen davon müsste das eher so aussehen:

    Proxy.MailServSoapClient mailService = new Proxy.MailServSoapClient(bind, endpoint);
    


  • Ich frage mich gerade wieso du den Bind selbst machst.
    Wenn man schon Visual Studio verwendet dann bitte auch die Features.
    Webservice hinzufügen
    Klasse aufrufen.
    Asyncfunktion erstellen lassen und das sollte alles gewesen sein.
    Dauer: 5 Minuten.



  • Also jetzt weiß ich nicht mehr weiter.

    Ich habe jetzt diese Zeile geändert und das SendEmail da weg genommen.
    Nur funktionieren tut hier garnix.



  • //private bool sendmail(string to, string htmltext, string subject)
            //{
            //    try
            //    {
            //        MailMessage mail = new MailMessage();
            //        SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
            //        SmtpServer.DeliveryMethod = SmtpDeliveryMethod.Network;
    
            //        mail.From = new MailAddress("deine mailadresse","ichbinses");
            //        mail.To.Add(to);
            //        mail.Subject = subject;
    
            //        mail.IsBodyHtml = true;
            //        string htmlBody;
    
            //        htmlBody = htmltext;
    
            //        mail.Body = htmlBody;
    
            //        SmtpServer.Port = 587;
            //        SmtpServer.Credentials = new System.Net.NetworkCredential("USERNAME", "PASSWORT");
            //        SmtpServer.EnableSsl = true;
    
            //        SmtpServer.Send(mail);
    
            //    }
            //    catch (Exception ex)
            //    {
            //        return false;
            //    }
            //    return true;
            //}
    

    So funktioniert senden über GMAIL.



  • Numax schrieb:

    Also jetzt weiß ich nicht mehr weiter.

    Ich habe jetzt diese Zeile geändert und das SendEmail da weg genommen.
    Nur funktionieren tut hier garnix.

    Bestimmt hast du mit deinem Webservice zu Testzwecken schon eine Email an dich selbst gesendet. Hat das problemlos funktioniert?



  • So nun habe ich das ganze mal mit der Vorlage für gmail gemacht.
    Wenn ich diese Datei mit dem WebDeveloper Debugge, funktioniert das Senden.
    Versuche ich das jedoch mit der Anwendung selber dann Funktioniert das nicht, ich denke das die eingetragenen werte aus der MainPage.xaml.cs nich übermittelt werden.
    Muss ich diese Werte erst in neue Variablen bringen und dann in den Webservice einbinden, oder wie funktioniert das? Oder muss ich generell erst die werte aus den Textboxen verarbeiten, damit diese über die MainPage.xaml.cs überhaupt an den WebService gesendet werden?
    Hier der ausschnitt aus der MainPage.xaml.cs:

    void Senden_Button_Click(object sender, RoutedEventArgs e)
    		{
                string ToEmail = "test@beispiel.de";
    
    			BasicHttpBinding bind = new BasicHttpBinding();
    
    			EndpointAddress endpoint = new EndpointAddress("http://localhost:51639/TestSite/MailServ.asmx");
    
                Proxy.MailServSoapClient mailService = new Proxy.MailServSoapClient(bind, endpoint);
    
                mailService.SendAsync(Email.Text, ToEmail, Betreff.Text, Nachricht.Text);
    
                mailService.SendCompleted += new EventHandler<Proxy.SendCompletedEventArgs>(mailService_SendCompleted);
    		}
    

    hier der Webservice:

    public bool Send(string toEmail, string subject, string body)
        {
            try
            {
                    MailMessage mail = new MailMessage();
                    SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
                    SmtpServer.DeliveryMethod = SmtpDeliveryMethod.Network;
    
                    mail.From = new MailAddress("xxxx.xxxx@googlemail.com","Numax");
                    mail.To.Add(toEmail);
                    mail.Subject = subject;
    
                    mail.IsBodyHtml = true;
                    string htmlBody;
    
                    htmlBody = body;
    
                    mail.Body = body;
    
                    SmtpServer.Port = 587;
                    SmtpServer.Credentials = new System.Net.NetworkCredential("xxxx.xxxx", "xxxxxxxx");
                    SmtpServer.EnableSsl = true;
    
                    SmtpServer.Send(mail);
    
            }
    
            catch (Exception ex)
            {
                return false;
            }
                return true;
        }
    


  • Numax schrieb:

    Muss ich diese Werte erst in neue Variablen bringen und dann in den Webservice einbinden, oder wie funktioniert das? Oder muss ich generell erst die werte aus den Textboxen verarbeiten, damit diese über die MainPage.xaml.cs überhaupt an den WebService gesendet werden?

    Nein.

    Das Problem scheint dein Service-Binding zu sein ... per Ferndiagnose kaum zu lösen.



  • In wie fern ist das mit dem Service-Binding zu vertsehen?

    Wie soll ich nun am besten vorgehen um das Problem zu lösen?



  • Joa ganz einfach eigentlich. Wenn du es lokal ausführst sind die Endpoints anders, als wenn du es auf den Server spielst und dann von dort aufrufst. Ich hab dazu was auf meinem blog geschrieben. Probier das einfach mal aus:

    http://www.blog-dotnetprogrammierung.de/?p=7



  • So ganz steige ich da noch nicht durch. Bin halt auch sehr neu in sachen C#.

    Aber würde es dann nicht reichen einfach die EndpointAdress umzuschreiben auf die daten vom Server?



  • Würde reichen, wobei du das jedesmal machen musst wenn du auf einen anderen Server deployes. Die Lösung von mir macht das ganze dynamisch für dich. Musste dich wohl einarbeiten, führt kein Weg drumherum, besonders wenn du weiter Silverlight machen willst.



  • Ich habe das grade mal probiert die EndpointAdress auszutauschen, jedoch funktioniert das auch nicht.

    Also so wie ich das sehe werden die Daten von der MainPage.xaml.cs nich an den WebService übermittelt bzw. nicht das Signal zum Senden gegeben.



  • Numax schrieb:

    Ich habe das grade mal probiert die EndpointAdress auszutauschen, jedoch funktioniert das auch nicht.

    Also so wie ich das sehe werden die Daten von der MainPage.xaml.cs nich an den WebService übermittelt bzw. nicht das Signal zum Senden gegeben.

    Das siehst du vermutlich richtig. Probleme im Binding sorgen dafür, dass dein WebService für deine Silverlight-Anwendung unerreichbar bleibt. Deshalb gehen alle weiterführenden Anweisungen ins Leere. Aber ohne das vollständige Projekt sind Fehlersuche / -behebung zum Scheitern verurteilt ...


Log in to reply