Automatischer E-Mailversand bei Neustart des PCs

BreeZrX

Lt. Junior Grade
Registriert
Jan. 2015
Beiträge
403
Hallo,

kurz zu meiner Anwendung. Ich habe ein NAS, welches durchgängig läuft und worauf ein BOINC-Client rechnet. Nun habe ich in diversen Threads schon die Problematik gesehen, dass das verbaute Mainboard zu spontanen Systemneustarts führt. Diese habe ich auch etwa alle 10-20 Tage. Um über diese Neustarts informiert zu werden würde ich gerne ein Skript haben, welches nach einem Neustart des PCs automatisch geladen wird und dann eine E-Mail an mich versendet. Und genau dabei bräuchte ich Hilfe. Das installierte Betriebssystem ist Windows 10. Ich habe schon ein VBS-Skript im Netz gefunden, über welches das realisiert werden könnte, allerdings läuft das bei mir nicht und spuckt nur einen Fehler aus. Wie müsste also so ein Skript aussehen? Bin für jede Hilfe dankbar :)
 
Welches Skript hast du denn gefunden und welchen Fehler spuckt es denn aus?
Lass uns doch mal so an die Sache rangehen.
 
Sollte doch einfach über ein winziges Programm im "Autostart" gehen (heißt unter Windows 10 irgendwie anders)
 
Also das Skript habe ich von folgender Seite:
https://www.computerbase.de/forum/threads/automatischer-e-mailversand-bei-neustart-des-pcs.1506690/
Dort habe ich Methode 2 und 3 ausprobiert, jeweils mit demselben Fehler. Nachfolgend alle Angaben aus dem Fehlerfenster:
Skript: ...test.vbs
Zeile: 9
Zeichen: 2
Fehler: Der "SendUsing"-Konfigurationswert ist ungültig.

Code: 80040220
Quelle: CDO.Message.1

Das ist jetzt die Fehlerausgabe aus der Methode 3, bei Methode 2 ändern sich nur Zeile und Zeichen.
@Physikbuddha Ist im Prinzip so wie ich es mir vorstelle, nur dass ich anstelle von SendMail gerne einfach ein Skript hätte, sofern möglich. Andernfalls versuche ich SendMail.
@benneque ja das ist auch mein Plan. Das kleine Programm in Form des Skriptes soll in den Autostart eingefügt werden und dann bei jedem Neustart automatisch die E-Mail versenden.
 
Du hast den Thread einfach noch mal verlinkt ? ! :D
 
@benneque: linkception!
 
Ist natürlich auch fraglich von welcher E-Mail Adresse du aus versuchst zu senden. Normalerweise braucht man einen SMTP Server + Benutzername und Passwort. Mit lokalen E-Mail Konten geht's natürlich auch ohne, aber das machen die meisten E-Mail Clients nicht mit.
 
Ich würde für den PC eine neue E-Mail Adresse bei GMX einrichten. Dort hätte ich ja einen SMTP-Server inkl. Benutzernamen und Passwort.
Nur wie baue ich mir so ein Skript nun zusammen? Beispielsweise in Java oder C oder VBA?
 
Zuletzt bearbeitet:
Ja Java hab ich einigermaßen aufm Schirm. Ich werde mir die Seite mal durchlesen und schauen ob ich es damit auf die kette bekomme. Erstmal vielen Dank bis hier hin
 
So ich habe das jetzt mal mit Java ausprobiert.
Leider bekomme ich beim Starten des Codes einen Fehler und es wird keine Mail versendet.
Nachfolgend mal der Quellcode und danach der Fehler:

package mailapp;

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
//import javax.activation.*;

public class SendEmail
{
public static void main(String [] args)
{
// Recipient's email ID needs to be mentioned.
String to = "meine-emailadresse@gmx.de"; nicht die korrekte email adresse ;)

// Sender's email ID needs to be mentioned
String from = "nas-email-adresse@gmx.de"; ebenfalls nicht korrekt

// Assuming you are sending email from localhost
String host = "localhost";

// Get system properties
Properties properties = System.getProperties();

// Setup mail server
properties.setProperty("smtp.gmx.net", host);
properties.setProperty("nas-email-adresse@gmx.de", "myuser"); wieder nicht die korrekte mail eingesetzt
properties.setProperty("nas-email-passwort", "mypwd"); ebenfalls nicht das korrekte passwort

// Get the default Session object.
Session session = Session.getDefaultInstance(properties);

try{
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);

// Set From: header field of the header.
message.setFrom(new InternetAddress(from));

// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));

// Set Subject: header field
message.setSubject("This is the Subject Line!");

// Now set the actual message
message.setText("This is actual message");

// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}


com.sun.mail.util.MailConnectException: Couldn't connect to host, port: localhost, 25; timeout -1;
nested exception is:
java.net.ConnectException: Connection refused: connect
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2054)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:697)
at javax.mail.Service.connect(Service.java:364)
at javax.mail.Service.connect(Service.java:245)
at javax.mail.Service.connect(Service.java:194)
at javax.mail.Transport.send0(Transport.java:253)
at javax.mail.Transport.send(Transport.java:124)
at mailapp.SendEmail.main(SendEmail.java:50)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:331)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:238)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2020)
... 7 more


Den Import von activation.jar habe ich absichtlich ausgeklammert, da dies überhaupt nicht genutzt wird und es weder mit noch ohne läuft. Aus der Fehlerbeschreibung erkenne ich nur, dass es am Befehl Transport.send(message); hapert, aber warum?
Ich habe die JavaMail API Version 1.5.4 und die JAF 1.1.
Ich verstehe nicht, warum es weder über Eclipse noch über die von mir erstellte Batch-Datei eine Verbindung aufbauen kann. Aktuell läuft es zwar nur auf einer virtuellen Maschine, um erstmal alles zu testen, aber diese hat definitiv eine Verbindung zum Internet eingestellt als Netzwerkbrücke und nicht als NAT. Kann mir jemand n Tipp geben?
 
