メニュー
人気記事
それでは、JavaMailのセキュリティがどうなっているのかを確認していきたいと思います。"JavaMailはセキュリティ部分を実装していません"とJavaMailの付属のドキュメントやSUNのJavaMailのサイトに記述してあります。 ここで、JavaMailの構成を図-1に示します。
図-1 JavaMailフレームワークとプロバイダ
実は、"JavaMailはセキュリティに対応していません"と言う説明はJavaMailフレームワークの部分のことを示しています。従って、以下のことが言えます。
・ セキュリティの実装はプロバイダが行います・ JavaMailに標準でついてくるSUNのプロバイダが実装していない認証方法でも、新たなプロバイダを作成することによって対応させることが可能です
では、JavaMail標準のSMTP,POP3,IMAPプロバイダはどのような認証方法に対応しているか説明します。各プロトコルの認証方法とJavaMail付属のプロバイダとの関係を表-1に示します。
表-1より、JavaMail付属のプロバイダは、パスワードが平文のものしかサポートされていないことがわかります。ただし、サードパーティー製のプロバイダでは、APOPなどをサポートしているものもあります。SUNのJavaMailのサイトにプロバイダを作成している企業、個人のページへのリンクがあります。その中にはAPOPのプロバイダはフリー(GPL)で配布されているものもあります。必要に応じて調べて下さい。
JavaMail付属のプロバイダは、セキュリティ保護された認証方式を確かにサポートしていませんが、SMTP AUTHはサポートしています。それではJavaMail付属のプロバイダを利用して、AUTH LOGINで認証を行うプログラムを書いてみましょう。
(注) 実際に認証を行うためにはメールサーバ側がAUTH LOGINに対応している必要があるので注意して下さい リスト-1は、SMTP AUTHを利用しない場合の例です。 リスト-1 認証なしのSMTPでの送信部分
<省略> 1 Properties props = new Properties(); 2 props.put("mail.smtp.host","127.0.0.1"); //SMTPサーバのアドレス 3 props.put("mail.debug", "true"); //JavaMailのデバッグモード 4 5 Session session = Session.getDefaultInstance(props,null); <省略> 6 //メール本文を作成 7 MimeMessage msg = new MimeMessage(session); 8 9 //送信先アドレス 10 InternetAddress[] to = { new InternetAddress("test@localhost") }; 11 msg.setRecipients(Message.RecipientType.TO,to); 12 13 //送信元アドレス 14 msg.setFrom(new InternetAddress("test@localhost")); 15 16 //サブジェクト 17 msg.setSubject("test"); 18 19 //本文 20 msg.setText("testmail"); 21 22 //送信 23 Transport.send(msg); <以下略>
リスト-2は、SMTP AUTHを利用した場合の例です。
<省略> 1 Properties props = new Properties(); 2 props.put("mail.smtp.host","127.0.0.1"); //SMTPサーバのアドレス 3 props.put("mail.debug", "true"); //JavaMailのデバッグモード 4 props.put( "mail.smtp.auth", "true" ); //SMTP authを利用する 5 Session session = Session.getDefaultInstance(props,null); <省略> 6 //メール本文を作成 7 MimeMessage msg = new MimeMessage(session); 8 9 //送信先アドレス 10 InternetAddress[] to = { new InternetAddress("test@localhost") }; 11 msg.setRecipients(Message.RecipientType.TO,to); 12 13 //送信元アドレス 14 msg.setFrom(new InternetAddress("test@localhost")); 15 16 //サブジェクト 17 msg.setSubject("test"); 18 19 //本文 20 msg.setText("testmail"); 21 22 //送信 23 Transport tp = session.getTransport("smtp"); 24 tp.connect( "127.0.0.1", //SMTPサーバ 25 "userid", //ユーザID 26 "passwd" ); //パスワード 27 28 tp.sendMessage( msg, //メール本文 29 to ); //送信先リスト 30 <以下略>
4行目でSMTP AUTHを利用するようにプロパティを設定します。また、24行目から26行目でSMTPサーバへログイン処理を行い、28行目、29行目で送信を行います。認証を利用する時の注意すべき点は、Transport#sendメソッドは利用できず、必ずTransportを取得し、メールを送信しなければならないことです。 JavaMailを使用したメール送信プログラムを作成する場合は、あらかじめTransport#sendMessageメソッドを利用することがプログラミング上の1つのテクニックと言えます。
このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー と 利用規約 が適用されます。
1文字以上入力してください
本文は少なくとも1文字以上必要です。
1文字以上入力してください。