Entwickler-Ecke

WinForms - e-mail Senden schlug fehl


KingQuantum - Sa 20.08.11 14:12
Titel: e-mail Senden schlug fehl
ich bin vor kurzem mit C# angefangen

habe daheim Visual C# 2010

in der schule schon nen bisi was gelernt aber nicht viel (kommt aber noch)

nu wil ich daheim etwas programieren

ich wolle einen normalen link zu einer internetseite machen weis aber nicht wie ich die befehle machen muss damit es klappt

in folgendern eintrag mus der link rein:

C#-Quelltext
1:
2:
3:
4:
private void btnNew_Click(object sender, EventArgs e)
{

}

viele werde über meine "anfängerhaftigkeit" wohl lachen aber ich hoffe das wird sich legen

das ich über "suche" nix gefunden habe liegt daran weil da alles iwi schon ne ebene höher ist

greez King pls Help

Moderiert von user profile iconTh69: C#-Tags hinzugefügt


huuuuuh - Sa 20.08.11 15:19

http://lmgtfy.com/?q=c%23+link+aufrufen


stes - Sa 20.08.11 15:35

[offtopic]lol :D den kannte ich auch noch nicht, muss ich mir merken ^^[/offtopic]


KingQuantum - Sa 20.08.11 15:37

2h try&error

und dan kommt das -.- peinlich

danke für hilfe

jetzt ma was schwereres^^^

man habe 2 textfelder und ein "login" button

wen man die beiden textfelder richtig eingibt und dan "login" klickt muss eine austomatische e-mail an einen admin gehen mit den logindaten

das klingt jetzt etwas komisch aber hat schon seine richtigkeit:)


huuuuuh - Sa 20.08.11 15:41

gerne :)


storestore - Sa 20.08.11 15:51

Sowas vielleicht
http://social.msdn.microsoft.com/Forums/de-DE/visualwebdeveloperexpressde/thread/4baca6a3-10c1-410f-9084-2e5b17dcbd66
oder so

http://tinyurl.com/3dbglm7


KingQuantum - Sa 20.08.11 22:29

danke das hat mir schon etwas weiter geholfen aber...

bei folgendem eintrag hat Visual noch ein "kleines" problem

// System.Web.Mail.SmtpMail.SmtpServer is obsolete in 2.0
// System.Net.Mail.SmtpClient is the alternate class for this in 2.0
SmtpClient smtpClient = new SmtpClient();
Mailaddress message = new Mailaddress();

die unterstrichenen angaben werden dabei noch von visual unterstrichen

d.h. ich mus den begriffen noch einen bestimmten wert hinzufügen

ich halte die angaben für variablen die ich hier vorher angeben muss


C#-Quelltext
1:
2:
3:
4:
private void Form1_Load(object sender, EventArgs e)
{

}

beim arduino konnte man das über

int name = 0;
int name2 = 0;

lösen aber das irgentwie anders bei C#

villeicht habt ihr ja eine idee was ich damit machen kann
bzw. wisst was man mit den angaben wirklich machen muss

auch das

//ausgeklammerte

ist ein hinweis aber mit dem begriff [Mail] kann visual nix anfangen -.-

Moderiert von user profile iconTh69: C#-Tags hinzugefügt


Th69 - So 21.08.11 10:42

Hallo KingQuantum,

du mußt dazu auch den Namensbereich angeben, entweder direkt vor dem Klassennamen oder am Anfang der Datei mit der "using"-Direktive:

C#-Quelltext
1:
using System.Net.Mail;                    


Alternativ (wobei ich nicht weiß, ob das auch die Express-Version unterstützt) kannst du auch im VS-Editor per Kontextmenü den obigen Code hinzufügen (lassen).

Bei anderen externen Klassen mußt du evtl. auch noch die Verweise auf die entsprechenden Assemblies (DLLs) einbinden. Im Projekt-Explorer auf Verweise per Kontextmenü "Verweis hinzufügen" wählen und aus der ".NET Komponenten"-Liste die entsprechende Assembly auswählen.

In der MSDN-Hilfe ist zu jeder Klasse sowohl der Namensbereich (namespace) als auch die Assembly angegeben.


P.S: Es wäre schön, wenn du demnächst deine Beiträge ein bißchen besser formatieren würdest und vor dem Absenden noch mal auf grobe Fehler durchgehst, danke


