Hallo!
Ich habe ein Problem mit dem SmtpClient unter 3.5.
Wenn ich eine Email versenden will, bekomme ich bei einigen Emails folgende Fehlermeldung.
System.Net.Mail.SmtpFailedRecipientException: Postfach nicht verfügbar. Die Serverantwort war: must be authenticated
(NetworkCredential habe ich beachtet)
Unter .Net 4 funktioniert die Geschichte.
Ich fand schnell heraus, woran das lag.
Das Problem ist, dass die Emails, wo es nicht funktionierte im Passwort Umlaute wie (ä/ü/ö etc.) hatten.
Meine Frage ist nun ob ich unter 3.5 irgend etwas bei NetworkCredential einstellen kann, dass er die Umlaute beim Anmelden am Server richtig interpretiert.
thx
Mighty
Hier ein einfaches Beispiel wie ich die mails ‚zu Fuß’ über den Strato Server verschicke. Versuch mal damit.
Nebenbei werden auch die aktuellen GPS Daten und der X-Mailer an die mail header angehängt.
using System.Net;
using System.Net.Sockets;
IPHostEntry host = Dns.GetHostEntry("smtp.strato.de");
IPEndPoint endPoint = new IPEndPoint(host.AddressList[0], 25);
Socket s = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
s.Connect(endPoint);
WarteAufServerAntwort(s);
Senddata(s, string.Format("HELO {0}\r\n", Dns.GetHostName()));
WarteAufServerAntwort(s);
// SMTP Authentifizierung
Senddata(s, string.Format("AUTH LOGIN \r\n"));
WarteAufServerAntwort(s);
// login, Base64-Kodierung
Senddata(s, EncodeTo64("user@stratodomain.de") + "\r\n");
WarteAufServerAntwort(s);
// pass, Base64-Kodierung
Senddata(s, EncodeTo64("password") + "\r\n");
WarteAufServerAntwort(s);
// Absender
Senddata(s, string.Format("MAIL FROM: <user@stratodomain.de>\r\n"));
WarteAufServerAntwort(s);
// Empfänger
Senddata(s, string.Format("RCPT TO: <nobody@domain.de>\r\n"));
WarteAufServerAntwort(s);
StringBuilder Header = new StringBuilder();
Header.Append("From: user@ stratodomain.de\r\n");
Header.Append("To: nobody@ domain.de\r\n");
Header.Append("Date: Sat, 24 Jul 2010 03:52:52 +0200 (MEST)\r\n");
Header.Append("Subject: Test Mailversand\r\n");
Header.Append("X-Mailer: myCSharp Tool\r\n");
Header.Append("X-GeoRegion: DE-BY \r\n");
Header.Append("X-GeoPlacename: Olching, Deutschland\r\n");
Header.Append("X-GeoPosition: 48.197976;11.324308\r\n");
Header.Append("X-ICBM: 48.197976,11.324308\r\n");
string MsgBody = "Mail test\r\n";
Senddata(s, ("DATA\r\n"));
WarteAufServerAntwort(s);
Header.Append("\r\n");
Header.Append(MsgBody);
Header.Append(".\r\n");
Header.Append("\r\n");
Header.Append("\r\n");
Senddata(s, Header.ToString());
WarteAufServerAntwort(s);
Senddata(s, "QUIT\r\n");
WarteAufServerAntwort(s);
s.Close();
dazu noch zwei Methoden :
static public string EncodeTo64(string toEncode)
{
byte[] toEncodeAsBytes= System.Text.ASCIIEncoding.ASCII.GetBytes(toEncode);
string returnValue = System.Convert.ToBase64String(toEncodeAsBytes);
return returnValue;
}
private static void WarteAufServerAntwort(Socket s)
{
byte[] buffer = new byte[1024];
while (s.Available == 0)
{
System.Threading.Thread.Sleep(100);
}
s.Receive(buffer, 0, s.Available, SocketFlags.None);
string serverAntwort = Encoding.ASCII.GetString(buffer);
}