2

Java で電子メールを送信するには、bash で sendmail を使用する必要があります。構成が重複しているため、javamail を使用できません...

    package fr.thales.edf.reportEmailAcrAcq.email;

    import java.io.IOException;

    import org.apache.log4j.Level;
    import org.apache.log4j.Logger;

    public class SendHTMLEmail {
        private static final String SENDMAIL = "sendmail -R hdrs -N never -t -v <         ";
        private static final Logger LOGGER = Logger.getLogger(SendHTMLEmail.class
                .getName());

        private String fileName;

        public SendHTMLEmail(String fileName) {
            this.fileName = fileName;
        }

        public void sendMail() {
            String command = SENDMAIL + fileName;
            try {
                Runtime r = Runtime.getRuntime();
                LOGGER.log(Level.INFO, "Envoi de la commande: " + command);
                Process p = r.exec(command);
                p.waitFor();
                LOGGER.log(Level.INFO,
                        "Résultat de l'envoi de l'e-mail : " + p.getOutputStream());
            } catch (InterruptedException ex) {
                LOGGER.log(Level.FATAL, ex.getMessage());
            } catch (IOException ex) {
                LOGGER.log(Level.FATAL, ex.getMessage());
            }
        }
    }

これは私のログファイルです:

    INFO - Command: sendmail -R hdrs -N never -t -v < ACR_20130111_100744.html

しかし、私のプログラムは電子メールを送信せず、sendmail コマンドがまだ実行されています (2 時間後でも)。もう1つ、bashスクリプトで同じコマンドを使用すると、5分で機能します...

4

2 に答える 2

1

私は解決策を見つけました:

    package fr.thales.edf.reportEmailAcrAcq.email;

    import java.io.IOException;

    import org.apache.log4j.Level;
    import org.apache.log4j.Logger;

    public class SendHTMLEmail {
        private static final String SENDMAIL = "sendmail -R hdrs -N never -t -v < ";
        private static final Logger LOGGER = Logger.getLogger(SendHTMLEmail.class
                .getName());

        private String fileName;

        public SendHTMLEmail(String fileName) {
            this.fileName = fileName;
        }

        public void sendMail() {
            String command = SENDMAIL + fileName;
            try {
                Runtime r = Runtime.getRuntime();
                LOGGER.log(Level.INFO, "Envoi de la commande: " + command);
                Process p = r.exec(new String[]{"/usr/bin/ksh", "-c", command});
                p.waitFor();
                LOGGER.log(Level.INFO,
                        "Résultat de l'envoi de l'e-mail : " + p.getOutputStream());
            } catch (InterruptedException ex) {
                LOGGER.log(Level.FATAL, ex.getMessage());
            } catch (IOException ex) {
                LOGGER.log(Level.FATAL, ex.getMessage());
            }

        }
    }

このフォーラムで答えを見つけました: http://www.coderanch.com/t/379834/java/java/executing-shell-script-java

于 2013-01-11T10:10:38.903 に答える
0

Java からプロセスを作成する場合、その入力ストリームと出力ストリームも処理する必要があります。特に、ProcessSTDOUT および STDERR からすべての出力を読み取らない限り、a は終了しない場合があります。ここでは、一般的な問題について説明します。あなたはそれらの最初のものに苦しんでいるようです。

于 2013-01-11T09:52:28.180 に答える