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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Java

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

Q&A

1回答

4635閲覧

JavaMailについて

arutaka

総合スコア29

Java

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

0グッド

0クリップ

投稿2018/07/20 07:11

編集2022/01/12 10:55

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

Java

1import java.io.IOException; 2import java.util.Properties; 3 4import javax.mail.Address; 5import javax.mail.AuthenticationFailedException; 6import javax.mail.Authenticator; 7import javax.mail.Flags; 8import javax.mail.Folder; 9import javax.mail.Message; 10import javax.mail.MessagingException; 11import javax.mail.NoSuchProviderException; 12import javax.mail.PasswordAuthentication; 13import javax.mail.Session; 14import javax.mail.Store; 15import javax.mail.Message.RecipientType; 16import javax.mail.internet.InternetAddress; 17 18/** 19 * 本文も読むメール受信サンプル。 20 * 21 * 注意: このサンプルを実行すると、メールサーバ上のメールが削除されます! 22 */ 23public class SimpleRecvMail { 24 public static void main(final String[] args) { 25 System.out.println("メール受信: 開始"); 26 27 new SimpleRecvMail().process(); 28 29 System.out.println("メール受信: 終了"); 30 } 31 32 public void process() { 33 final Properties props = new Properties(); 34 35 // 基本情報。ここでは gmailへの接続例を示します。 36 props.setProperty("mail.pop3.host", "pop.gmail.com"); 37 props.setProperty("mail.pop3.port", "995"); 38 39 // タイムアウト設定 40 props.setProperty("mail.pop3.connectiontimeout", "60000"); 41 props.setProperty("mail.pop3.timeout", "60000"); 42 43 // SSL関連設定 44 props.setProperty("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 45 props.setProperty("mail.pop3.socketFactory.fallback", "false"); 46 props.setProperty("mail.pop3.socketFactory.port", "995"); 47 48 final Session session = Session.getInstance(props, new Authenticator() { 49 protected PasswordAuthentication getPasswordAuthentication() { 50 return new PasswordAuthentication("受信者○○○@gmail.com", "password"); 51 } 52 }); 53 54 // デバッグを行います。標準出力にトレースが出ます。 55 session.setDebug(true); 56 57 Store store = null; 58 try { 59 try { 60 store = session.getStore("pop3"); 61 } catch (NoSuchProviderException e) { 62 System.out.println("メール受信: 指定プロバイダ[pop3]の取得に失敗しました。" 63 + e.toString()); 64 return; 65 } 66 67 try { 68 store.connect(); 69 } catch (AuthenticationFailedException e) { 70 System.out.println("メール受信: サーバ接続時に認証に失敗しました。" + e.toString()); 71 return; 72 } catch (MessagingException e) { 73 System.out.println("メール受信: サーバ接続に失敗しました。" + e.toString()); 74 return; 75 } 76 77 Folder folder = null; 78 try { 79 try { 80 // INBOXは予約語です。 81 folder = store.getFolder("INBOX"); 82 } catch (MessagingException e) { 83 System.out.println("メール受信: INBOXフォルダ取得に失敗しました。" 84 + e.toString()); 85 return; 86 } 87 try { 88 // 読み書きモードでオープン 89 folder.open(Folder.READ_WRITE); 90 } catch (MessagingException e) { 91 System.out 92 .println("メール受信: フォルダオープンに失敗しました。" + e.toString()); 93 return; 94 } 95 96 // メッセージ一覧を取得 97 try { 98 final Message messages[] = folder.getMessages(); 99 for (int index = 0; index < messages.length; index++) { 100 final Message message = messages[index]; 101 102 // このAPI利用範囲であれば TOPコマンド止まりで、RETRコマンドは送出されない。 103 104 System.out.println("Subject: " + message.getSubject()); 105 System.out.println(" Date: " 106 + message.getSentDate().toString()); 107 108 // TODO 0番目の配列アクセスをおこなっている点に注意。 109 final InternetAddress addrFrom = (InternetAddress) message.getFrom()[0]; 110 System.out.println(" From: " + addrFrom.getAddress()); 111 // MimeUtility.decodeText(addrFrom.getPersonal()) 112 113 // To: を表示。 114 final Address[] addrsTo = message.getRecipients(RecipientType.TO); 115 for (int loop = 0; loop < addrsTo.length; loop++) { 116 final InternetAddress addrTo = (InternetAddress) addrsTo[loop]; 117 System.out.println(" To: " + addrTo.getAddress()); 118 } 119 120 // Cc:は割愛 121 122 try { 123 // RETRコマンドを送出 124 System.out.println(message.getContent()); 125 } catch (IOException e) { 126 e.printStackTrace(); 127 } 128 129 // 読み込んだメールについては削除マークします。 130 // ※これで読み込み済みメールが削除されます。 131 message.setFlag(Flags.Flag.DELETED, true); 132 } 133 } catch (MessagingException e) { 134 System.out.println("メール受信: メッセージ取得に失敗しました。" + e.toString()); 135 return; 136 } 137 } finally { 138 if (folder != null) { 139 try { 140 // 削除マークされたメールを実際に削除 141 folder.close(true); 142 } catch (MessagingException e) { 143 System.out.println("メール受信: フォルダクローズに失敗しました。" 144 + e.toString()); 145 } 146 } 147 } 148 } finally { 149 if (store != null) { 150 try { 151 store.close(); 152 } catch (MessagingException e) { 153 System.out.println("メール受信: サーバ切断に失敗しました。" + e.toString()); 154 } 155 } 156 } 157 } 158} 159

メール受信: 開始
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
メール受信: 終了

とコンソールででます。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2018/07/20 07:33

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

回答1

0

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

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

投稿2018/07/20 07:51

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

arutaka

2018/07/20 08:06

メールサーバの設定をよく確認とは 1.いわゆる、ソースの中のsetPropertyやpasswordやIDのパラメータを確認すると 言うことでしょうか。 2.それとも、googleなどのサイトにアクセスして、設定をいじるような ところがあるのでしょうか。
y_waiwai

2018/07/20 08:14

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

2018/07/20 09:51

1.一般的なメールソフトやネット上では、現在使っているアカウントでのメールの受信は確かにしていますし、従ってアカウントも存在します。 2.また、そのアカウントでソースの中での設定しなくてはいけない個人情報も それぞれ入っている筈です。 もしくは 1. についてですが、今回JavaMailで受信するということは、 サーバーに使用用途変更のような通知をしないと行けなかったりするのでしょうか。
y_waiwai

2018/07/20 10:00

> サーバーに使用用途変更のような通知をしないと行けなかったりするのでしょうか。 そゆ設定はないですが、gmailの場合はPOPサーバを使用するかどうかの設定はありましたね その現在メーラで受信しているその設定どおりをそのコード中で設定されてるか、をチェックすることですね そして、どういうエラーが出るのか、どういうレスポンスがサーバから返るのか、をしっかり把握しときましょう
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問