stes - So 21.08.11 11:31

user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Hallo KingQuantum,
Alternativ (wobei ich nicht weiß, ob das auch die Express-Version unterstützt) kannst du auch im VS-Editor per Kontextmenü den obigen Code hinzufügen (lassen).


Ja das geht auch in der Express-Version (sofern die richtige dll schon eingebunden ist). Rechtsklick -> Auflösen... -> fehlende using-Direktiven einbinden (oder so ähnlich ^^)

Gruß

stes


KingQuantum - Di 23.08.11 21:32

Edit: hat sich erledigt

danke an alle die geholfen haben

Edit2: fehler beim senden der mail -.-


C#-Quelltext
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:
                SmtpClient smtpClient = new SmtpClient();
                MailMessage message = new MailMessage();

                try
                {
                  MailAddress fromAddress = new MailAddress("example@hotmail.de""example");

                   your server
                    
                  smtpClient.Host = "smtp.mail.hotmail.de";
                  
                  //Default port will be 25, Hotmail 547 GMX und WEB sind 25
                  smtpClient.Port = 547;
                  //evtl. Port anpassen?
                  
                  message.From = fromAddress;

                  message.To.Add("example@t-online.de");
                  message.Subject = "AP-Laden";

                  //Body can be Html or text format
                  //Specify true if it  is html message
                  message.IsBodyHtml = false;

                  // Message body content
                  message.Body = txtACC.Text + txtCHAR.Text + txtINFO.Text;
                  // Send SMTP mail
                  smtpClient.Send(message);

                  lblTextOben.Text = "Email successfully sent.";
                }
             catch (Exception ex)
                {
                lblTextOben.Text = "Send Email Failed." + ex.Message;
                }


jemand ne idee warum es nicht geht?


KingQuantum - Fr 26.08.11 10:35

kan man ähnliches auch zur nor in html Programmieren

bzw. label buttons und texboxen in HTML vorbereiten und in C# programmieren?

so was man alles in eine HP oder in ein Forum integrieren kan?

achja und das e-mailsenden hab ich immernoch nicht hinbekommen....(leider)

wäre nett wen jemand hilft


bakachan - Mo 29.08.11 13:53

user profile iconKingQuantum hat folgendes geschrieben Zum zitierten Posting springen:

Edit2: fehler beim senden der mail -.-

jemand ne idee warum es nicht geht?

Welche Fehlermeldung kommt denn? (und wo?)


KingQuantum - Mo 29.08.11 14:34

Smtp Exception wurde nicht behantdelt. / Fehler beim Senden von Mail.

könnte der fehler sein

im lblText wird "Fehler beim senden von Mail." angezeigt

aber smtp Excetion ist schon in Catch behandelt worden

der text "Smtp Exception wurde nicht behantdelt." wird auch nicht angezeigt aber andere hatten den fehler schon

im Programmcode selbst wird nix als fehler angezeig,

ich denke ich hab einen befehl vergessen

aber nur welchen?

soweit ich weiß muss der absender auch ein PW angeben, in der programmierung die ich angepasst habe ist aber keinerlei PW abfrage

hier wird beim sender nur nach e-mail und name gefragt

für eine PW-abfrage fehlt mir der befehl


sollte ich evtl. mal den projekt ordner hochladen? dan können andere selbst versuchen es weiter zu entickeln...(nur ne idee)


bakachan - Mo 29.08.11 14:45

user profile iconKingQuantum hat folgendes geschrieben Zum zitierten Posting springen:
Smtp Exception wurde nicht behantdelt. / Fehler beim Senden von Mail.
könnte der fehler sein

"Könnte" bringt uns hier nicht weiter.

Ich würde empfehlen den Try/Catch Block während der Fehlersuche zu entfernen. Dadurch siehst du genau wo und welcher Fehler auftritt.

Ich nehme mal an du hast im hier geposteten Code die e-Mail-Adresse und das Passwort durch die Beispieltexte ersetzt.

C#-Quelltext
1:
MailAddress fromAddress = new MailAddress("example@hotmail.de""example");                    

Bist du dir sicher das in deinem Code die richtigen Daten stehen?


KingQuantum - Mo 29.08.11 15:09

dort hab ich normalerweise meine hotmailadresse
alsm empfänger

