Entwickler-Ecke

Netzwerk - E-Mail Funktion


sharpx - Do 01.01.09 16:53
Titel: E-Mail Funktion
Hallo liebe Community,

Folgender Code gibt mir zig hundert Fehler:

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:
using System;
using System.IO;
using System.Web;
using System.Net.Mail;

namespace mailtest
{
    class Program
    {
        public static void Main(string[] args)
        {
            MailMessage Message = new MailMessage();
                    string test = "test";
                    Message.From = test;
                    Message.To = "fendalex@vol.at";
                    Message.Subject = "test";
                    Message.Body = "test";
                    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();

        }
    }
}


Zitat:

Der Typ string kann nicht implizit in System.Net.Mail.MailAddress konvertiert werden. (CS0029) - C:\Dokumente und Einstellungen\lipo\Eigene Dateien\SharpDevelop Projects\mailtest\Program.cs:19,21
Der Typ string kann nicht implizit in System.Net.Mail.MailAddressCollection konvertiert werden. (CS0029) - C:\Dokumente und Einstellungen\lipo\Eigene Dateien\SharpDevelop Projects\mailtest\Program.cs:20,19
Für die Eigenschaft oder den Indexer System.Net.Mail.MailMessage.To kann keine Zuweisung ausgeführt werden. Sie sind schreibgeschützt. (CS0200) - C:\Dokumente und Einstellungen\lipo\Eigene Dateien\SharpDevelop Projects\mailtest\Program.cs:20,6
System.Net.Mail.MailMessage enthält keine Definition für Fields. (CS0117) - C:\Dokumente und Einstellungen\lipo\Eigene Dateien\SharpDevelop Projects\mailtest\Program.cs:23,14
System.Net.Mail.MailMessage enthält keine Definition für Fields. (CS0117) - C:\Dokumente und Einstellungen\lipo\Eigene Dateien\SharpDevelop Projects\mailtest\Program.cs:24,14
System.Net.Mail.MailMessage enthält keine Definition für Fields. (CS0117) - C:\Dokumente und Einstellungen\lipo\Eigene Dateien\SharpDevelop Projects\mailtest\Program.cs:25,14
Der Name SmtpMail ist im aktuellen Kontext nicht vorhanden. (CS0103) - C:\Dokumente und Einstellungen\lipo\Eigene Dateien\SharpDevelop Projects\mailtest\Program.cs:28,6
Der Name SmtpMail ist im aktuellen Kontext nicht vorhanden. (CS0103) - C:\Dokumente und Einstellungen\lipo\Eigene Dateien\SharpDevelop Projects\mailtest\Program.cs:29,6


Dann ahbe ich mal folgendes installiert:
.net framework 3.5 sp1 + neuste sharpdev. version und dsa ding kompiliert ohne fehler


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
public static void Main(string[] args)
        {
            MailMessage Message = new MailMessage();
                    string test = "test";
                    Message.From = test;
                    Message.To = "a.f@vol.at";
                    Message.Subject = "test";
                    Message.Body = "test";
                    Message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate""1");//basic authentication
                    Message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername""user"); //set your username here
                    Message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword""pass");//set your password here

                    Console.WriteLine("E-Mail übertragen...");
                    SmtpMail.SmtpServer = "pop.vol.at";
                    SmtpMail.Send(Message);
                    Console.WriteLine("E-Mail wurde übertragen.");
                    Console.ReadLine();

        }


Gibt mir jedoch folgende Fehler:
Zitat:

System.Web.HttpException: Der Transport konnte keine Verbindung zum Server herstellen.
---> System.Reflection.TargetInvocationException: Ein Aufrufziel hat einen Ausnahmefehler verursacht. ---> System.Runtime.InteropServices.COMException: Der Transport konnte keine Verbindung zum Server herstellen.

bei LateBoundAccessHelper.CallMethod
bei CdoSysHelper.Send
bei System.Web.Mail.SmtpMail.Send
bei mailtest.Program.Main in c:\Dokumente und Einstellungen\lipo\Desktop\SharpDevelop Projects\mailtest\Program.cs:Zeile 29


Ich sehe da aber keinen Sinn, da es möglich ist auf SMTP und POP von ausen zuzugreifen!
Zitat:

telnet pop.vol.at 110
+OK vol.at POP3 Server 4.1.8 bereit <26140872.1230637429@stalker1.tele.net>

telnet pop.vol.at 25
Verbindung ok




Danke für Eure Hilfe!

Moderiert von user profile iconUGrohne: Code- durch C#-Tags ersetzt


jaenicke - Do 01.01.09 16:58

Hallo und :welcome:!

Was mir auffällt ist, dass du keinen Port festlegst. Ich gehe davon aus, dass das gemacht werden muss.

Wie steht sicherlich in der Doku.


