PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : eMAIL mit Arduino versenden



Tigris
05.03.2015, 07:09
Hallo zusammen,
ich habe das Problem, dass ich keine emails mit dem Arduino versenden kann. Das Programm läuft bis zur Meldung
"Serial.println(F("..OK")); " und
"Serial.println("connected"); "

Die Verbindung zum smtp Server von smtp.smart-mail.de sollte also stehen, aber eine Mail wird leider nicht verschickt.


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

byte mac[] = {
0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 };
IPAddress ip( 192, 168, 178, 70 );
IPAddress gateway( 192, 168, 10, 1 );
IPAddress subnet( 255, 255, 255, 0 );
byte server[] = { 217, 69, 254, 100 }; // IP Mailserver

EthernetClient client;
void setup()
{
Ethernet.begin(mac, ip);
Serial.begin(9600);
delay(1000);
if( Ethernet.begin( mac) == 0)
{
Serial.println("Failed to configure Ethernet using DHCP.");
// no point in carrying on, so do nothing forevermore:
while(1);
}
// print your local IP address.
Serial.println(F( "Ethernet started."));
Serial.print(F( "Local IP = "));
Serial.println(Ethernet.localIP());

if(client.connect(server,25)) {
Serial.println(F("..OK")); // bis hier funktioniert alles prima, die Verbindung zum Server sollte also stehen.
} else {

Serial.println(F("connection failed"));

}

Serial.println("connected");
client.println(F("HELO HalloServer"));
client.println(F("MAIL FROM:meine@smart-mail.de"));
client.println(F("RCPT TO:meine@smart-mail.de"));
client.println(F("DATA"));
// Empfänger-Adresse
client.println(F("TO: meine@smart-mail.de"));
// Titel des Mails
client.println(F("SUBJECT: Arduino sendet Email"));
client.println();
// Inhaltstext des Mails
client.println(F("Hallo mein Freund."));
// Kennzeichnung Ende des Emails
client.println(F("."));
// Abmelden
client.println(F("QUIT"));

if (client.available()) {
char c = client.read();
Serial.print(c);
}

if (!client.connected()) {
Serial.println();
Serial.println("disconnecting.");
client.stop();
}

}

void loop (){
}

Tigris
08.03.2015, 08:28
Ups, nach so viel Hilfe hab ich mir dann selber geholfen.

Und so funktioniert es

/*
Der Sketch dient zum Verschicken einer E-Mail mit dem Arduino UNO R3
Hier ein E-Mail Account bei smart-mail.de

Die IP des Mail-Servers bekommt man wie folgt:
Unter Windows den Befehl "CMD" eingeben, dann erscheint das DOS Fenster, nun "ping smtp@smart-mail.de "eingeben, die IP wird dann angezeigt.
Diese Vorgehensweise ist auch für alle anderen E-Mail Server so gültig.

Alle u.a. Befehle zur Kommunikation mit dem Sever können mit dem Freeware Programm "SMTP Explorer" http://faq.netzprisma.de/data/smtpexplorer.zip überprüft werden. Das Programm ist sehr hilfreich.

Die Umwandlung von Benutzername und Passwort iin BASE 64 gelingt einfach unter http://base64-encoder-online.waraxe.us

Sehr wichtig sind die delay(x) Zeiten um die Kommunikation zum Server sicher zu stellen !!!
*/

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

byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 }; // durch eigene mac ersetzen
byte ip[] = { x, xx, xx, xx }; //durch eigene IP ersetzen
byte server[] = { 217, 69, 254, 100 }; // Mail server IP, //von smtp@smart-mail.de, ev. durch eigenen Server ersetzen


EthernetClient client;
int x = 5000; // sichert die Kommunikation zum Server ab

void setup()
{
Ethernet.begin(mac, ip);

Serial.begin(9600);
Serial.println("connecting...");
delay(x);
if (client.connect(server, 25)) {
Serial.println("connected, Server will respond, please wait");
delay(x);
client.println("EHLO Arduino"); //EHLO muß so geschrieben sein, Arduino = beliebiger Name
delay(x);

//LOG IN************************************************ ************************************************** ************

client.println("AUTH LOGIN"); //Benutzername und Passwort müssen im BASE64 Format vorliegen. Unter "http://base64-encoder-online.waraxe.us/" einfach zu finden.
delay(x);
client.println("xxxxxxxxxxxx"); // das ist der Benutzername, die " " müssen bleiben, xxxx bitte durch deinen BASE 64 code ersetzen
delay(x);
client.println("xxxxxxxxxxx"); // das ist das Passwort, die " " müssen bleiben, xxxx bitte durch deinen BASE 64 code ersetzen
delay(x);
//MAIL Versand******************************************* **************************************************
client.println("MAIL FROM: xxxxxxx@smart-mail.de"); //xxxx bitte durch deine E-Mail ersetzen
delay(x);
client.println("RCPT TO: xxxxxxx@smart-mail.de");
delay(x);
client.println("DATA");
delay(x);
client.println("From: xxxxxx@smart-mail.de");
delay(x);
client.println("To: xxxxxx@smart-mail.de");
delay(x);
client.println("SUBJECT: Test");
delay(x);
client.println();
delay(x);
client.println("Erster test mit arduino.");
delay(x);
client.println(".");
delay(x);
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(;;) ;
}
}

Nach dem Mailversand erhält man dann die Meldung:

connecting...
connected, Server will respond, please wait
220 mail.smart-mail.de Smart-Mail SMTP service ready
250-mail.smart-mail.de Pleased to meet you, ip5b43d6c1.dynamic.kabel-deutschland.de [91.67.214.193]
250-SIZE 78643200
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-STARTTLS
250 8BITMIME
334 xxxxxxx (die xxxx sind nur Platzhalter für meine Login Daten )
334 xxxx
235 Authentication successful
250 2.1.0 Return path OK
250 2.1.5 Recipient OK
354 Send data (max 78643200 bytes), end with \r\n.\r\n
250 2.0.0 Message enqueued for delivery
221 mail.smart-mail.de Closing connection

disconnecting.

Sisor
08.03.2015, 11:18
Danke für deine Ausführungen!

Tigris
08.03.2015, 17:10
Mache ich doch gerne.
Es kommt leider manchmal vor, dass die Verbindung nicht beim ersten Mal zustande kommt.
Ich arbeite derzeit an einer verbesserten Version

Unregistriert
17.01.2017, 07:45
Was macht die verbesserte Version?