eaxample steht für name nicht für passwort aber ich hab es auch schon mit dem passenden paswort probiert

das funktionierte leider nicht

hab den richtigen postausgangsserver für hotmail gefunden

smtp.live.com

muss ich dafür den befehl

smtp.Host =  "smtp.mail.hotmail.de";

gengen


C#-Quelltext
1:
smtp.Host =  "smtp.live.com";                    


laut internet ist der richtige port 587

fehler besteht immernoch

oder muss ich statt smtp.Host eine andere eingabe machen?

Edit: hab den befehl Try entfernt sowie Catch nun bekomme ich den fehler:

"Für den SMTP-Server ist eine sichere Verbindung erforderlich, oder der Client wurde nicht authentifiziert. Die Serverantwort war: 5.7.0 Must issue a STARTTLS command first"


bakachan - Mo 29.08.11 15:26

Was mir grade noch auffällt:
Du hast keine Anmeldedaten bereitgestellt.
Dein smtpClient braucht die Credentials mit Benutzername und Passwort (müsste direkt eine Property "Credentials" drann sein)


KingQuantum - Mo 29.08.11 15:32

funktioniert das Programm ohne try catch?

wen ja was muss ich statt "catch (Exception ex)" eingeben?

und die credentials versuch ich mich ma zu kümmern (danke)


bakachan - Mo 29.08.11 15:42

Natürlich funktioniert das Programm ohne Try/Catch.

Try/Catch ist nur dazu da auftretende Fehler abzufangen und zu behandeln. Dabei sollte man sich aber auf möglichste kleine Bereiche und spezielle Exceptiontypen beschränken.

Bei deinem Code ist es allerdings recht sinnvoll bestimmte Fehlermeldungen abzufangen und zu behandeln z.B. wenn der Server nicht reagiert oder keine Verbindung aufgebaut werden konnte.
Das kannst du aber am Ende machen wenn der Rest funktioniert. (vorher behindert es meistens die Fehlersuche)


KingQuantum - Mo 29.08.11 15:51

gut dan hab ich hier schonmal den nächsten fehler^^

hab mir die Programmierung aus der Libary geholt (das geht am einfachsten)

nun hab ich den fehler:

Fehler 1
Der Name "CredentialCache" ist im aktuellen Kontext nicht vorhanden.

-.-


bakachan - Mo 29.08.11 15:59

Ohne die zugehörige Codezeile sagt das nicht viel aus.

Und wie kommst du eigentlich auf CredentialCache?

C#-Quelltext
1:
2:
      System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();
      client.Credentials = new System.Net.NetworkCredential("Benutzername""Passwort");

So in etwa müsste das aussehen.


KingQuantum - Di 30.08.11 13:01

ich hab jetzt das berühmte authentifizierungs-Problem -.-

Für den SMTP-Server ist eine sichere Verbindung erforderlich, oder der Client wurde nicht authentifiziert. Die Serverantwort war: 5.7.0 Must issue a STARTTLS command first

ich glaube das ist auch nen bischen überladen:

C#-Quelltext
1:
2:
3:
4:
5:
        System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();
        client.Credentials = new System.Net.NetworkCredential("Example@hotmail.de""ExamplePW");
        SmtpClient smtpClient = new SmtpClient();
        MailMessage message = new MailMessage();
        MailAddress fromAddress = new MailAddress("Example@hotmail.de""exampleName");


die letze Zeile kan ich auch entfernen aber dan muss auch der Eintrag raus: message.From = fromAddress; oder dort Sender adresse nochmal eingeben


bakachan - Di 30.08.11 13:34

Jetzt stellt sich mir die Frage warum du 2 SmtpClients erstellst. Und ich wette du verwendest nur einen davon weiter (den ohne die Credentials).

Du solltest langsam mitkriegen das einfaches rauskopieren von Codeschnipseln dich nicht weiter bringt (ist ja nicht das erste mal). Du musst das ganze schon an deine eigene Lösung anpassen und dafür erstmal verstehen was da eigentlich steht.


KingQuantum - Di 30.08.11 16:02

hmm ich muss gestehen strg-C und strg-V war wohl nicht sonne gute idee...

hatte beim programm gedacht das das thema e-mail in 5 min erledigt ist
und dan den rest lange schreiben...

und nun hab ich fast alles andere fertig

