|
|
| |
2002/02/03 田中宏和 |
| Last
Update 2002/12/07 |
|
 |
JavaMail
(POP)編 |
 |
◆POPとは? |
| POPはPost Office Protocolの略です。メールを受信するときに使われるプロトコルです。JavaMailのAPIを使用するとこのプロトコルを詳しく知らなくても簡単にメールを受信するプログラムを作ることができます。 |
| ◆JavaMailとは? |
| JavaMailとはJavaのプログラムから、メールの送受信を行うためのAPIです。JavaMailのAPIを使用してJavaでメールを送受信するプログラムを作成することができます。 |
| ◆ここでの環境 |
| OS |
Windows XP |
| J2SE SDK |
1.4.1_01 |
|
|
|
|
| ◆メール受信に使用するライブラリ |
| JavaMail |
バージョン1.3 |
| JAF(JavaBeans
Activation Framework) |
バージョン1.0.2 |
|
| ◆JavaMailのライブラリをCLASSPATHに設定 |
| ■mail.jarをCLASSPATHに設定 |
| まずJavaMailをダウンロードします。 |
| ダウンロード → JavaMail |
| ダウンロードしたファイルを解凍してください。解凍したフォルダに入っているmail.jarをCLASSPATHに設定します。 |
| ■activation.jarをCLASSPATHに設定 |
| JavaMailのライブラリで使用するJAF(JavaBeans Activation Framework)もダウンロードしてCLASSPATHに設定します。 |
| ダウンロード → JAF |
| ダウンロードしたファイルを解凍したフォルダに入っているactivation.jarをCLASSPATHに設定してください。 |
|
|
| ◆プログラムの作成 |
| 以下がメールを受信して表示するプログラムです。ホストアドレス、アカウント、パスワードは環境に合わせて設定してください。 |
| HelloWorldPOP.java(ここからダウンロード) |
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
public class HelloWorldPOP {
public static void main(String args[]) {
try {
String host="xxx.xxx.xxx.xxx"; // ホストアドレス
String user="xxxxxx"; // アカウント
String password="xxxxxx"; // パスワード
// 接続します
Session session = Session.getDefaultInstance(System.getProperties(), null);
Store store = session.getStore("pop3");
store.connect(host, -1, user, password);
// フォルダーを開きます
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
// フォルダーにあるメッセージの数を取得します
int totalMessages = folder.getMessageCount();
if (totalMessages == 0) {
System.out.println("メールは0件です");
folder.close(false);
store.close();
return;
}
// メッセージを取得します
Message[] messages = folder.getMessages();
for (int i = 0; i < messages.length; i++) {
// メッセージを表示します
showMessage(messages[i]);
}
// フォルダーを閉じます
folder.close(false);
store.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* メールの内容を表示します
*/
public static void showMessage(Message m) throws Exception {
Address[] a;
// 差出人
if ((a = m.getFrom())!=null) {
for (int j = 0; j < a.length; j++) {
System.out.println("差出人: " + MimeUtility.decodeText(a[j].toString()));
}
}
// 宛先
if ((a = m.getRecipients(Message.RecipientType.TO))!=null) {
for (int j = 0; j < a.length; j++) {
System.out.println("宛先: " + MimeUtility.decodeText(a[j].toString()));
}
}
// 題名
System.out.println("題名: " + m.getSubject());
// 日付
Date d = m.getSentDate();
System.out.println("日付: " + (d!= null ? d.toString() : "不明"));
// サイズ
System.out.println("サイズ: " + m.getSize());
// 内容
System.out.println("内容:\n" + m.getContent());
}
} |
|
|
|
|
| ◆コンパイル |
| コマンドプロンプト |
| C:\JavaHello\POP>javac HelloWorldPOP.java
C:\JavaHello\POP>
|
|
| ◆実行 |
| 実行するわけですが、接続するサーバーのメールボックスにメールを送信しておかないと受信できません。ここでは、「JavaMailでHello
World」という題名で内容が「Hello World」のメールを送信してあります。実行してみましょう! |
| コマンドプロンプト |
|
C:\JavaHello\POP>java HelloWorldPOP
差出人: Hirokazu Tanaka <java@hellohiro.com>
宛先: java@hellohiro.com
題名: JavaMailでHello World
日付: Sat Dec 07 01:45:58 JST 2002
サイズ: 15
内容:
Hello World
C:\JavaHello\POP> |
|
| おおおおお!受信して表示できましたね!! |
|
|
| ◆添付ファイルの受信 |
| 上のソースだと添付ファイルを受信できません。添付ファイルが受信できるように改造してみましょう。 |
| HelloWorldPOPA.java(ここからダウンロード) |
import javax.mail.*;
import javax.mail.internet.*;
import java.io.*;
import java.util.*;
public class HelloWorldPOPA {
static int attachnum = 1;
public static void main(String args[]) {
try {
String host="xxx.xxx.xxx.xxx"; // ホストアドレス
String user="xxxxxx"; // アカウント
String password="xxxxxx"; // パスワード
// 接続します
Session session = Session.getDefaultInstance(System.getProperties(), null);
Store store = session.getStore("pop3");
store.connect(host, -1, user, password);
// フォルダーを開きます
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
// フォルダーにあるメッセージの数を取得します
int totalMessages = folder.getMessageCount();
if (totalMessages == 0) {
System.out.println("メールは0件です");
folder.close(false);
store.close();
return;
}
// メッセージを取得します
Message[] messages = folder.getMessages();
for (int i = 0; i < messages.length; i++) {
// メッセージを表示します
dumpPart(messages[i]);
}
// フォルダーを閉じます
folder.close(false);
store.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void dumpPart(Part p) throws Exception {
String html = "";
boolean attachment = false;
if (p instanceof Message) {
showMessage((Message)p);
}
if (p.isMimeType("text/plain")) { // テキストの場合
System.out.println("内容:\n" + p.getContent());
} else if (p.isMimeType("multipart/*")) { // マルチパートの場合
Multipart mp = (Multipart)p.getContent();
int count = mp.getCount();
for (int i = 0; i < count; i++) {
dumpPart(mp.getBodyPart(i));
}
} else if (p.isMimeType("message/rfc822")) { // メッセージの場合
dumpPart((Part)p.getContent());
} else if (p.isMimeType("text/html")) { // HTMLの場合
html = ".html";
attachment = true;
} else { // その他の場合
attachment = true;
}
/**
* 添付ファイルを保存します
*/
if (attachment) {
String disp = p.getDisposition();
// 添付ファイルの場合
if (disp == null || disp.equalsIgnoreCase(Part.ATTACHMENT)) {
String filename = p.getFileName();
if (filename!=null) {
filename = MimeUtility.decodeText(filename);
} else {
filename = "添付ファイル" + attachnum++ + html;
}
try {
File f = new File(filename);
if (f.exists()) {
throw new IOException("同名のファイルが存在します");
}
OutputStream os = new BufferedOutputStream(new FileOutputStream(f));
InputStream is = p.getInputStream();
int c;
while ((c = is.read()) != -1) {
os.write(c);
}
os.close();
System.out.println(filename + "を保存しました。");
} catch (IOException e) {
System.out.println("添付ファイルの保存に失敗しました。" + e);
}
}
}
}
/**
* メールの内容を表示します
*/
public static void showMessage(Message m) throws Exception {
Address[] a;
// 差出人
if ((a = m.getFrom())!=null) {
for (int j = 0; j < a.length; j++) {
System.out.println("差出人: " + MimeUtility.decodeText(a[j].toString()));
}
}
// 宛先
if ((a = m.getRecipients(Message.RecipientType.TO))!=null) {
for (int j = 0; j < a.length; j++) {
System.out.println("宛先: " + MimeUtility.decodeText(a[j].toString()));
}
}
// 題名
System.out.println("題名: " + m.getSubject());
// 日付
Date d = m.getSentDate();
System.out.println("日付: " + (d!= null ? d.toString() : "不明"));
// サイズ
System.out.println("サイズ: " + m.getSize());
}
} |
|
|
|
|
| ◆コンパイルと実行 |
| ここでは、あらかじめ「こんにちわ.txt」と「Hello.txt」という2つのファイルを添付したメールを送ってあります。コンパイルして実行してみましょう。 |
| コマンドプロンプト |
| C:\JavaHello\POP>javac
HelloWorldPOPA.java
C:\JavaHello\POP>java HelloWorldPOPA
差出人: Hirokazu Tanaka <java@hellohiro.com>
宛先: java@hellohiro.com
題名: JavaMailでHello World
日付: Sat Dec 07 01:58:45 JST 2002
サイズ: 700
内容:
添付ファイルを添付します。
こんにちわ.txtを保存しました。
Hello.txtを保存しました。
C:\JavaHello\POP>
|
|
| おおお!表示されましたね! |
| 添付ファイルが生成されているか見てみましょう。 |
 |
| おおお!生成されていますね! |
|
|
■関連 JavaMail(SMTP)編 |
■書籍 Java関連の書籍 |
|
| |
|
|
| ツールの部屋
- Java関連の書籍
- デザインパターン - 情報交換掲示板
- HOME |