質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.32%

  • Java

    14438questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

JavaMailについて

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 237

arutaka

score 17

OS: Ubuntu18.04
言語:Java
お題:JavaMail でメールを受信したい
参考:2007-09-05 diary: [Java] JavaMailによるシンプルなメール受信サンプル
http://www.igapyon.jp/igapyon/diary/2007/ig070905.html
ソース:以下サイトから…
症状:全く受信されません
要望:できれば受信したい

import java.io.IOException;
import java.util.Properties;

import javax.mail.Address;
import javax.mail.AuthenticationFailedException;
import javax.mail.Authenticator;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.Message.RecipientType;
import javax.mail.internet.InternetAddress;

/**
 * 本文も読むメール受信サンプル。
 * 
 * 注意: このサンプルを実行すると、メールサーバ上のメールが削除されます!
 */
public class SimpleRecvMail {
    public static void main(final String[] args) {
        System.out.println("メール受信: 開始");

        new SimpleRecvMail().process();

        System.out.println("メール受信: 終了");
    }

    public void process() {
        final Properties props = new Properties();

        // 基本情報。ここでは gmailへの接続例を示します。
        props.setProperty("mail.pop3.host", "pop.gmail.com");
        props.setProperty("mail.pop3.port", "995");

        // タイムアウト設定
        props.setProperty("mail.pop3.connectiontimeout", "60000");
        props.setProperty("mail.pop3.timeout", "60000");

        // SSL関連設定
        props.setProperty("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.setProperty("mail.pop3.socketFactory.fallback", "false");
        props.setProperty("mail.pop3.socketFactory.port", "995");

        final Session session = Session.getInstance(props, new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("受信者○○○@gmail.com", "password");
            }
        });

        // デバッグを行います。標準出力にトレースが出ます。
        session.setDebug(true);

        Store store = null;
        try {
            try {
                store = session.getStore("pop3");
            } catch (NoSuchProviderException e) {
                System.out.println("メール受信: 指定プロバイダ[pop3]の取得に失敗しました。"
                        + e.toString());
                return;
            }

            try {
                store.connect();
            } catch (AuthenticationFailedException e) {
                System.out.println("メール受信: サーバ接続時に認証に失敗しました。" + e.toString());
                return;
            } catch (MessagingException e) {
                System.out.println("メール受信: サーバ接続に失敗しました。" + e.toString());
                return;
            }

            Folder folder = null;
            try {
                try {
                    // INBOXは予約語です。
                    folder = store.getFolder("INBOX");
                } catch (MessagingException e) {
                    System.out.println("メール受信: INBOXフォルダ取得に失敗しました。"
                            + e.toString());
                    return;
                }
                try {
                    // 読み書きモードでオープン
                    folder.open(Folder.READ_WRITE);
                } catch (MessagingException e) {
                    System.out
                            .println("メール受信: フォルダオープンに失敗しました。" + e.toString());
                    return;
                }

                // メッセージ一覧を取得
                try {
                    final Message messages[] = folder.getMessages();
                    for (int index = 0; index < messages.length; index++) {
                        final Message message = messages[index];

                        // このAPI利用範囲であれば TOPコマンド止まりで、RETRコマンドは送出されない。

                        System.out.println("Subject: " + message.getSubject());
                        System.out.println("  Date: "
                                + message.getSentDate().toString());

                        // TODO 0番目の配列アクセスをおこなっている点に注意。
                        final InternetAddress addrFrom = (InternetAddress) message.getFrom()[0];
                        System.out.println("  From: " + addrFrom.getAddress());
                        // MimeUtility.decodeText(addrFrom.getPersonal())

                        // To: を表示。
                        final Address[] addrsTo = message.getRecipients(RecipientType.TO);
                        for (int loop = 0; loop < addrsTo.length; loop++) {
                            final InternetAddress addrTo = (InternetAddress) addrsTo[loop];
                            System.out.println("  To: " + addrTo.getAddress());
                        }

                        // Cc:は割愛

                        try {
                            // RETRコマンドを送出
                            System.out.println(message.getContent());
                        } catch (IOException e) {
                            e.printStackTrace();
                        }

                        // 読み込んだメールについては削除マークします。
                        // ※これで読み込み済みメールが削除されます。
                        message.setFlag(Flags.Flag.DELETED, true);
                    }
                } catch (MessagingException e) {
                    System.out.println("メール受信: メッセージ取得に失敗しました。" + e.toString());
                    return;
                }
            } finally {
                if (folder != null) {
                    try {
                        // 削除マークされたメールを実際に削除
                        folder.close(true);
                    } catch (MessagingException e) {
                        System.out.println("メール受信: フォルダクローズに失敗しました。"
                                + e.toString());
                    }
                }
            }
        } finally {
            if (store != null) {
                try {
                    store.close();
                } catch (MessagingException e) {
                    System.out.println("メール受信: サーバ切断に失敗しました。" + e.toString());
                }
            }
        }
    }
}


メール受信: 開始
DEBUG: setDebug: JavaMail version 1.4.5
DEBUG: getProvider() returning javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc]
DEBUG POP3: mail.pop3.rsetbeforequit: false
DEBUG POP3: mail.pop3.disabletop: false
DEBUG POP3: mail.pop3.forgettopheaders: false
DEBUG POP3: mail.pop3.cachewriteto: false
DEBUG POP3: mail.pop3.filecache.enable: false
DEBUG POP3: mail.pop3.keepmessagecontent: false
DEBUG POP3: mail.pop3.starttls.enable: false
DEBUG POP3: mail.pop3.starttls.required: false
DEBUG POP3: mail.pop3.apop.enable: false
DEBUG POP3: mail.pop3.disablecapa: false
DEBUG POP3: connecting to host "pop.gmail.com", port 995, isSSL false
メール受信: サーバ接続に失敗しました。javax.mail.MessagingException: Connect failed;
nested exception is:
javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
メール受信: 終了

とコンソールででます。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • y_waiwai

    2018/07/20 16:33

    それでどうなるんでしょうか。エラーが出るならエラーメッセージを提示してください。

    キャンセル

回答 1

+1

メール受信: サーバ接続に失敗しました。javax.mail.MessagingException: Connect failed;

メールサーバの設定をよく確認してみましょう

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/20 17:06

    メールサーバの設定をよく確認とは

    1.いわゆる、ソースの中のsetPropertyやpasswordやIDのパラメータを確認すると
    言うことでしょうか。

    2.それとも、googleなどのサイトにアクセスして、設定をいじるような
    ところがあるのでしょうか。

    キャンセル

  • 2018/07/20 17:14

    両方です
    あなたは実際にメールソフトでそこに接続してメールの受信してますか?

    キャンセル

  • 2018/07/20 18:51

    1.一般的なメールソフトやネット上では、現在使っているアカウントでのメールの受信は確かにしていますし、従ってアカウントも存在します。

    2.また、そのアカウントでソースの中での設定しなくてはいけない個人情報も
    それぞれ入っている筈です。

    もしくは 1. についてですが、今回JavaMailで受信するということは、
    サーバーに使用用途変更のような通知をしないと行けなかったりするのでしょうか。

    キャンセル

  • 2018/07/20 19:00

    > サーバーに使用用途変更のような通知をしないと行けなかったりするのでしょうか。
    そゆ設定はないですが、gmailの場合はPOPサーバを使用するかどうかの設定はありましたね

    その現在メーラで受信しているその設定どおりをそのコード中で設定されてるか、をチェックすることですね
    そして、どういうエラーが出るのか、どういうレスポンスがサーバから返るのか、をしっかり把握しときましょう

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.32%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Java

    14438questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。