SMTP Mail-Versand


magic_halli

Erfahrenes Mitglied
Hi,

ich habe folgendes kleine Programm, welches eigentlich eine eMail versenden sollte, was es aber leider nicht tut:

Code:
class App
{
	public static void Main()
	{
		string sAbsender;
		string sAdresse;
		string sBetreff;
		string sText;
		
		System.Web.Mail.SmtpMail.SmtpServer = "smtp.mail.yahoo.de";	//smtp-Server URL
		System.Console.WriteLine("kleiner eMail-Sender");
		System.Console.Write("Absender: ");
		sAbsender = System.Console.ReadLine();
		System.Console.Write("E-Mail Adresse: ");
		sAdresse = System.Console.ReadLine();
		System.Console.Write("Betreff: ");
		sBetreff = System.Console.ReadLine();
		System.Console.Write("Text: ");
		sText = System.Console.ReadLine();
		System.Console.Write("E-Mail versenden (j/n)?");
		if(System.Console.ReadLine() == "j")
		{
			try
			{
				System.Console.WriteLine("E-Mail übertragen...");
				System.Web.Mail.SmtpMail.Send(sAbsender,sAdresse,sBetreff,sText);
				System.Console.WriteLine("E-Mail wurde übertragen.");
			}

			catch(System.Exception e)				
			{
				System.Console.WriteLine(e.Message);
			}
		}
		else
		{
			System.Console.WriteLine("E-Mail wurde nicht übertragen!");
		}
	
	}
}
Ich bekomme nach bestätigen zum senden der eMail folgende Errormessage: "Auf das Objekt CDO.Message konnte nicht zugegriffen werden".

Wieso sendet es keine eMail raus?

Danke, Rico.
 

Alexander Schuc

crazy-weasel
Hi.

Bei deinerm Catch-Block, gib bitte mal die Nachricht der InnerExcetption aus.

Code:
System.Console.WriteLine(e.InnerException.Message);
Das sollte einen aussagekräftigeren Text ausgeben.

Im übrigens gibts unter http://www.systemwebmail.com eine riesige FAQ zum Mailversand unter .net.

MfG,
Alex
 

Christian Kusmanow

Erfahrenes Mitglied
Ich hab jetzt auch mal nach diesem Beispiel von C-Sharp Corner probiert.

Leider bekomm ich auch die gleiche Meldung. Probier's mal weiter. Ich möcht wetten das jemand anderes die Lösung weiss...

Code:
using System;
using System.Web.Mail;

namespace Console_eMail
{
	/// <summary>
	/// Summary description for Class1.
	/// </summary>
	internal class Class1
	{
		/// <summary>
		/// The main entry point for the application.
		/// </summary>
		[STAThread]
		private static void Main(string[] args)
		{
			Console.WriteLine("Kleiner eMail-Sender\n--------------------");
			Console.Write("Absender: ");
			string sAbsender = Console.ReadLine();
			Console.Write("E-Mail Adresse: ");
			string sAdresse = Console.ReadLine();
			Console.Write("Betreff: ");
			string sBetreff = Console.ReadLine();
			Console.Write("Text: ");
			string sText = Console.ReadLine();

			Console.WriteLine( string.Format("\nAbsender:\t{0}\nE-Mail Adresse:\t{1}\nBetreff:\t{2}\nText:\t\t{3}\n",
				sAbsender, sAdresse, sBetreff, sText));

			Console.Write("E-Mail versenden (j/n)?");

			if (Console.ReadLine() == "j"){
				try{
					MailMessage Message = new MailMessage();

					Message.From = sAbsender;
					Message.To = sAdresse;
					Message.Subject = sBetreff;
					Message.Body = sText;
					Message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");//basic authentication
					Message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "my_username_here"); //set your username here
					Message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "super_secret");//set your password here

					Console.WriteLine("E-Mail übertragen...");
					SmtpMail.SmtpServer = "pop.gmx.net";
					SmtpMail.Send(Message);
					Console.WriteLine("E-Mail wurde übertragen.");
					Console.Read();
				}
				catch (Exception ex){
					Console.WriteLine( string.Format( "{0}\n\n{1}", ex.Message, ex.InnerException.ToString()) );
					Console.Read();
				}
			}
			else{
				Console.WriteLine("Programm wird jetzt beendet!");
				Console.Read();
			}
		}
	}
}
MfG cosmo
 
Zuletzt bearbeitet:

Alexander Schuc

crazy-weasel
Cosmo, auch du gib mal die Nachricht der InnerException aus.
Diese eine Fehlermeldung bekommt man so ziemlich immer, wenn was nicht geklappt hat.
 

Alexander Schuc

