Email mit SMTP2GO verschicken

Hey Zusammen,

ich habe mit diesem Codebeispel mal versucht eine Mail zu verschicken:

/*
Email client sketch for IDE v1.8.1 and w5100

*/

//Used Modules: Arduino Mega + W5100 Ethernet shield.

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


// this must be unique
byte mac[] = { 0x90, 0xEF, 0xDA, 0x00, 0x59, 0xEE };
// change network settings to yours
IPAddress myIp(192, 168, 178, 182);
IPAddress gateway(192, 168, 178, 1);
IPAddress subnet(255, 255, 255, 0);

char server[] = "mail.smtp2go.com";
int port = 2525; // You can also try using Port Number 25, 8025 or 587.
const String emailAdressReciever = "XXX@XXX.XX";

const String emailAdressTransmitter = "XXX@XXX.XX";
const String usernameBase64EmailAdressTransmitter = "XXX==";
const String passwordBase64EmailAdressTransmitter = "XXX";

EthernetClient client;

void setup()
{

 Serial.begin(115200);
 pinMode(4, OUTPUT);
 digitalWrite(4, HIGH);
 Ethernet.begin(mac, myIp);
 delay(2000);
 Serial.println(Ethernet.localIP());
 Serial.println(F("Ready. Press 'e' to send."));

}

void loop()
{
 byte inChar;

 inChar = Serial.read();

 if (inChar == 'e')
 {
 if (sendEmail()) Serial.println(F("Email sent"));
 else Serial.println(F("Email failed"));
 }
}

byte sendEmail()
{
 byte thisByte = 0;
 byte respCode;

 if (client.connect(server, port) == 1) {
 Serial.println(F("connected"));
 }
 else {
 Serial.println(F("connection failed"));
 return 0;
 }

 if (!eRcv()) return 0;
 String dataToSend;
 // replace 1.2.3.4 with your Arduino's ip
 String myIPString = String(myIp[0]) + "." + String(myIp[1]) + "." + String(myIp[2]) + "." + String(myIp[3]);
 dataToSend = "EHLO " + myIPString;
 Serial.println(dataToSend);
 client.println(dataToSend);
 if (!eRcv()) return 0;

 dataToSend = "auth login";
 Serial.println(dataToSend);
 client.println(dataToSend);
 if (!eRcv()) return 0;

 dataToSend = usernameBase64EmailAdressTransmitter;
 Serial.println(dataToSend);
 // Change to your base64 encoded user
 client.println(dataToSend);


 if (!eRcv()) return 0;

 dataToSend = passwordBase64EmailAdressTransmitter;
 Serial.println(dataToSend);
 // change to your base64 encoded password -> OK
 client.println(dataToSend);


 if (!eRcv()) return 0;

 // change to your email address (sender)
 dataToSend = "MAIL From: <" + emailAdressTransmitter + ">";
 Serial.println(dataToSend);
 client.println(dataToSend);
 if (!eRcv()) return 0;

 // change to recipient address -> OK
 dataToSend = "RCPT To: <" + emailAdressReciever + ">";
 Serial.println(dataToSend);
 client.println(dataToSend);
 if (!eRcv()) return 0;

 dataToSend = "DATA";
 Serial.println(dataToSend);
 client.println(dataToSend);
 if (!eRcv()) return 0;

 // change to recipient address -> OK
 dataToSend = "To: Rachel <fabianfippl@outlook.de";
 dataToSend += "\r\n";
 dataToSend += "From: MalagaWLAN_Anwesenheitsüberwachng <" + emailAdressTransmitter + ">";
 dataToSend += "\r\n";
 dataToSend +=  "Subject: Your Subject";
 dataToSend += "\r\n";
 dataToSend += "Hi!Simple test message";
 dataToSend += "\r\n";
 dataToSend += ".";

 Serial.println(dataToSend);
 client.println(dataToSend);

 if (!eRcv()) return 0;

 dataToSend = "QUIT";
 Serial.println(dataToSend);
 client.println(dataToSend);
 if (!eRcv()) return 0;

 client.stop();

 Serial.println(F("disconnected"));

 return 1;
}

