「JavaMailのセキュリティ認証方式について」の編集履歴(バックアップ)一覧はこちら
「JavaMailのセキュリティ認証方式について」(2005/07/30 (土) 02:29:33) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
<h3>JavaMailのセキュリティ</h3>
<p>
それでは、JavaMailのセキュリティがどうなっているのかを確認していきたいと思います。"JavaMailはセキュリティ部分を実装していません"とJavaMailの付属のドキュメントやSUNのJavaMailのサイトに記述してあります。<br>
ここで、JavaMailの構成を図-1に示します。</p>
<p align="center"><img height="343" alt=
"JavaMailフレームワークとプロバイダ" src=
"http://interstage.fujitsu.com/jp/technical/tips/img/tip000004_01.gif" width=
"426"><br>
図-1 JavaMailフレームワークとプロバイダ</p>
<p>
実は、"JavaMailはセキュリティに対応していません"と言う説明はJavaMailフレームワークの部分のことを示しています。従って、以下のことが言えます。</p>
<p>・ セキュリティの実装はプロバイダが行います<br>
・
JavaMailに標準でついてくるSUNのプロバイダが実装していない認証方法でも、新たなプロバイダを作成することによって対応させることが可能です</p>
<p>
では、JavaMail標準のSMTP,POP3,IMAPプロバイダはどのような認証方法に対応しているか説明します。各プロトコルの認証方法とJavaMail付属のプロバイダとの関係を表-1に示します。</p>
表-1
各プロトコルの認証方法とJavaMail付属のプロバイダでの対応
<table bordercolor="#FFFFFF" cellspacing="0" cellpadding="4" width="75%"
border="1">
<tbody>
<tr bgcolor="#666699">
<th align="center"><span class="textWhite">プロトコル</span></th>
<th align="center"><span class=
"textWhite">対応している認証方法</span></th>
</tr>
<tr>
<td bgcolor="#DDDDFF">SMTP</td>
<td bgcolor="#EEEEFF">AUTH LOGINに対応<br>
SMTP before POP3は対応可能</td>
</tr>
<tr>
<td nowrap="nowrap" bgcolor="#DDDDFF">POP3</td>
<td bgcolor="#EEEEFF">通常のPOP3の認証方式のみ対応</td>
</tr>
<tr>
<td nowrap="nowrap" bgcolor="#DDDDFF">IMAP</td>
<td bgcolor="#EEEEFF">LOGINコマンドのみ対応</td>
</tr>
</tbody>
</table>
<p>
表-1より、JavaMail付属のプロバイダは、パスワードが平文のものしかサポートされていないことがわかります。ただし、サードパーティー製のプロバイダでは、APOPなどをサポートしているものもあります。SUNのJavaMailのサイトにプロバイダを作成している企業、個人のページへのリンクがあります。その中にはAPOPのプロバイダはフリー(GPL)で配布されているものもあります。必要に応じて調べて下さい。</p>
<h4>プログラミング</h4>
<p>
JavaMail付属のプロバイダは、セキュリティ保護された認証方式を確かにサポートしていませんが、SMTP
AUTHはサポートしています。それではJavaMail付属のプロバイダを利用して、AUTH
LOGINで認証を行うプログラムを書いてみましょう。</p>
<p>(注) 実際に認証を行うためにはメールサーバ側がAUTH
LOGINに対応している必要があるので注意して下さい
リスト-1は、SMTP AUTHを利用しない場合の例です。 リスト-1
認証なしのSMTPでの送信部分</p>
<table width="93%" border="1">
<tbody>
<tr>
<td>
<pre>
<省略>
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);<br>
<br>
<省略>
<br>
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);
<以下略>
</pre></td>
</tr>
</tbody>
</table>
<p>リスト-2は、SMTP AUTHを利用した場合の例です。</p>
リスト-2 AUTH LOGINを利用したSMTPでの送信部分
<table width="75%" border="1">
<tbody>
<tr>
<td>
<pre>
<省略>
1 Properties props = new Properties();
2 props.put("mail.smtp.host","127.0.0.1"); //SMTPサーバのアドレス
3 props.put("mail.debug", "true"); //JavaMailのデバッグモード
<strong> 4 props.put( "mail.smtp.auth", "true" ); //SMTP authを利用する</strong>
5 Session session = Session.getDefaultInstance(props,null);<br>
<br>
<省略>
<br>
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 //送信
<strong>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 ); //送信先リスト</strong>
30
<以下略>
</pre></td>
</tr>
</tbody>
</table>
<p>4行目でSMTP
AUTHを利用するようにプロパティを設定します。また、24行目から26行目でSMTPサーバへログイン処理を行い、28行目、29行目で送信を行います。<br>
認証を利用する時の注意すべき点は、Transport#sendメソッドは利用できず、必ずTransportを取得し、メールを送信しなければならないことです。<br>
JavaMailを使用したメール送信プログラムを作成する場合は、あらかじめTransport#sendMessageメソッドを利用することがプログラミング上の1つのテクニックと言えます。</p>
表示オプション
横に並べて表示:
変化行の前後のみ表示: