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

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

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

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

Q&A

解決済

2回答

2337閲覧

Javaでのメール送信の速度の改善について

yus3554

総合スコア7

Java

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

0グッド

0クリップ

投稿2018/08/01 14:42

編集2018/08/02 08:58

現在、私が大学で作っているシステムで、Javaでのメール送信を実装しようとしているのですが、
1通送るのに非常に時間がかかってしまいます。大体4~5秒くらいです。
これが普通だと言われてしまうと、どうしようもないですが、、、

システム上、本文がそれぞれ違うものを数十通送る可能性もあるのですが、数十件も送っていると数分かかってしまうので、
できるだけ早く送信したいのですが何かいい方法はないでしょうか。

メール送信のAPIはJavaMail ver1.6.1を使用しています。
現在macbook airで開発しており、今後は大学内のサーバPCを使うかもしれません。

よろしくお願いします。

今回のコードを書くにあたって主に、
JavaアプリケーションからEメールを送信するサンプルコード
を参考にさせていただきました。

以下はメールを送るメソッドです。メールアドレスやパスワードのところは*で埋めてます。
実行にはEclipseを使用しています。

java

1public void send(String subject, String content, String to) { 2 3 final String from = "*******@gmail.com"; 4 5 // Google account mail address 6 final String username = "*******@gmail.com"; 7 // Google App password 8 final String password = "*******"; 9 10 final String charset = "UTF-8"; 11 12 final String encoding = "base64"; 13 14 // for gmail 15 String host = "smtp.gmail.com"; 16 String port = "587"; 17 String starttls = "true"; 18 19 Properties props = new Properties(); 20 props.put("mail.smtp.host", host); 21 props.put("mail.smtp.port", port); 22 props.put("mail.smtp.auth", "true"); 23 props.put("mail.smtp.starttls.enable", starttls); 24 25 props.put("mail.smtp.connectiontimeout", "10000"); 26 props.put("mail.smtp.timeout", "10000"); 27 28 props.put("mail.debug", "true"); 29 30 Session session = Session.getInstance(props, 31 new javax.mail.Authenticator() { 32 protected PasswordAuthentication getPasswordAuthentication() { 33 return new PasswordAuthentication(username, password); 34 } 35 }); 36 37 try { 38 MimeMessage message = new MimeMessage(session); 39 message.setHeader("Content-Transfer-Encoding", encoding); 40 41 message.setSubject(subject, charset); 42 43 // Set From: 44 message.setFrom(new InternetAddress(from)); 45 // Set ReplyTo: 46 message.setReplyTo(new Address[]{new InternetAddress(from)}); 47 // Set To: 48 message.setRecipient(Message.RecipientType.TO, new InternetAddress(to)); 49 50 message.setContent(content, "text/html; charset=" + charset); 51 52 Transport.send(message); 53 54 } catch (MessagingException e) { 55 throw new RuntimeException(e); 56 } catch (UnsupportedEncodingException e) { 57 throw new RuntimeException(e); 58 } 59 60 }

以下はJavaMailのデバッグ用のログです。

DEBUG: JavaMail version 1.6.1 DEBUG: successfully loaded resource: /META-INF/javamail.default.providers DEBUG: Tables of loaded providers DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle]} DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]} DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map Thu Aug 02 01:54:33 JST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification. DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle] DEBUG SMTP: need username and password for authentication DEBUG SMTP: protocolConnect returning false, host=smtp.gmail.com, user=******, password=<null> DEBUG SMTP: useEhlo true, useAuth true DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 587, isSSL false 220 smtp.gmail.com ESMTP e21-v6sm39546145pfl.187 - gsmtp DEBUG SMTP: connected to host "smtp.gmail.com", port: 587 EHLO 192.168.3.4 250-smtp.gmail.com at your service, [60.94.102.161] 250-SIZE 35882577 250-8BITMIME 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-CHUNKING 250 SMTPUTF8 DEBUG SMTP: Found extension "SIZE", arg "35882577" DEBUG SMTP: Found extension "8BITMIME", arg "" DEBUG SMTP: Found extension "STARTTLS", arg "" DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg "" DEBUG SMTP: Found extension "PIPELINING", arg "" DEBUG SMTP: Found extension "CHUNKING", arg "" DEBUG SMTP: Found extension "SMTPUTF8", arg "" STARTTLS 220 2.0.0 Ready to start TLS EHLO 192.168.3.4 250-smtp.gmail.com at your service, [60.94.102.161] 250-SIZE 35882577 250-8BITMIME 250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-CHUNKING 250 SMTPUTF8 DEBUG SMTP: Found extension "SIZE", arg "35882577" DEBUG SMTP: Found extension "8BITMIME", arg "" DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH" DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg "" DEBUG SMTP: Found extension "PIPELINING", arg "" DEBUG SMTP: Found extension "CHUNKING", arg "" DEBUG SMTP: Found extension "SMTPUTF8", arg "" DEBUG SMTP: protocolConnect login, host=smtp.gmail.com, user=********@gmail.com, password=<non-null> DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM XOAUTH2 DEBUG SMTP: Using mechanism LOGIN DEBUG SMTP: AUTH LOGIN command trace suppressed DEBUG SMTP: AUTH LOGIN succeeded DEBUG SMTP: use8bit false MAIL FROM:<********@gmail.com> 250 2.1.0 OK e21-v6sm39546145pfl.187 - gsmtp RCPT TO:<********@gmail.com> 250 2.1.5 OK e21-v6sm39546145pfl.187 - gsmtp DEBUG SMTP: Verified Addresses DEBUG SMTP: ********@gmail.com DATA 354 Go ahead e21-v6sm39546145pfl.187 - gsmtp Date: Thu, 2 Aug 2018 01:54:33 +0900 (JST) From: =?UTF-8?B?44K544Kx44K444Ol44O844Or566h55CG44K344K544OG44Og?= <********@gmail.com> Reply-To: ********@gmail.com To: ********@gmail.com Message-ID: <423016959.1.1533142473874@[192.168.3.4]> Subject: =?UTF-8?B?W+WGjemAgV0g5Lya6K2w44Gu6ZaL5YKs5pel56iL44Gr?= =?UTF-8?B?44Gk44GE44GmKOimgeaxguiAhe+8muWkqueUsOaCoOS7iyk=?= MIME-Version: 1.0 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: base64 PGh0bWw+PGJvZHk+4oC744GT44Gu44Oh44O844Or44Gv44CB44G+44Gg5YWl5Yqb44GV44KM44Gm 44GE44Gq44GE5pa544Gr6YCB5L+h44GX44Gm44GE44G+44GZ44CCPGJyPjxicj4g5aSq55Sw5oKg 5LuL44GV44KT44GL44KJ5YWl5Yqb6KaB5rGC44GM5bGK44GE44Gm44GE44G+44GZ44CCPGJyPjxi cj48aHIgYWxpZ249ImxlZnQiIHdpZHRoPSI1NSUiPjxicj7kvJrorbDjgpLjgZfjgb7jgZnjgII8 YnI+PGhyIGFsaWduPSJsZWZ0IiB3aWR0aD0iNTUlIj48YnI+6L+U562U44Gv5Lul5LiL44GuVVJM 44GL44KJ44CBMjAxOC0wOC0yMOOBvuOBp+OBq+OBiumhmOOBhOOBl+OBvuOBmeOAgjxicj48YSBo cmVmPSJodHRwOi8vbG9jYWxob3N0OjgwODAvU2NoZWR1bGVNYW5hZ2VyL0Fuc3dlclBhZ2UvMHJr NVBuRklqTCI+6L+U562U44Oa44O844K4PC9hPjxicj48YnI+PC9ib2R5PjwvaHRtbD4= . 250 2.0.0 OK 1533142477 e21-v6sm39546145pfl.187 - gsmtp DEBUG SMTP: message successfully delivered to mail server QUIT 221 2.0.0 closing connection e21-v6sm39546145pfl.187 - gsmtp

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

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

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

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

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