Daran haperts: Couldn't connect to host, port: localhost, 25; timeout -1;
Du hast keinen SMTP Server auf deinem Rechner. Muesstest also in der Variable host den SMTP Server von gmx angeben. (https://help.gmx.com/en/applications/pop3.html)

PS: Verwende bitte
Code:
 Tags fuer den Quellcode.
 
Ok, werde ich beim nächsten Code umsetzen.
Leider kann ich in die Variable host einsetzen was ich möchte, die Fehlermeldung ändert sich nicht.
Probiert habe ich: pop.gmx.com, pop.gmx.net, imap.gmx.com, imap.gmx.net und bei
Code:
properties.setProperty("mail.gmx.net", host);
habe ich mail.gmx.net und mail.gmx.com eingegeben.
Zudem glaube ich, dass ich die Authentifikation falsch implementiert habe.
Es müsste wohl:
Code:
 properties.setProperty("mail.user", "nas-email-adresse@gmx.de");
 properties.setProperty("mail.password", "nas-email-passwort");
sein. Ich hatte es zunächst andersrum. Leider bringt mir das alles aber nichts :(
 
Deine Annahme war richtig. Die Authentifikation muss angepasst werden. :)
So sollte es funktionieren. "mail.debug" kannst du nachher noch auf false setzen.

Code:
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendEmail
{
    public static void main(String [] args)
    {
        // Recipient's email ID needs to be mentioned.
        String to = "meine-emailadresse@gmx.de";

        // Sender's email ID needs to be mentioned
        String from = "nas-email-adresse@gmx.de";

        // SMTP Settings
        String username = "nas-email-adresse@gmx.de";
        String password = "nas-email-passwort";
        String host = "mail.gmx.com";

        // Get system properties
        Properties properties = System.getProperties();

        // Setup mail server
        properties.put("mail.smtp.host", host);
        properties.put("mail.smtp.auth", "true");
        properties.put("mail.debug", "true");
        properties.put("mail.smtp.starttls.enable", "true");
        properties.put("mail.smtp.port", "587");
        properties.put("mail.smtp.socketFactory.port", "587");
        properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        properties.put("mail.smtp.socketFactory.fallback", "false");

        // Get the default Session object.
        // Session session = Session.getDefaultInstance(properties);
        Session session = Session.getInstance(properties, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
            }
        });

        try{
            // Create a default MimeMessage object.
            MimeMessage message = new MimeMessage(session);

            // Set From: header field of the header.
            message.setFrom(new InternetAddress(from));

            // Set To: header field of the header.
            message.addRecipient(Message.RecipientType.TO,
                    new InternetAddress(to));

            // Set Subject: header field
            message.setSubject("This is the Subject Line!");

            // Now set the actual message
            message.setText("This is actual message");

            // Send message
            Transport.send(message);
            System.out.println("Sent message successfully....");

        } catch (MessagingException mex) {
            mex.printStackTrace();
        }
    }
}
 
BreeZrX schrieb:
Code:
properties.setProperty("mail.gmx.net", host);

Das ist das Problem. Du weist dem Property "mail.gmx.net" den Wert "localhost" zu.
Die JavaMail-API liest den Host aber aus der Property "mail.PROTOKOLL.host" aus (steht auch so im verlinkten Tutorial).

Bei SMTP lautet das Property entsprechend "mail.smtp.host". Siehe auch https://javamail.java.net/nonav/docs/api/

Lösung:
Code:
// Assuming you are sending email from localhost
String host = "mail.gmx.net";  // Andieser Stelle kannst du die Host-Adressen durchprobieren

// ...

// Diese Zeile unverändert aus dem Tutorial übernehmen. 
properties.setProperty("mail.smtp.host", host);
 
@r15ch13 danke für den Code! Habe daraus nun eine .exe-Datei erstellt, welche über die Aufgabenplanung bei Anmeldung des Benutzers ausgeführt wird. Klappt super :)
Auch allen anderen vielen Dank für die Hilfe!

Gibt es über Java vielleicht auch noch die Möglichkeit, eine Fritzbox 6490 Cable einmal am Tag neustarten zu lassen? :)
 
kannst mit einer kleinen EXE bewerkstelligen:

http://sourceforge.net/projects/blat/files/

einfach einen Scheduler-Task "bei Rechnerstart" dazu erstellen


die Fritzbox kannst du mit einem curl-script rebooten
das curl-script "simuliert" einen händischen Login + Navigation + Push auf Reset.
da findest du sicherlich vieles im Netz

z.B.
https://debianforum.de/forum/viewtopic.php?f=26&t=136977

EDIT: Cable editions mögen Freetzen nicht...
Alternativ "freetz"-t du deine Box und lässt den reboot über den integrierten cron laufen :bussi:
 
Zuletzt bearbeitet: (fritz)
Alles klar, dann werde ich dazu mal suchen. Aber was meinst du mit Cable editions mögen Freetzen nicht? Also was ist Freetzen bzw. freetz -t? Und was ist cron? :D sorry ^^

EDIT: ok was freetzen bedeutet hab ich jetzt :D nur was cron ist weiß ich nicht so ganz.
Zu erwähnen wäre vllt noch, dass die Box vom Netzbetreiber ist und ich daher keine Mod an der Firmware für sinnvoll halte, sonst gibts hinterher vom Betreiber auf den Allerwertesten :D
 
Zuletzt bearbeitet:
Zurück
Oben