eMail mit Arduino senden

Hallo zusammen,

ich habe da mal wieder ein Problem mit dem ich mich schon ein zwei Tage durcharbeite, aber irgendwie nicht vorrankomme.

Und zwar würde ich gerne eine eMail mit meinem Arduino Mega + Ethernet Shield verschicken.
Ich verwende dazu folgenden Sketch. An sich habe ich den so im Internet fertig gefunden, ich habe noch die Sache mit "auth login" hinzugefügt, weil ohne eine Anmeldung würde das glaube ich nicht mehr gehen (habe es auch ausprobiert, funtkioniert nicht):

#include <Ethernet.h>
#include <SPI.h>

byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x44, 0x70 };
byte ip[] = { 192, 168, 2, 109 };
byte server[] = { 205, 188, 186, 137 }; // IP von smtp.aol.com

EthernetClient client;

void setup()
{
  Ethernet.begin(mac, ip);
  Serial.begin(9600);
  
  delay(1000);
  
  Serial.println("connecting...");
  
  if (client.connect(server, 25)) {
    Serial.println("connected");
    client.println("HELO test");
    client.println("auth login");
    client.println("Meine eMail in BASE64");
   client.println("Mein Passwort in BASE64");
   client.println("MAIL FROM: meineemail@aol.de");
   client.println("RCPT TO: meineemail@aol.de"); //wollte einfach eine email an mich selber senden
   client.println("DATA");
   client.println("SUBJECT: Arduino sendet Email");
   client.println();
   client.println("Erster Test.");
   client.println(".");
   client.println("QUIT");
  } else {
    Serial.println("connection failed");
  }
}

void loop()
{
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }
  
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    for(;;)
    ;
  }
}

Und das bekomme ich im Serial Monitor:
connecting...
connected
220-mtaout-da01.r1000.mx.aol.com ESMTP MUA/Third Party Client Interface
220-AOL and its affiliated companies do not
220-authorize the use of its proprietary computers and computer
220-networks to accept, transmit, or distribute unsolicited bulk
220-e-mail sent from the internet.
220-Effective immediately:
220-AOL may no longer accept connections from IP addresses
220 which no reverse-DNS (PTR record) assigned.
250 mtaout-da01.r1000.mx.aol.com
334 VXNlcm5hbWU6
334 UGFzc3dvcmQ6
235 2.7.0 Authentication successful
250 2.1.0 Ok
250 2.1.5 Ok
503 5.5.0 : Data command rejected: Improper use of SMTP command pipelining
221 2.7.0 Error: I can break rules, too. Goodbye.
disconnecting.

So wie man auch sieht, funktioniert leider bisher "nur" die Identifiezierung mit Email und passwort bis hin kurz vor dem endgültigen Absenden.

Die Anleitung mit auth login habe ich hierher: http://www.kongtechnology.com/2008/01/27/smtp-authentication-and-send-emails-using-telnet/
Ich habe dann auch mal versucht über die Konsole (cmd, windows) eine telnet Verbindung mit smtp.aol.com herzustellen.
Funktionierte auch alles eigentlich, nur wenn ich dann am Schluss den "." ein tippe und enter drücke kommt immer:

521 AOL will not accept delivery of this message

Leider bin ich nicht so schlau und kann da sofort was rausschließen.

Also entweder mache ich grundsätzlich etwas falsch oder ich habe irgendetwas übersehen !?
Muss ich mir da eine andere Lösung suchen, wenn ja, welche ?

Hoffe ich habe alles relativ gut beschrieben, die Zeit ist zur Zeit leider etwas zu knapp um alles ausführlichst zu beschreiben.
Denke aber so grob sollte das reichen !

Vielen Dank schonmal !

Grüße
Lorenz

Ich empfehle, per Telnet den grundsätzlich möglichen Erfolg zunächst zu testen.
ich hab mir den Wolf debugged .....

Wenn Telnet geht dann weisst Du auch woran dein sketch scheitert.

Ja ok, da hast du wirklich Recht !

Muss mir dann wohl noch ein passendes Forum suchen...
melde mich dann, wenn ich das Problem behoben habe !