CHERRY

2018/08/02 07:07

ソースコードやログを眺めた感じでは、特に時間がかかるような処理はなさそうですが...  同じネットワークからメールクライアント(Mail.app や Thunderbird 等)で、 gmail の smtp 経由で、メールを送信すると送信ボタンを押してからどれぐらいの時間がかかるんでしょう。
yus3554

2018/08/02 08:49

先ほどThunderbirdでgmailと大学のメールとで送信比較してみたのですが、明らかにgmailの方が遅かったです。大学のメールがほぼ一瞬だったのに対して、4秒程度かかっていました。gmailをやめればいいってことなんですかね?
guest

回答2

0

自己解決

CHERRYさんのご指摘により、使用するメールアカウントをGmailから大学のメールアカウントに変えたところ、
非常に早く送信することができました。

お二人とも、ありがとうございました。

投稿2018/08/02 09:16

yus3554

総合スコア7

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

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

0

添付ファイルがあればzipしましょう、くらいのコメント程度は付きますが、差支えない限り、現行の設定やコードを載せないと適切なコメントは付かないのでは?

投稿2018/08/01 16:18

Orlofsky

総合スコア16404

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

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

yus3554

2018/08/01 17:09

確かにその通りです、申し訳ありません。 追記でソースとデバッグログを載せたので、もし良ければ回答いただけると幸いです。 添付ファイルはなく、件名と本文のみのメールとなっています。
Orlofsky

2018/08/02 06:39

はて、困りましたね。 参考にされたURLや書籍があれば質問に追記されては?
yus3554

2018/08/02 09:00

URLは追記しましたが、ほぼサンプルコードそのままなので、あまり参考にはならないかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.54%

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

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

質問する

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

Java

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