Laden...

Email Sender funktioniert aufgrund von SMTP/SSL nicht

Erstellt von Fayzon vor 7 Jahren Letzter Beitrag vor 7 Jahren 2.841 Views
F
Fayzon Themenstarter:in
9 Beiträge seit 2016
vor 7 Jahren
Email Sender funktioniert aufgrund von SMTP/SSL nicht

Hallo ich finde in meinem Code nicht den Fehler, weil wenn ich eine Email senden möchte ruft er immer den Fehler aus den ich ganz unten definiert habe, ich bitte um Hilfe. Danke

				MailMessage mail = new MailMessage();
			
				mail.From = new MailAddress(email.Text+"@"+cb_email1.SelectedItem);
				mail.To.Add(empfemail.Text+"@"+cb_email2.SelectedItem);
    			mail.Subject = betreff.Text;
    			mail.Priority = MailPriority.Low;
    			mail.Body = nachricht.Text;
				
    			SmtpClient client = new SmtpClient("smtp."+cb_email1.SelectedItem, 25);
   			 			
    			try 
           		 {   
					client.Credentials = new System.Net.NetworkCredential(email.Text+"@"+cb_email1.SelectedItem, tb_passwort.Text);    				   				
    				client.Send(mail);
    				client.EnableSsl = true; 
    		    MessageBox.Show("Ihre Email wurde erfolgreich gesendet!","Gesendet", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
    			}
    			catch
    			{
					MessageBox.Show("Die Email konnte nicht erfolgreich gesendet werden!", "Fehler!", MessageBoxButtons.OK, MessageBoxIcon.Error);
					return;
    			}

2.207 Beiträge seit 2011
vor 7 Jahren

Hallo Fayzon,

dann fang doch mal das Exceptionobjekt ab und schau was drinsteht?! Port, Credentials und Servername sind eine häufige Fehlerquelle...und SSL. Das solltest du vor dem Senden definieren.

catch(Exception exception)
                {
                    //...
                }

PS: Pass bitte den Titel an. Er suggeriert einem Lesenden, dass alles in Ordnung ist...

Gruss

Coffeebean

16.828 Beiträge seit 2008
vor 7 Jahren

Sorry, aber Code einfach reinklatschen und sagen "wo ist der Fehler?" ist nicht 😉
Wir machen nicht Deinen Job. Wir erwarten hier auch von Hilfesuchenden etwas Eigeninitiative.

Du hast ein Catch definierst, fängst aber die Exception nicht ab.
Dementsprechend kannst Du auch nicht wisse, was der Fehler ist.

Also schreibe statt catch auch dementsprechenden catch (Exception e) und schau Dir mit dem Debugger den Fehler an.
[Artikel] Debugger: Wie verwende ich den von Visual Studio?

F
Fayzon Themenstarter:in
9 Beiträge seit 2016
vor 7 Jahren

Nein das sollt ihr auch nicht 😄
Also der Fehler lautet: > Fehlermeldung:

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

2.207 Beiträge seit 2011
vor 7 Jahren

Hallo Fayzon,

bitte benutze die richtigen Code-Tags.
Bitte wähle mal einen korrekten Titel (Der jetzige "Email Programm Funktioniert" ist schlichtweg falsch)
Bitte setz das SSL = true vor dem Senden. (Und achte auf den Port)
Prüfe die Credentials.
Bitte lies die Antworten hier.

Gruss

Coffeebean

F
Fayzon Themenstarter:in
9 Beiträge seit 2016
vor 7 Jahren

Ok sorry hab das übersehen mit der Fehlermeldung aber danke für den Lösungsvorschlag
Edit: Nun habe ich ein bisschen was am Programm verändert:

				MailMessage mail = new MailMessage();
    			SmtpClient client = new SmtpClient("smtp."+cb_email1.SelectedItem);
   				if (cb_email1.Text == "web.de")
				{
   					client.Port = 587;
				}
   				
   				if (cb_email1.Text == "gmail.com")
   				{
   					client.Port = 587;
   				}
   				if (cb_email1.Text == "gmx.net")
   				{
   					client.Port = 465;
   				}
   				if (cb_email1.Text == "mail.yahoo.com")
   				{
   					client.Port = 465;
   				}   				
				client.Host = email.Text+"@"+cb_email1.SelectedItem;
				client.UseDefaultCredentials = false;
				mail.From = new MailAddress(email.Text+"@"+cb_email1.SelectedItem);
				mail.To.Add(empfemail.Text+"@"+cb_email2.SelectedItem);
    			mail.Subject = betreff.Text;
    			mail.Body = nachricht.Text;
    			

    			client.EnableSsl = true;	
    			try
    			{
				NetworkCredential basicCredential = new NetworkCredential(email.Text+"@"+cb_email1.SelectedItem, tb_passwort.Text);    				
				client.UseDefaultCredentials = false;
				client.Credentials = basicCredential;
				client.Send(mail);
    		    MessageBox.Show("Ihre Email wurde erfolgreich gesendet!","Gesendet", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
    			}
    			catch(Exception ex)
    			{
    				MessageBox.Show("Die Email konnte nicht erfolgreich gesendet werden! Der Fehler lautet: \n"+'"'+ ex.Message+'"', "Fehler!", MessageBoxButtons.OK, MessageBoxIcon.Error);
					return;
    			}

Ich habe außerdem die Ports für die einzelnen Provider definiert. Nun bekomme ich nur noch als Fehlermeldung: > Fehlermeldung:

Fehler beim Senden von Mail.

B
88 Beiträge seit 2016
vor 7 Jahren

Gibt es auch eine


ex.InnerException.ToString()

?

16.828 Beiträge seit 2008
vor 7 Jahren

ToString funktioniert; ist aber eher suboptimal, besser wäre direkt auf InnerException.Message zuzugreifen.