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

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

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

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

Q&A

0回答

1412閲覧

JavaのTransport.send()が遅い

jiro-sima

総合スコア20

Java

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

0グッド

0クリップ

投稿2019/06/30 04:24

前提・実現したいこと

メール送信システムの改善

発生している問題

メール送信システムをJavaで作成中、処理が目に見えて遅かったので計測したところ
Transport.send()で約2700msかかっており、全体の99%を占めていました
改善法等ご存じの方いらっしゃいましたらお教えください

該当のソースコード

Java

1import java.io.UnsupportedEncodingException; 2import java.util.Date; 3import java.util.Properties; 4 5import javax.mail.Address; 6import javax.mail.AuthenticationFailedException; 7import javax.mail.Message; 8import javax.mail.MessagingException; 9import javax.mail.PasswordAuthentication; 10import javax.mail.Session; 11import javax.mail.Transport; 12import javax.mail.internet.InternetAddress; 13import javax.mail.internet.MimeMessage; 14 15public class SendEmail { 16 final String encoding = "ISO-2022-JP"; 17 public boolean isSendEmail(PreMember preMember) { 18 19 final Properties props = new Properties(); 20 //smtpサーバーの設定 21 props.setProperty("mail.smtp.host", "smtp.gmail.com"); 22 //ポート設定(SSL用) 23 props.setProperty("mail.smtp.port", "465"); 24 //タイムアウト設定 25 props.setProperty("mail.smtp.connectiontimeout", "10000"); 26 props.setProperty("mail.smtp.timeout", "10000"); 27 //認証 28 props.setProperty("mail.smtp.auth", "true"); 29 //SSL設定 30 props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 31 props.setProperty("mail.smtp.socketFactory.fallback", "false"); 32 props.setProperty("mail.smtp.socketFactory.port", "465"); 33 34 final Session session = Session.getInstance(props, new javax.mail.Authenticator() { 35 protected PasswordAuthentication getPasswordAuthentication() { 36 return new PasswordAuthentication("送信者メールアドレス", "パスワード"); 37 } 38 }); 39 40 //デバッグ 41 session.setDebug(true); 42 43 final MimeMessage message = new MimeMessage(session); 44 45 try { 46 final Address addrFrom = new InternetAddress("送信者メールアドレス", "送信者名", encoding ); 47 message.setFrom(addrFrom); 48 final Address addrTo = new InternetAddress(preMember.getEmail(), "", encoding); 49 message.addRecipient(Message.RecipientType.TO, addrTo); 50 51 //改行コード 52 String newLine = System.lineSeparator(); 53 //メール内容 54 message.setSentDate(new Date()); 55 message.setSubject("登録認証", encoding); 56 message.setText("以下のURLから登録を完了してください" + newLine + "http://localhost:8080/sample/RegistrationPro?token=" + preMember.getToken(), encoding); 57 message.setHeader("Content-Transfer-Encoding", "7bit"); 58 } catch (MessagingException e) { 59 e.printStackTrace(); 60 System.out.println("プロパティ設定異常"); 61 } catch (UnsupportedEncodingException e) { 62 e.printStackTrace(); 63 System.out.println("エンコーディング設定異常"); 64 } 65 try { 66 //処理時間計測 67 long startTime = System.currentTimeMillis(); 68 69 //送信 70 Transport.send(message); 71 72 long endTime = System.currentTimeMillis(); 73 74 System.out.println("isSendEmail()処理時間 :" + (endTime - startTime) + " ms"); 75 76 return true; 77 } catch (AuthenticationFailedException e) { 78 e.printStackTrace(); 79 System.out.println("認証エラー"); 80 } catch (MessagingException e) { 81 e.printStackTrace(); 82 System.out.println("smtpサーバー接続失敗"); 83 } catch (Exception e) { 84 e.printStackTrace(); 85 System.out.println("その他例外"); 86 } return false; 87 } 88}

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

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

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

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

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

jimbe

2019/07/01 11:37

他のメールソフトでの送信では時間は掛らないのでしょうか. 確か javamail はデバッグ用のログを出力する設定があったと思うのですが, それで何か不要な処理が行われていないかを探ってみては如何でしょう.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問