Grüße
Lorenz

Dazu braucht's kein Forum, der grundsätzliche Weg dürfte ja klar sein. Bei mir war's der Auth String, da bin ich immer drüberstolpert.

Joa habe ich auch gerade gedacht, aber da ich schon mehrere Anleitungen durchprobiert habe und immer der gleich Fehler kommt, wäre da ein Forum schon ganz hilfreich. Muss aber mal sehen ob das nicht auch irgendwie alleine auf die Beine gestellt bekomme !

Normalerweise werden Emails ohne Autentifizierung versendet und zwar an den Emaildienst Deines Providers. Wie machst Du es in Deinem Email-Programm?
Grüße Uwe

Hi,

Lass mich raten, alle deine Versuche gingen an AOL?

Die Antwort des Servers sagt doch wenn ich richtig rate (in IT-Englisch ]:slight_smile: ), dass AOL unter umständen keine Mails von - nennen wir es mal - Privatrechnern (ohne reverse DNS) entgegennimmt. Zugegeben, der Bulk-Teil ist mir nicht klar ... Bulk Mails = massenmails. Vielleicht hätte es ja beim allerersten versuch geklappt, aber du hast es zu oft versucht und AOL hat die Verbindungen gezählt.

Daher werden dich keine Tutorials weiter bringen, solange du an AOL hängst.

Vorschlag: Neue IP besorgen oder ne Nacht schlafen und es morgen nochmal versuchen.

Ich find ja die Reject-Message genial: "I can break rules too. Goobye." - hört sich ein bisschen eingeschnappt ein :grin:

Fakt ist, dass wenn dein du keine Reverse-DNS-Auflösung hast, werden deine E-Mails von vielen E-Mail-Servern abgeleht. Reverse-DNS bedeutet, dass der Server, der die E-Mail sendet auch mit dem Namen des Senders aufgelöst werden muss. Konkret heißt das: wenn die Mail von test@example.com kommt, muss die IP des Senders ebenfalls auf example.com zeigen.

Du brauchst also auf jedenfall einen E-Mail-Server, der dir deine Mail verschickt inklusive eines Accounts.

Ich probier mal kurz ein bisschen herum

uwefed:
Normalerweise werden Emails ohne Autentifizierung versendet und zwar an den Emaildienst Deines Providers. Wie machst Du es in Deinem Email-Programm?
Grüße Uwe

Das sehe ich genau so ! Aber irgendwie funtkioniert das bei mir nicht so ganz, ob ich das jetzt mit oder ohne authentifizierung mache, ändert leider nichts. Beides bringt keinen wirklichen Erfolg.
Meinst du mit email programm z.B. outlook ?!

-Holger-:
Lass mich raten, alle deine Versuche gingen an AOL?

Jap ich habe es mit aol probiert, da es mit anderen wie windows live und t-online absolut nicht klappte.

Die Antwort des Servers sagt doch wenn ich richtig rate (in IT-Englisch ]:slight_smile: ), dass AOL unter umständen keine Mails von - nennen wir es mal - Privatrechnern (ohne reverse DNS) entgegennimmt. Zugegeben, der Bulk-Teil ist mir nicht klar ... Bulk Mails = massenmails. Vielleicht hätte es ja beim allerersten versuch geklappt, aber du hast es zu oft versucht und AOL hat die Verbindungen gezählt.

Vorschlag: Neue IP besorgen oder ne Nacht schlafen und es morgen nochmal versuchen.

Das habe ich vorhin auch schon entdeckt, konnte aber nicht alles so genau verstehen was die damit so meinen.
Ich kann ja morgen nochmal versuchen, mal sehen ob das so das Problem war :grin:
Hoffe nicht, sonst könnte ich ja gar nicht sooo viele mails senden -_-

Jap das fand ich auch etwas lächerlich :smiley:

Fakt ist, dass wenn dein du keine Reverse-DNS-Auflösung hast, werden deine E-Mails von vielen E-Mail-Servern abgeleht. Reverse-DNS bedeutet, dass der Server, der die E-Mail sendet auch mit dem Namen des Senders aufgelöst werden muss. Konkret heißt das: wenn die Mail von test@example.com kommt, muss die IP des Senders ebenfalls auf example.com zeigen.

