Benachrichtigung aufs Handy bekommen
-
Hi Community,
kurze Frage... Ich habe eine Java-Anwendung geschrieben, die irgendetwas wiederholt tut und dabei eine Log-Ausgabe erzeugt. Jetzt möchte ich gerne, bei wichtigen Ereignissen, eine Benachrichtigung auf mein Smartphone bekommen. Ich dachte da an E-Mail! Also ist meine Frage, ob es eine SMTP-/MTA-Library für Java gäbe, mit der das relativ einfach möglich wäre? Problematisch: Als Absender könnte ich natürlich nicht einen normalen Hostname verwenden, sondern nur die aktuelle IP-Adresse... Geht das?Oder habt ihr vielleicht Alternativvorschläge dazu? Danke
-
@EinNutzer0 sagte in Benachrichtigung aufs Handy bekommen:
Problematisch: Als Absender könnte ich natürlich nicht einen normalen Hostname verwenden, sondern nur die aktuelle IP-Adresse... Geht das?
Häh? Das Absenderfeld in Emails ist quasi Freitext, da kannst du reinschreiben, was du willst. Wenn's eine es eine gültige Emailadresse ist, wird der Server es vielleicht sogar annehmen. Wobei viele Server da aber nur eigene, authentifizierte Adressen erlauben, um Spam zu verhindern. Trotzdem kannst du dann halt einfach eine solche Adresse reinschreiben, egal wo dein Code läuft.
Selbiges gilt für alle anderen Teile einer Email.
Dann brauchst du noch irgendeinen Server, aber das kommt sehr auf die Eigenschaften deiner Internetverbindung an. Entweder kann das ein ganz "normaler" Server sein (z.B. der von Gmail, web.de, der Firma, etc.). Da kommt aber als kleine Verkomplizierung meist hinzu, dass du dich dort irgendwie authentifizieren musst.
Oder das kann ein von dir oder einem anderen Teilnehmer betriebener Server bei dir im Netzwerk (oder auf dem gleichen Computer) sein. Der muss dann aber irgendein Relay (wieder Gmail, web.de, der Firmenserver, etc.) im Internet erreichen können, und der Port dafür (25) ist oft gesperrt (wieder wegen Spamverhinderung). Da hast du dann alles selber im Griff (inklusive ob und wie du dich authentifizierst), musst das aber auch selber betreiben.Wie das in Java geht: Google?
-
Ich hab nun eine relativ einfache Möglichkeit gefunden, und die auch zuverlässig ist...
@SuppressWarnings("SpellCheckingInspection") public static void sendTestMail() { Email email = EmailBuilder.startingBlank() .from("Me", "me-1-me@gmail.com") .to("Me", "me-1-me@gmail.com") .withSubject("Eine Test-E-Mail an mich selber") .withPlainText("Das ist eine Test-E-Mail an mich selber. We should meet up! ;)") .buildEmail(); MailerBuilder .withSMTPServer("smtp.gmail.com", 25, "Dein_Gmail_Benutzername", "your app password, not gmail password!") .withTransportStrategy(TransportStrategy.SMTP_TLS) .withDebugLogging(true) .buildMailer() .sendMail(email); }
pom.xml: (falls das jemand in ein paar Jahren kopiert: Auf neuste Versionsnummern achtgeben...)
<!-- https://mvnrepository.com/artifact/org.simplejavamail/simple-java-mail --> <dependency> <groupId>org.simplejavamail</groupId> <artifactId>simple-java-mail</artifactId> <version>6.6.1</version> </dependency> <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.32</version> </dependency> <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.32</version> </dependency>
Ich nutze also diese Lib. Außerdem hab ich eigens für diese Java-Anwendung ein App-Passwort erstellt (um nicht "unsichere Apps" zulassen zu müssen...).
Aber der Hauptknackpunkt an der Sache ist, dass ich eine SMTP-Authentifizierung (also Anmeldung) brauche. Ohne ist das wohl aus den von @SeppJ genannten Gründen nicht möglich, oder? Danke
-
@EinNutzer0 sagte in Benachrichtigung aufs Handy bekommen:
"Dein_Gmail_Benutzername", "your app password, not gmail password!")
Nun, buchstäblich damit wird es wohl nicht funktionieren
Aber wenn du ein Konto bei Gmail hast, kannst du das da eintragen und wird bestimmt funktionieren. Wobei mich Port 25 wundert, eigentlich hätte ich 465 oder 587 erwartet, denn 25 wird bei vielen Internetzugängen geblockt wegen Spams. Beachte auch, was da steht vonwegen des app Passworts. Wobei ich nicht ganz verstehe, wieso das hier so gemacht wird. Vielleicht ist GMail nochmal strenger was Loginmethoden angeht, als ich das von früher kenne. PS: Das ist wohl für den Fall, wenn du 2-factor bei deinem Konto aktiviert hast, was nicht der Standard ist.Wenn du kein Gmailkonto hast, wirst du doch sicherlich irgendwo ein Emailkonto haben, mit dem du privat Emails verschickst. Und der Anbieter davon stellt dir dann einen SMTP-Server. Der ist sicher schon im Emailprogramm deiner Wahl eingetragen. Oder wenn du Schüler/Student bist, hast du über diese Zugang zu deren Server.
-
@SeppJ sagte in Benachrichtigung aufs Handy bekommen:
PS: Das ist wohl für den Fall, wenn du 2-factor bei deinem Konto aktiviert hast, was nicht der Standard ist.
Jap, 2FA habe ich vorhin aktiviert, diese ist Voraussetzung...
Port 25 geht, weil ich dafür die "Firewall" in meinem Router deaktiviert hab. Normalerweise wird dieser vom Router geblockt, weil darüber auch schlimme Dinge geschehen können... Die anderen Ports (465 und 587) funktionieren afaik aber auch.
Btw. auf Windows funktioniert es reibungslos, ich habe es aber gerade auf den RaspberryPi geschmissen, und da erhalte ich folgende Fehlermeldung:
Liegt das daran, dass die Anwendung nicht mit
sudo
gestartet wurde? Darf ich ignorieren?
-
@SeppJ sagte in Benachrichtigung aufs Handy bekommen:
Oder wenn du Schüler/Student bist, hast du über diese Zugang zu deren Server.
Ja, bin Studierender der Informatik, und schon etwas "betagter". Aber ich verstehe nicht, welche Bewandtnis das haben sollte...
Die Warnung/Fehlermeldung beim Versenden der ersten Mail kann auch auch am Packaging der jar/ an den Java-Versionen liegen, imo.
Hier steht mehr darüber: https://stackoverflow.com/questions/50251798/what-is-an-illegal-reflective-access Also eigentlich kein Grund, sich Sorgen zu machen, aber man möchte natürlich dennoch niemals Warnungen sehen.
-
@EinNutzer0 sagte in Benachrichtigung aufs Handy bekommen:
Oder habt ihr vielleicht Alternativvorschläge dazu?
Wenn Du schon gmail nutzt, hat ja Google schon deine Seele .. err Daten.
Dann kannst auch die neueren Techniken verwenden .....
Push Messages über Google z.b.Der Client für Android sah nicht so kompliziert aus ... und zum schicken langt irgendwas, was einen Request an einen Google Server absetzen kann.
Kenn mich nicht so aus, weil ich sowas generell blocke
Wenn du ne Seite irgendwo hasst, wäre web push sicher auch ne option. Musst nur was hosten fürs registrieren und einen Provider suchen. (keine ahnung ob man bei providern ohne eigene Registrierung sich nen channel erstellen kann ??? )
Da Dich klickzahlen und anzahl an Subscriper nicht intressieren, kannst dich auf die kostenlosen Dinger konzentrieren.
Dafür brauchst keine App / Client mehr aufm SmartPhone... Android nervt dich dann soweiso weil der browser aus dem Hintergrund pushen kann (je nach Einstellung).Wenn du aber was hasst, was ständig am Inet ist mit eigener IP und java / irgendwas laufen kann (NAS z.b.) ... ist kein problem nen eigenen kleinen Server zu schreiben, der nachrichten sammelt und den man dannach abfragen kann mit ner android app ....
Wenn nicht, gibt sicher irgendwo freien webhost mit java anbindung ... oder freies angebot von einem FTP / webdav / git Service missbrauchen ... ist die selbe Liga wie email dazu hernehmen, aber vielleicht gibts einfacher zu verwendende biblios ... Aber als angehender Informatiker sollte dich das alles vor keine so großen Hürden stellen ...