byte eRcv()
{
 byte respCode;
 byte thisByte;
 int loopCount = 0;

 while (!client.available()) {
 delay(1);
 loopCount++;

 // if nothing received for 10 seconds, timeout
 if (loopCount > 10000) {
 client.stop();
 Serial.println(F("\r\nTimeout"));
 return 0;
 }
 }

 respCode = client.peek();

 while (client.available())
 {
 thisByte = client.read();
 Serial.write(thisByte);
 }

 if (respCode >= '4')
 {
 efail();
 return 0;
 }

 return 1;
}


void efail()
{
 byte thisByte = 0;
 int loopCount = 0;

 client.println(F("QUIT"));

 while (!client.available()) {
 delay(1);
 loopCount++;

 // if nothing received for 10 seconds, timeout
 if (loopCount > 10000) {
 client.stop();
 Serial.println(F("\r\nTimeout"));
 return;
 }
 }

 while (client.available())
 {
 thisByte = client.read();
 Serial.write(thisByte);
 }

 client.stop();

 Serial.println(F("disconnected"));
}

Leider kommt immer folgende Fehlermeldung vom Server zurück:

550 that smtp username’s account is not allowed to send

Was bedeutet das?

Muss für SMTP2GO noch mehr einrichten, als nur einen Account?

Nach dem Video hier: Send Email Using SMTP2GO | C# | Visual Studio. - YouTube ist das ganz simpel beschrieben, aber so läuft es wohl leider nicht…oder nicht mehr.

Auf dem Dashboard von SMTP2GO sehe ich das hier:

Hat jemand ne Idee? Muss ich jetzt noch eine Domain registrieren oder gibt’s auch eine andere Lösung Mails vom Arduino zu versenden?

Zitat aus der FAQ

Wenn Sie keine Absenderdomäne einrichten, signiert SMTP2GO alle E-Mails mit unserer eigenen DKIM-Signatur. Dies funktioniert in den meisten Situationen, jedoch wird für Google Mail-Empfänger festgestellt, dass E-Mails "über smtpcorp.com" oder "über smtp2go.com" zugestellt werden. Darüber hinaus können Sie eine bessere E-Mail-Zustellung an Hotmail / Yahoo / Gmail / AOL erreichen, indem Sie eine DKIM-Signatur in Ihrer eigenen Domäne verwenden und wenn Sie einen DMARC-Eintrag einrichten müssen (was nützlich ist, um zu verhindern, dass Spammer Phishing-E-Mails von Ihrer Domäne aus versenden Name), dann ist die DKIM-Signatur in Ihrer eigenen Domäne unerlässlich.

Sollte also nach wie vor ohne klappen.

Ich habe bei mir keine Absenderdomäne angegeben. Und gerade nochmals mit dem Esp8266 geprüft, auch bei GMail kommen die Mails an.

PS.: Bist du hier weiter gekommen?

Gruß Fips

Derfips:
Sollte also nach wie vor ohne klappen.

Ich habe bei mir keine Absenderdomäne angegeben. Und gerade nochmals mit dem Esp8266 geprüft, auch bei GMail kommen die Mails an.

Gruß Fips

Leider nein, habe jetzt mal Neuregistrierungen mit gmail, mit outlook.com, mit yahoo und mit web.de probiert...immerwieder das hier:


und bei Zugriffsversuch mit Arduino kommt im Serial Monitor:

550 that smtp username's account is not allowed to send

Scheinbar will er unbedingt ne domain haben...vielleicht hat sich da mal was in letzter Zeit geändert?

Ich brauche wohl einen Mailanbieter dafür, der noch unverschlüsselt macht.

Kurzes Update: Habe es gerade über einen anderen Anbieter hinbekommen. Mailgun.com bietet einen ähnlichen Service, wie SMTP2GO, aber noch mit eigener Subdomain.

Ich poste später mal eine eine Anleitung, wie das mit Mailgun funktioniert und wie der Code aussehen muss… war garnicht so einfach sich da durchzufuchsen :wink:

Hallo tec_freakz,
Könnten Sie mir bitte den Code senden, mit dem Sie E-Mails an mailgun.com gesendet haben?
Haben Sie andere Tricks zu teilen, damit der Service ordnungsgemäß funktioniert?
Vielen Dank.
Entschuldigung für mein Deutsch

Salvatore

Hi tec_freakz,
could you please share with me the code you have used to send email with mailgun.com?
Do you have other tricks to share to have the service working properly?
Thanks
Salvatore