Du brauchst also auf jedenfall einen E-Mail-Server, der dir deine Mail verschickt inklusive eines Accounts.

Ich probier mal kurz ein bisschen herum

okaaay, da verstehe ich jetzt gerade nicht soo viel von. Also wenn ich eine email an test@aol.de senden möchte muss ich auch den Server smtp.aol.com verwenden. Das ist mir auch soweit klar...wenn es das ist was du meinst.

Viel Spaß beim probieren, mal sehen was dabei rauskommt :wink:

Vielen Dank für die Antworten!
Grüße
Lorenz

ja zB Outlook, Outlook Express oder Thunderbird.
Du mußt die Emails an DEINEN Provider senden nicht an einen x-beliebigen; nur dieser nimmt die Emails an.
Grüße Uwe

Also ist es richtig wenn ich z.B. Von meiner email test@aol.de eine email an test123@aol.de ?
Wenn ja, warum geht es nicht, wenn ich eine email an mich selber sende ?!

EDIT: Habe es mal ohne Autentification über Konsole nochmal probiert und siehe da, es kommt folgendes:

rcpt to: test@aol.de
553 5.7.1 test@aol.de: Sender address rejected: not logged in

Von daher gehe ich mal davon aus, dass man eine anmeldung benötigt ?!

Grüße
Lorenz

Einen (absichtlich) offenen SMTP-Server wirst du nicht finden, da wär in kürzester Zeit die Hölle los. Allgemein werden entweder POP-before-SMTP verwendet (weil man für den Zugriff aufs Postfach ebenfalls Username und Passwort braucht) oder SMTP-Auth. DIe Details stehen hier: SMTP-Auth – Wikipedia

lgrube96:
Joa habe ich auch gerade gedacht, aber da ich schon mehrere Anleitungen durchprobiert habe und immer der gleich Fehler kommt, wäre da ein Forum schon ganz hilfreich.

Du brauchst ein Forum, um die Fehlermeldung zu googlen?

Na ja, wenn es weiter nichts ist, dem Manne kann geholfen werden, per Link in einem Forum:

Kommst Du dann drauf, was Dein Programm gemeinsam hat mit Spam-Mail-Programmen?

uwefed:
Normalerweise werden Emails ohne Autentifizierung versendet und zwar an den Emaildienst Deines Providers. Wie machst Du es in Deinem Email-Programm?
Grüße Uwe

Ich widerspreche Uwe wirklich nicht gern, aber diese Aussage stimmt ausschließlich für Server-Server Kommunikation.
Dein Mailprogramm macht es mit Authentication, sonst wird der Mailserver zum offenen Relay, weil jeder an jeden senden könnte.

Wie eben schon geschrieben benötigst du entweder SMTP-Auth, was du versucht hast, oder POP/IMAP-Auth.

Und wie auch eben schon geschrieben, der Grund für die Ablehnung ist ganz klar

503 5.5.0 <DATA>: Data command rejected: Improper use of SMTP command pipelining

lgrube96:
Also entweder mache ich grundsätzlich etwas falsch oder ich habe irgendetwas übersehen !?
Muss ich mir da eine andere Lösung suchen, wenn ja, welche ?

Ich vermute, dass Du zu schnell bist. Normalerweise sollte man nach jedem SMTP Kommando die Antwort des SMTP Servers abwarten, bevor man weitere Kommandis sendet.
Der Server muss ja auch die Benutzernamen/Kennwörter überprüfen. Dazu werden die Anmeldedaten an einen weiteren Server gesendet. Das benötigt seine Zeit.
Viele Server machen obendrein noch Tarpitting. Hierbei werden die Antworten des Servers künstlich verzögert. Dies gibt dem Server die Möglichkeit SPAM Bots zu erkennen oder zumindest auszubremsen. Bei einzelnen Mails spielt Tarpitting keine Rolle, ob die Transaktion jetzt 10ms oder 3000ms dauert, ein Spammer lässt sich so aber gehörig ausbremsen. :grin:
Du solltest also versuchen die Serverresponse auszuwerten, oder zumindest genügend Wartezeit einbauen.