// EDIT:
Nein, muss man offenbar nicht. Das einzige was mir in der Doku [http://msdn.microsoft.com/de-de/library/system.web.mail.smtpmail(VS.80).aspx] zunächst sofort aufgefallen ist, ist, dass SmtpMail veraltet ist und nicht mehr verwendet werden sollte.


UGrohne - Do 01.01.09 17:05

Yapp, verwende SmptClient statt SmtpMail, das sollte die Sache vielleicht beheben.


jaenicke - Do 01.01.09 17:07

Und in der genannten mit .NET 2.0 eingeführten Klasse SmtpClient [http://msdn.microsoft.com/de-de/library/system.net.mail.smtpclient(VS.80).aspx] gibt es auch die Möglichkeit den Port ggf. einzustellen wie ich gerade sehe.

Das andere: Port 25 ist doch unverschlüsselt und 110 verschlüsselt, oder? Vielleicht hat das damit etwas zu tun?


UGrohne - Do 01.01.09 17:17

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Und in der genannten mit .NET 2.0 eingeführten Klasse SmtpClient [http://msdn.microsoft.com/de-de/library/system.net.mail.smtpclient(VS.80).aspx] gibt es auch die Möglichkeit den Port ggf. einzustellen wie ich gerade sehe.

Das andere: Port 25 ist doch unverschlüsselt und 110 verschlüsselt, oder? Vielleicht hat das damit etwas zu tun?

Nein, Port 25 ist SMTP, Port 110 ist POP3. Es gibt noch die TLS-verschlüsselten Alternativen auf 465 bzw. 995.

Außerdem ist Deine Verwendung von MailMessage nicht ganz korrekt, schau mal am Besten in die MSDN rein, da gibts ein gutes Beispiel zur Klasse MailMessage.


sharpx - Do 01.01.09 18:03

user profile iconUGrohne hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Und in der genannten mit .NET 2.0 eingeführten Klasse SmtpClient [http://msdn.microsoft.com/de-de/library/system.net.mail.smtpclient(VS.80).aspx] gibt es auch die Möglichkeit den Port ggf. einzustellen wie ich gerade sehe.

Das andere: Port 25 ist doch unverschlüsselt und 110 verschlüsselt, oder? Vielleicht hat das damit etwas zu tun?

Nein, Port 25 ist SMTP, Port 110 ist POP3. Es gibt noch die TLS-verschlüsselten Alternativen auf 465 bzw. 995.

Außerdem ist Deine Verwendung von MailMessage nicht ganz korrekt, schau mal am Besten in die MSDN rein, da gibts ein gutes Beispiel zur Klasse MailMessage.


Kannst du mir ein Beispiel zeigen?
Ja Port 25 = SMTP
und Port 110 = POP3

Bezieht sich lediglich darauf ob emails gesendet oder empfangen werden sollten.
Verschlüsselt wäre es TLS bzw. SSL bzw. andere Verfahren, die vom Server unterstützt werden.


UGrohne - Do 01.01.09 19:24

Hier, sogar mit Authentifizierung ;)

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
            MailMessage msg = new MailMessage();
            msg.From = new MailAddress("EMail1");
            msg.To.Add(new MailAddress("EMail2"));
            msg.Subject = "Testmail";
            msg.Body = "Dies ist eine Testmail";

            SmtpClient client = new SmtpClient();
            client.Host = "Mailserver";
            client.Credentials = new NetworkCredential("Benutzername""Passwort");
            client.Send(msg);


sharpx - So 04.01.09 14:42

Hallo,


Bin leider erst jetzt zum testen gekommen.


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:
using System;
using System.IO;
using System.Net;
using System.Net.Mail;

namespace teset
{
  class Program
  {
    public static void Main(string[] args)
    {
      MailMessage msg = new MailMessage();
            msg.From = new MailAddress("EMail1@test.de");
            msg.To.Add(new MailAddress("f.a@vol.at"));
            msg.Subject = "Testmail";
            msg.Body = "Dies ist eine Testmail";

            SmtpClient client = new SmtpClient();
            client.Host = "pop.vol.at";
            client.Credentials = new NetworkCredential("user""pass");
            client.Send(msg);
    }
  }
}


Bekomme folgenden Fehler:

System.Net.Mail.SmtpException: Failure sending mail. ---> System.IO.IOException: Unable to read data from the transport connection: net_io_connectionclosed.
at System.Net.Mail.SmtpClient.Send
at teset.Program.Main in c:\Documents and Settings\Owner\My Documents\SharpDevelop Projects\teset\teset\Program.cs:line 30

Moderiert von user profile iconUGrohne: Beitragsformatierung überarbeitet.


sharpx - So 04.01.09 15:07

Mein Fehler habe aus Versehen pop.vol.at anstatt von smtp.vol.at geschrieben.
Der Code hat ansonsten funktioniert.


Danke für eure Hilfe