crazy-weasel
@ Cosmo - http://www.systemwebmail.com/faq/3.8.aspx#3.8
Code:
	MailMessage mail = new MailMessage();
	mail.To = "me@mycompany.com";
	mail.From = "you@yourcompany.com";
	mail.Subject = "this is a test email.";
	mail.Body = "Some text goes here";
	mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");	//basic authentication
	mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "my_username_here"); //set your username here
	mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "super_secret");	//set your password here

	SmtpMail.SmtpServer = "mail.mycompany.com";  //your real server goes here
	SmtpMail.Send( mail );
@magic_halli
Magst davon auch die InnerException aufrufen, vielleicht steht noch mehr. Aber probier vielleicht auch mal die Anzumelden.
 

magic_halli

Erfahrenes Mitglied
Also bei mir das irgendwie nicht...
Die Methode mail.Fields.Add(...) bzw. System.Web.Mail.MailMessage wird nicht unterstützt bzw. ist nicht vorhanden!?

@cosmochaosmaker:
Bei Dir funktioniert der Quellcode mit der Authentification wohl?
 

Christian Kusmanow

Erfahrenes Mitglied
Also bei 1und1 hat's nich geklappt. Die Exception meinte es gibt den User (mich) nicht.
Glaube da muss ich noch igendwas Sicherheitsspezifisches einstellen. Das lässt sich aber noch herrausfinden denke ich.

Aber als ich es mit GMX probiert habe, hat es auf anhieb geklappt.
Hab den Quellcode oben angepasst.

MfG cosmo
 

Masl

Mitglied
Hallo zusammen,

ich hab genau das gleich Problem und leider kann ich damit nichts anfangen:

mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1")
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "username");
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "passwort");

Ich versuche auch eine Mail über dem SMTP von GMX zu versenden, und bekomme immer die gleiche FehlerMessage wie oben schon beschrieben, auch mit diesem Code...

kann mir einer sagen was ich da eintippen muss?
ich bekomme die gleiche InnerException wie magic_halli, auch mit Authentifizierung?
 
Zuletzt bearbeitet:

Christian Kusmanow

Erfahrenes Mitglied
Hallo Masl!

So ich habe den 3.Post nochmal ein bissle abgeändert sodas man dan code sofort für gmx verwenden kann.
Es muss gehen, ich hab den code grad nochmal explizit ausprobiert.
Überprüfe bitte deine Logindaten!

MfG, cosmo
 

Masl

Mitglied
So ich habe mein Problem jetzt auch gelöst.
Lag nicht an meinem Code, sondern an einem gesperrtem SMTP-Port, was ich dummerweise nicht wusste.
Für Leute die es brauchen können, hier noch mein Code. Ich habe das ganze über den SMTP von GMail gemacht.

Code:
public void SendSmtpMail()
		{
			
				// Erstellen einer neuen MailMessage
				MailMessage mail = new MailMessage();
				mail.To = "xxx@xxx.de";
				mail.From = "xxx@gmail.com";
				mail.Subject = "this is a test email.";
				mail.Body = "this is my test email body";

				SmtpMail.SmtpServer = "smtp.gmail.com";  //verwendeter SMTP-Server

				mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");				//basic authentication
				mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "xxx@gmail.com");	//set your username here
				mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "xxx");				//set your password here
				mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", "465");				//set SMTP-Port	
				mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", "true");					//set SSL Use
			
			try
			{
				SmtpMail.Send(mail);
			}

			catch(Exception ex)
			{
				MessageBox.Show(ex.InnerException.Message);
				MessageBox.Show(ex.Message.ToString());
			}
 

Alexander Schuc

crazy-weasel
cosmochaosmaker hat gesagt.:
Jaja, Du musst nicht...

Ich hab's gefunden und könnt mir an den Kopf greifen. :p
Hätt ich blos nicht auf Google sondern gleich auf TheCodeProject nachgeschaut. :rolleyes: Irgendwann ist meine Startseite TheCodeProject.... :D
Da gibt's einen Artikel über SMTP sammt Links wo man die CDOSYS Schema's nachlesen kann.
SMTP Authentication using System.Web.Mail (CDOSYS)

MfG, cosmo
Bist schonmal meinem Link zu dieser .. moment, ich zitiere
Im übrigens gibts unter http://www.systemwebmail.com eine riesige FAQ zum Mailversand unter .net.
gefolgt, oder hast mein Snippet gelesen?!

Naja.. egal.
 

Christian Kusmanow

Erfahrenes Mitglied
Oh mann, auch das noch.
Natürlich habe ich dein Snipped gelesen. Ich hab es sogar umgesetzt wie Du sehen kannst. :rolleyes:
Mir fehlten noch ein paar Optionen für 1und1, welche ich aber nicht auf http://www.systemwebmail.com gefunden hab.
Mann mann mann, diese besch. FAQ darunter hab ich jetzt total übersehen.