nurnoch nein paar "kleinigkeiten"


Horschdware - Di 30.08.11 16:06

user profile iconKingQuantum hat folgendes geschrieben Zum zitierten Posting springen:
ich muss gestehen strg-C und strg-V war wohl nicht sonne gute idee...

Eine wundervolle Einsicht :zustimm:


KingQuantum - Mi 31.08.11 15:36

Jetzt hab ich ein Problem im namespace:
Zitat:

Fehler 1 Keine Überladung für "btn10E12K_Click" stimmt mit dem Delegaten "System.EventHandler" überein. F:\C-Sharp\oO\AP-LoaderV2.1\APLoaderV2.1.2.0.Designer.cs 159 37 AP-LoaderV2.1


ich weiß das ich den butten einmal nutze um eine auswahl zu treffen und danach soll dieser eine andere funktion übernehmen

und zwar das e-mail senden

ich den button gewählt wei er eigentlich eine passende Position hat, sollte ich einen neuen button erstellen?

im namespace mag ich nicht so gerne etwas verändern, da man mir geraten hat das das lieber nur fortgeschrittene machen sollen

ich könnte ein teil des codes Posten aber nur welchen? vom programm oder vom namespace?


bakachan - Mi 31.08.11 15:53

Das Problem hat nichts mit einem Namespace zu tun sondern damit das deine Funktion "btn10E12K_Click" nicht die Anforderungen des EventHandlers erfüllt.

Der normale EventHandler setzt eine Funktion vorraus die als Rückgabetyp void hat und 2 Parameter, der erste vom Typ Object der zweite vom Typ EventArgs, hat.


stes - Mi 31.08.11 22:09

Hallo,

wenn du den Fehler mittlerweile behoben hast sehe meinen Post einfach als Zusatzinformation an.

user profile iconbakachan hat folgendes geschrieben Zum zitierten Posting springen:

Du solltest langsam mitkriegen das einfaches rauskopieren von Codeschnipseln dich nicht weiter bringt (ist ja nicht das erste mal). Du musst das ganze schon an deine eigene Lösung anpassen und dafür erstmal verstehen was da eigentlich steht.


Ganz meine Meinung.

user profile iconKingQuantum hat folgendes geschrieben Zum zitierten Posting springen:

hatte beim programm gedacht das das thema e-mail in 5 min erledigt ist
und dan den rest lange schreiben...


Wenn du keinerlei Erfahrung damit hast sind 5 min wohl nur der Fall wenn du einfach ein bestehendes Codebeispiel anpasst, aber selbst ein solches scheinst du nicht gesucht zu haben...
Mit ein wenig mehr Eigeninitiative findet man Seiten auf denen das ganze gut erklärt wird (mit auf die eigenen Zwecke anpassbaren Codebeispielen).

Gute Tuts bietet u.a. codeplanet.eu, siehe zum aktuellen Thema

Codeplanet Tutorial zu TCP/Socketprogrammierung, Kapitel "EMails versenden" [http://www.codeplanet.eu/tutorials/csharp/4-tcp-ip-socket-programmierung-in-csharp.html?start=6]

Ein bisschen Recherche kommt auch dir selbst zugute, es ist wohl effizienter und weniger zeitintensiv ein paar gute Artikel zu lesen als jede Fehlermeldung zu posten und deren Ursache von anderen (denen die genauen Informationen z.T. sogar noch fehlen) klären zu lassen.

Ich hoffe der o.g. Artikel bringt dich weiter ;)

Gruß
stes


KingQuantum - Fr 02.09.11 13:01

neue hürde neues Probem

aus der liste der SMTP und POP3 server kennt man z.B. diesen satz

Postausgangsserver: smtp.live.com (STARTTLS; Port 587)

es ist eine einfache Info oder?

im Program sind jetzt an verschiedenen positionen folgende befehle Eingearbeitet:


C#-Quelltext
1:
2:
 int port = 587;
                string strSmtpServer = "smtp.live.com";

eigentlich ist dann schon alles getan oder?
aber nein ist es nicht.
dank try catch hat catchy mit ma nen kleinen (nicht auf die winForm seite passenden) fehlercode ausgegeben

die Kurzform lautet soviel wie: STRATTLS nirgens gefunden.


Edit habs gefunden danke Prog Läuft :)