Shell-Befehl: mail

Sladda

Aktives Mitglied
Hallo!

Ich versuche über die Shell eine Email zu versenden. Leider will es einfach nicht klappen.
Hier mein Code:
Java:
public void runCmd(String[] args)
	{
		String cmd = "echo \"Message Content\" | mail -s \"Subject goes here\" [email]info@empfaenger.de[/email]";

		Runtime run = Runtime.getRuntime();
		try {
			Process pr = run.exec(cmd);
			
		} catch (Exception e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}
So klappt es aber leider nicht. Es passiert eigentlich einfach gar nix. Wohingegen
[JAVA=3]
String cmd = "echo 'Test'";
[/code]
funktioniert.

Hat jemand einen Tip?
Von mir aus gerne auch eine ganz andere Vorgehensweise, ich will einfach nur über die shell eine Mail verschicken.

Danke und viele Grüße
Sladda
 
Zuletzt bearbeitet:

mabuhay

Bekanntes Mitglied
Hallo

Ich verwende folgenden Code um shell-Befehle auszuführen. Damit bekomme ich auch etwaige rückgabewerte:

Java:
        String cmd = "echo Test";
        boolean showResponse = true;

        ProcessBuilder processBuilder = new ProcessBuilder(cmd);
        Process process;

		try {
			process = processBuilder.start();
		} catch (IOException e) {
			e.printStackTrace();
			if (showResponse) {
				System.out.println("Process " + processBuilder.command() + " failed to start");
			}
			return;
		}

		if (showResponse) {
			System.out.println("Process " + processBuilder.command() + " started");
		}

		//Waiting for process to end
		while (true) {
			try {
				if (showResponse) {
					System.out.println("exit value: " + process.exitValue());
				}

				break;
			} catch (Exception e) {
                                //Exception if process did not end yet
				//System.out.println("getting exit value failed");
			}
		}


		if (showResponse) {
	        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
	        BufferedReader bufferedReaderError = new BufferedReader(new InputStreamReader(process.getErrorStream()));

	        String line = "";

	        try {

	        	//Show error messages if any
				while ((line = bufferedReaderError.readLine()) != null) {
					System.err.println(line);
				}

				bufferedReaderError.close();

	        	//Show regular messages
				while ((line = bufferedReader.readLine()) != null) {
					System.out.println(line);
				}

				bufferedReader.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

Scheinbar geht es manchmal auch nicht, wenn der ganze Befehl auf einer Zeile steht. Um einen Ping auszuführen und auszuwerten zum Beispiel verwende ich

Java:
execcmd[0] = "bash";
execcmd[1] = "-c";
execcmd[2] = "ping -c 1 -W 1 " + host + " | grep ', 0% '";
ProcessBuilder processBuilder = new ProcessBuilder(execcmd);

Ich weiss nicht wieso, aber alles auf einer Zeile funktioniert nicht (hat vielleicht jemand eine Antwort?).

mfg
 
Zuletzt bearbeitet:

Sladda

Aktives Mitglied
JavaMail ist zu langsam, deswegen will ichs ja über die Shell versuchen.

@mabuhay: Danke für deine Antwort. Kopiere ich deinen Code, funktioniert dein Shell-Command. Aber wenn ich meinen Befehl (siehe oben) einsetze, funktioniert es nicht. Es muss also an dem mail-Befehl liegen.

Kann jemand etwas zu dem mail-shell-befehl sagen ? Wenn ich den gleichen befehl direkt in die shell eingebe, funktioniert er!!!
Aber nicht über den java processbuilder.

Es würde mir sehr weiterhelfen!
 

mabuhay

Bekanntes Mitglied
Bekommst du denn irgend einen rückgabewert wenn du meinen Code verwendest? Du sagst nur es "funktioniert nicht". Bei mir gibt es z.B. diverse Fehler wenn ich den Ping-Befehl auf einer Zeile schreibe. Versuche mal die dritte Zeile meines Ping-Befehls mit deinem zu überschreiben.
 

Ebenius

Top Contributor
Scheinbar geht es manchmal auch nicht, wenn der ganze Befehl auf einer Zeile steht. Um einen Ping auszuführen und auszuwerten zum Beispiel verwende ich

Java:
execcmd[0] = "bash";
execcmd[1] = "-c";
execcmd[2] = "ping -c 1 -W 1 " + host + " | grep ', 0% '";
ProcessBuilder processBuilder = new ProcessBuilder(execcmd);

Ich weiss nicht wieso, aber alles auf einer Zeile funktioniert nicht (hat vielleicht jemand eine Antwort?).
Gern. Java will ein Executable ausführen. Das Executable "ping" gibt's, aber das kann mit dem Argument "|" und dem Argument "grep" und denen danach nicht's anfangen. Eine Shell interpretiert Pipe nicht als Argument, Java's exec aber schon (genau wie auch ein exec aus C, ...). Der Ping-Befehl mit allen Argumenten bis direkt vor dem Pipe-Character würde in einer Zeile funktionieren.

Bash erfordert in dieser Form widerrum [c]-c arg[/c], das bedeutet, dass "arg" ein Argument sein muss. Wenn alles in einer Zeile Stünde, würde beim exec-Aufruf aber hinter jedem SPC ein neues Argument entstehen.

Vergleichbar innerhalb der bash:
Falsch: [c]bash -c echo huhu[/c]
Richtig: [c]bash -c 'echo huhu'[/c]

Ebenius
 

Hannes23

Bekanntes Mitglied
Hat sich denn hierfür schon eine Lösung gefunden? Ich stehe nämlich vor dem gleichen Problem.

Wie Ebenius geschrieben hat, sind hier ja vor allem die Pipes das Problem. Gleichzeitig finde ich aber keine Möglichkeit per mail/mailx ohne Pipe eine Mail zu verschicken...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B UNIX Shell befehl über JavaCode ausführen Allgemeine Java-Themen 19
S Überprüfen, ob ein Shell Befehl existiert! Allgemeine Java-Themen 4
C shell befehl mit java ein- und auslesen Allgemeine Java-Themen 2
B Input/Output Probleme beim Ausführen von Shell-Befehlen mit Java Allgemeine Java-Themen 28
S Shell Commands mit absolutem Pfad ausführen Allgemeine Java-Themen 2
D Shell Script mit Parametern Allgemeine Java-Themen 2
R Batch / Shell-Skript in Jar.Datei einbinden? Allgemeine Java-Themen 5
M Aufruf von Unix-Shell in Java Allgemeine Java-Themen 5
Semox "Gute" Rückgaben von bash Shell ausgeben Allgemeine Java-Themen 4
I Problem beim Ausführen von Shell Commandos Allgemeine Java-Themen 3
D Shell-Prozess lässt Thread nicht enden Allgemeine Java-Themen 4
D Java Anwendung in der Shell Allgemeine Java-Themen 5
T Shell befehle ausführen - wie? Allgemeine Java-Themen 2
K Shell Command Auslesen Allgemeine Java-Themen 3
G Windows Shell Umlaute Problem Allgemeine Java-Themen 19
D linux shell aus java öffnen Allgemeine Java-Themen 5
Ark Linux: Shell-Skript zum Kompileren und Starten Allgemeine Java-Themen 4
thE_29 Kontextmenü Shell Eintrag Allgemeine Java-Themen 35
C Shell in einer GUI erstellen Allgemeine Java-Themen 2
F Shell-Programme per Runtime.exec() starten und mehr? Allgemeine Java-Themen 4
M DOS-Shell kennt kein CP850!! Allgemeine Java-Themen 2
O Java via Korn-Shell Allgemeine Java-Themen 8
N Validator für einen SQL-Befehl Allgemeine Java-Themen 22
J CMD Befehl in Java Consolenprogramm ausführen Allgemeine Java-Themen 6
T Konsolen-Befehl junk Allgemeine Java-Themen 2
Joker4632 Methoden Befehl an bereits extern geöffnete Programm-spezifische Konsole senden Allgemeine Java-Themen 1
F SQLite mit Java / Probleme beim INSERT Befehl Allgemeine Java-Themen 4
F Create Befehl mit variierender Spaltenanzahl/Spaltenname Allgemeine Java-Themen 5
E String in Zahl umwandeln, ohne Befehl Integer.parseInt Allgemeine Java-Themen 3
D Klassenübergreifender Befehl geht nicht Allgemeine Java-Themen 10
T DLL Befehl Funktionsparameter Allgemeine Java-Themen 6
H FTP Befehl/Java Methode für Submit im z/Os (Host) Allgemeine Java-Themen 1
B Zeitmessen Befehl sende und empfagen Allgemeine Java-Themen 10
G Befehl funktioniert in Eclipse allerdings nicht in einer Jar-Datei Allgemeine Java-Themen 3
J java zurück befehl Allgemeine Java-Themen 18
iB0T "goto" Befehl aus Batch in Java und Variablen wert immer wieder neu setzen Allgemeine Java-Themen 4
M Befehl in Runtime ausführen der Eingabe benötigt Allgemeine Java-Themen 3
T Java Programm als Batch Befehl Allgemeine Java-Themen 6
K der Befehl "runas" Allgemeine Java-Themen 13
Jats Programm mit CMD Befehl hängt sich auf oder gibt error = 5 aus Allgemeine Java-Themen 4
D befehl auf mehrere objekte anwenden Allgemeine Java-Themen 7
M String in Befehl umwandeln Allgemeine Java-Themen 10
G CMD befehl: BAT erstellen, reinschreiben und starten? Allgemeine Java-Themen 12
S Suche Pendant zu einem VB Befehl Allgemeine Java-Themen 2
P SQL Befehl Allgemeine Java-Themen 15
G Befehl an OS X cmd Allgemeine Java-Themen 7
L mit exec() befehl ausführen ( OS X / Linux) Allgemeine Java-Themen 8
T jar mit Befehl zur Vergrößerung des VM-Speichers Allgemeine Java-Themen 11
S mit welchem befehl kann ich mein programm autom. schließen Allgemeine Java-Themen 3
A Zusammenfassen von zwei Dateien (wie beim DOS-Befehl copy) Allgemeine Java-Themen 6
S String als Befehl interpretieren Allgemeine Java-Themen 2
S GetColor? anderer befehl Allgemeine Java-Themen 13
M Methode x mal ausführen auf Befehl Allgemeine Java-Themen 7
L linux befehl aus java programm starten Allgemeine Java-Themen 7
M Unter MacOS einen Befehl auf Konsole ausführen? Allgemeine Java-Themen 6
G JDK Version - exec Befehl Allgemeine Java-Themen 3
M Befehl unter Win98 ausführen? Allgemeine Java-Themen 3
M Befehl aus Anwendung starten Allgemeine Java-Themen 7
B befehl "java" wird nicht gefunden Allgemeine Java-Themen 4
Z E-Mail senden Allgemeine Java-Themen 2
C Probleme mit javax.mail.Session Allgemeine Java-Themen 8
jumichel Eclipse The package javax.mail is not accessible Allgemeine Java-Themen 3
N E-Mail Validator (ohne Regex!) Allgemeine Java-Themen 7
TechnikTVcode Mail Programm Allgemeine Java-Themen 2
N E-Mail per Java verschicken Allgemeine Java-Themen 2
C javax.mail.Message message.setreplyto() null setzen (keine replyto Adresse) Allgemeine Java-Themen 25
B Java Mail: Prüfung auf neue Emails Allgemeine Java-Themen 1
B Java Mail: Emails sortieren? Allgemeine Java-Themen 5
B Java Mail: Prüfen, ob Email hat ein Anhang oder nicht Allgemeine Java-Themen 2
B Mail: Nicht vorhandener Empfänger ermitteln Allgemeine Java-Themen 4
B Java Mail: Unterscheidung bei Attachments und eingefügte Bilder in Email Allgemeine Java-Themen 18
T java mail 1.4.2| ssl Allgemeine Java-Themen 2
E javax.mail sene Type ändern Allgemeine Java-Themen 2
R Compiler-Fehler Bild per E-Mail versenden Allgemeine Java-Themen 3
H IDEA IntelliJ Java Mail funktioniert nach Export nicht mehr! Allgemeine Java-Themen 1
D JPanel in Mail darstellen Allgemeine Java-Themen 30
D Mail aus GUI generieren Allgemeine Java-Themen 2
U javax.mail.Folder.list() zeigt nicht alle Ordner Allgemeine Java-Themen 5
KeVoZ_ Java Mail senden - geht nicht Allgemeine Java-Themen 4
K Input/Output E-mail Zusammenfassen Senden Allgemeine Java-Themen 2
F Java Mail Problem: Authentifizierung wird nicht immer mitgeschickt Allgemeine Java-Themen 1
M Java Mail verwenden Allgemeine Java-Themen 20
X Mail versenden mit java.mail Allgemeine Java-Themen 14
L Java Mail Allgemeine Java-Themen 0
H Java Mail Fehlermeldung: java.lang.NoClassDefFoundError: javax/mail/internet/AddressException Allgemeine Java-Themen 5
B Java Mail Client als Outlook ausgeben Allgemeine Java-Themen 2
F E-Mail aus JAVA senden nach Umstellung auf Netbean 7.4 mit Java 7U45 nicht mehr möglich Allgemeine Java-Themen 4
T popup für e-mail Allgemeine Java-Themen 2
Z Java E-Mail Client mit End-to-End-Verschlüsselung Allgemeine Java-Themen 4
P javax.mail MessageCount Allgemeine Java-Themen 13
I Eigenes Mail-Programm schreiben Allgemeine Java-Themen 21
C E-Mail: Authenticator.getPasswordAuthentication() wird nicht gerufen Allgemeine Java-Themen 2
GUI-Programmer Java Mail - Proxy für Verbindung einstellen Allgemeine Java-Themen 2
P Mail wird nicht gesendet - Muss ich kein PW angeben ? Allgemeine Java-Themen 13
U Mailclient über getDesktop.mail vorbereiten, Problem beim Anhang: Allgemeine Java-Themen 3
S Mail Adressen Syntax prüfen Allgemeine Java-Themen 22
S Java Mail Allgemeine Java-Themen 3
G Problem Java Mail API: CC wird nicht berücksichtigt Allgemeine Java-Themen 7
R php hat mail() und java? Allgemeine Java-Themen 5
B Per BatchScript Mail versenden Allgemeine Java-Themen 27

Ähnliche Java Themen

Neue Themen


Oben