Schön das Du dich auch mal wieder in's Forum verirrst.
 

Reverent

Erfahrenes Mitglied
Hallo Ihr lieben Liebenden :),
also ich versuche mich gerade auch an dem E-Mail Versand aber da wo bei euch
System.Web.Mail. usw steht, finde ich bei mir kein .Mail :-(
habt Ihr vielleicht eine Lösung ?

Hat sich schon Erledigt ich habe es gefunden.

Ja diese Problem hat sich gelöst aber es tauchen immer noch mehr Problebe auf und zwar:

Ich habe ein GMX Konto und da habe ich mir den Code hier mal etwas näher angeschaut

private void Page_Load(object sender, System.EventArgs e)
{
MailMessage mail = new MailMessage();
mail.To = "me@mycompany.com";
mail.From = "you@yourcompany.com";
mail.Subject = "this is a test email.";
mail.Body = "Some text goes here";
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1"); //basic authentication
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "my_username_here"); //set your username here
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "super_secret"); //set your password here

SmtpMail.SmtpServer = "mail.mycompany.com"; //your real server goes here
SmtpMail.Send( mail );

aber er bringt immer noch den Fehler mit dem CDO Objekt.
Und was bedeuten die xxx die in mail.Fields.Add("xxx","y"); stehen?

MfG
Markus
 
Zuletzt bearbeitet:

immnn

Mitglied
Hallo,

ich habe hier das Problem dass der Compiler mir sagt es würde den Namespace System.Web.Mail nicht existieren. Habe die Visual C# 2005 Beta 2 mit dem .Net Framework 2.0 drauf, doch selbst mit Visual Studio 2003 findet der Compiler den Namespace .Mail nicht.

[Edit] Das .Net Team hat wohl einiges geändert beim .Net Framework 2.0 und so wurden auch die Klassen unter System.Web.Mail in System.Net.Mail verschoben und editiert. Werd mich mal dahinter klemmen und mal was versuchen ;)

[edit 2]... soweit alles gut. Hier mal das was ich bereits zustande bekommen habe:
Code:
using System.Net.Mail;
... 
       public void senden(string from, string to,
                     string subject, string body)
        {
            string mailServerName = "mail.gmx.com";
            using (MailMessage message = new MailMessage(from,
             to, subject, body))
            {
                message.IsBodyHtml = true;
                SmtpClient mailClient = new SmtpClient();
                mailClient.Host = mailServerName;
                mailClient.UseDefaultCredentials = true;
                mailClient.DeliveryMethod =
                   SmtpDeliveryMethod.PickupDirectoryFromIis;
                
                mailClient.Send(message);
            }
        }
...
Das letzte problem, was noch zu überwinden ist, wie ich mich an einem SMTP Server anmelde. Wenn Jemand eine Lösung findet, wäre ich ihm sehr dankbar :)

[Letzter Edit für heute]
Hab das ganze nun dadurch gelöst, das der Benutzer sich seinen eigenen SMTP Server aufsetzen muss. Dazu kann er den von M$ integrierte IIS Dienst verwenden.
Folgedner Code reicht aus um eine eMail zu versenden:

Code:
SmtpClient email = new SmtpClient("localhost");
email.Send("From", "To", "Subject","Text");
 
Zuletzt bearbeitet:

coolazid

Grünschnabel
Hi Leute,

ich versuche auch gerade mit C# E-Mails zu versenden.
Klappt soweit auch, jedoch wird die E-Mail nicht von der von mir angegebenen Adresse verschickt, sondern irgendwie von der als standard eingerichteten E-Mail :confused: !

Mein Code
Code:
MailMessage mail = new MailMessage();
	mail.To = "email@web.de";
	mail.From = "email@t-online.de";
	mail.Subject = "Betreff";
	mail.Body = "Text Text Text";

	mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");	//basic authentication
	mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "mein benutzername"); //set your username here
	mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "mein passwort");	//set your password here

	SmtpMail.SmtpServer = "smtp.t-online.de";  //your real server goes here
	SmtpMail.Send( mail );
Das Verschicken der E-Mail klappt, jedoch wenn ich meine E-Mails bei web.de prüfe kommt die E-Mail an, aber nicht von meiner t-online E-Mail, sondern von einer anderen t-online E-Mail.

Hat vllt jemand ne Ahnung woran das liegt und wie man das übergehen kann?

MfG
Alex
 

Christian Kusmanow

Erfahrenes Mitglied
Hallo coolazid!

Vielleicht hat Dir ja jemand eine Email geschickt. :D
Nee, Spaß.

Schau Dir nochmal den [post=991252]3. Post[/post] und den [post=1031265]13. Post[/post] an.
Da gibt es eigentlich nicht viel falsch zu machen.

MfG, cosmo