Javaでメールを送信する方法:ステップバイステップガイド
Javaメール送信の準備
Javaアプリケーションでメールを送信するには、まずJavaMail APIとJava Activation Framework (JAF)をマシンにインストールする必要があります。
- JavaMailの最新版(バージョン1.2)はJavaの公式サイトからダウンロードできます。
- JAFの最新版(バージョン1.1.1)も同様にJavaの公式サイトから入手可能です。
ダウンロードして解凍すると、各ディレクトリに複数のJARファイルが作成されます。mail.jarとactivation.jarをクラスパスに追加してください。
シンプルなメールの送信
ローカルマシンからシンプルなメールを送信する例を示します。localhostがインターネットに接続されており、メール送信が可能であることを前提としています。
サンプルコード
// ファイル名: SendEmail.java
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail {
public static void main(String[] args) {
// 受信者のメールアドレス
String to = "abcd@gmail.com";
// 送信者のメールアドレス
String from = "web@gmail.com";
// ローカルホストから送信と仮定
String host = "localhost";
// システムプロパティを取得
Properties properties = System.getProperties();
// メールサーバーの設定
properties.setProperty("mail.smtp.host", host);
// デフォルトのSessionオブジェクトを取得
Session session = Session.getDefaultInstance(properties);
try {
// MimeMessageオブジェクトを作成
MimeMessage message = new MimeMessage(session);
// Fromヘッダーを設定
message.setFrom(new InternetAddress(from));
// Toヘッダーを設定
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// 件名を設定
message.setSubject("これは件名です!");
// 本文を設定
message.setText("これは実際のメッセージです");
// 送信
Transport.send(message);
System.out.println("メッセージを正常に送信しました....");
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
このプログラムをコンパイルして実行すると、シンプルなメールが送信されます。
実行結果
$ java SendEmail メッセージを正常に送信しました....
複数の宛先への送信
複数の受信者にメールを送信する場合は、以下のメソッドを使用します。
void addRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException
パラメータの説明:
- type - TO、CC、BCCのいずれかを指定。CCはカーボンコピー、BCCはブラインドカーボンコピーを表します。例: Message.RecipientType.TO
- addresses - メールアドレスの配列。アドレス指定にはInternetAddress()メソッドを使用します。
HTMLメールの送信
HTML形式のメールを送信する例です。基本的には前の例と同じですが、setContent()メソッドの第2引数に"text/html"を指定してHTMLコンテンツを含めます。これにより、任意のサイズのHTMLコンテンツを送信できます。
サンプルコード
// ファイル名: SendHTMLEmail.java
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendHTMLEmail {
public static void main(String[] args) {
String to = "abcd@gmail.com";
String from = "web@gmail.com";
String host = "localhost";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
try {
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("これは件名です!");
// HTMLメッセージを設定(第2引数でtext/htmlを指定)
message.setContent("これは実際のメッセージ
", "text/html");
Transport.send(message);
System.out.println("メッセージを正常に送信しました....");
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
実行結果
$ java SendHTMLEmail メッセージを正常に送信しました....
添付ファイル付きメールの送信
添付ファイルを含むメールを送信する例です。MimeMultipartを使用して、テキストパートと添付ファイルパートを組み合わせます。
サンプルコード
// ファイル名: SendFileEmail.java
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendFileEmail {
public static void main(String[] args) {
String to = "abcd@gmail.com";
String from = "web@gmail.com";
String host = "localhost";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
try {
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("これは件名です!");
// メッセージパートを作成
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("これはメッセージ本文です");
// マルチパートメッセージを作成
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
// 添付ファイルパート
messageBodyPart = new MimeBodyPart();
String filename = "file.txt";
DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);
// 完全なメッセージを設定
message.setContent(multipart);
Transport.send(message);
System.out.println("メッセージを正常に送信しました....");
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
実行結果
$ java SendFileEmail メッセージを正常に送信しました....
ユーザー認証
メールサーバーがユーザーIDとパスワードによる認証を要求する場合、以下のようにプロパティを設定します。
props.setProperty("mail.user", "myuser");
props.setProperty("mail.password", "mypwd");
それ以外のメール送信メカニズムは上記で説明した通りです。
Java
- Java演算子をマスター:種類、構文、実践例
- Javaコメント:種類、使い方、ベストプラクティス
- Java拡張forループをマスター:構文、例、ベストプラクティス
- Java文字列をマスター:生成、メソッド、ベストプラクティス
- Javaインターフェース完全ガイド:概念、実装、ベストプラクティス
- Java無名インナークラス完全ガイド:定義、構文、実践例
- Javaのtry-with-resourcesをマスターする:自動リソース管理の仕組みと活用法
- Javaアノテーション完全ガイド:種類、配置場所、実践例
- Javaアサーション完全ガイド:バグ早期発見とコード信頼性の向上
- Java Vectorの理解:使い方、特徴、ArrayListとの比較
- Javaでメールを送信する方法:ステップバイステップガイド