SMTP ist eine 2-Wege Kommunikation. Einfach nur alle Kommandos in den TCP-Stream zu kippen reicht nicht. Wie ch-hunn schon sagte, musst Du die Antwort des Servers abwarten. Wenn Du sicher gehen willst, dann lies doch nach jedem Kommando die Antwort des Servers aus der Verbindung, dort sollte immer was von "OK" auftauchen, dann weisst Du, das Dein Kommando erfolgreich verarbeitet wurde. Dann kannst Du das nächste Kommando abschicken.
Mario.

dischneider:
Wie eben schon geschrieben benötigst du entweder SMTP-Auth, was du versucht hast, oder POP/IMAP-Auth.

Und wie auch eben schon geschrieben, der Grund für die Ablehnung ist ganz klar

503 5.5.0 <DATA>: Data command rejected: Improper use of SMTP command pipelining

Wie gesagt, ich verwende SMTP-Auth, ich würde sagen ich mache da soweit alles richtig.
Weil ich komme ja soweit das er mich schon "erkannt" hat.
Deswegen würde ich sagen, dass das daran nicht unbedingt liegen würde.

ch-hunn:
Ich vermute, dass Du zu schnell bist. Normalerweise sollte man nach jedem SMTP Kommando die Antwort des SMTP Servers abwarten, bevor man weitere Kommandis sendet.
Der Server muss ja auch die Benutzernamen/Kennwörter überprüfen. Dazu werden die Anmeldedaten an einen weiteren Server gesendet. Das benötigt seine Zeit.

Das mache ich zwar nicht in meinem Sketch, aber wenn ich eine Verbindung mit der Konsole versuche dann warte ich ja auch immer ab bis dann das "OK-Zeichen" kommt.

Ich habe hier mal den Verlauf aus der Konsole (email natürlich geändert):
helo lorenz
250 mtaout-ma06.r1000.mx.aol.com
auth login
334 VXNlcm5hbWU6
************************ email in base64
334 UGFzc3dvcmQ6
************************ pw in base64
235 2.7.0 Authentication successful
mail from: test@aol.de
250 2.1.0 Ok
rcpt to: test@aol.de
250 2.1.5 Ok
data
354 End data with .
subject: Erster test
das ist eine nachricht
.
521 5.2.1 521 AOL will not accept delivery of this message
Verbindung zu Host verloren.

So und immer wenn ich dann den Punkt eingebe, welcher das Ende festlegt, geht es nicht mehr weiter und diese Nachricht kommt halt.

Das hat jetzt zwar eigentlich absolut nichts mehr mit Arduino zu tun, aber versuchen kann man es ja mal in dem Forum, und soweit es aussieht, gibt es hier
auch Leute die sich damit auskenne :wink:

Vielen Dank für die Antworten !

Grüße
Lorenz

Das liegt daran, das Du eine andere EMail-Adresse als Absender (mail from: test@aol.de) angibst, als die Adresse mit der Du dich authentifizierst. Das lassen die meisten Mailserver nicht zu (und das aus gutem Grund).
Verwende als Absender und als Empfänger mal Deine korrekte AOL-Adresse, dann sollte es auf der Konsole schon gehen.

Ich verwende doch für alle die gleich eMail-Adresse !
Also einmal bei auth login, mail from und rcpt to...
Oder meinst du was anderes ?

Endlich es funktioniert ! Aber bisher erstmal nur mit der Konsole..sollte dann aber auch später mit Arduino funktionieren, mal sehen was sich ergibt.

Wundert mich nur, dass das auf einmal wieder klappt, obwohl ich an meiner Vorgehensweise nichts geändert habe.
Wahrscheinlich ist jetzt genau ein Tag rum, und die haben mich da wieder rausgelöscht :smiley:
D.h. ich kann nur eine bestimmte Anzahl von emails über telnet versenden ?!