最近、ちょっとJavaMailを使ってメール送信するプログラムを書いたのですが、JavaMail 1.5から?ライブラリの構成が変わっていたので、ちょっとご紹介。
JavaMail
http://www.oracle.com/technetwork/java/javamail/index.html
Javadoc
https://javamail.java.net/nonav/docs/api/
変わった言いましても、アーティファクトが変わったってところですね。
Download JavaMail 1.5.1 Release
https://java.net/projects/javamail/pages/Home#Download_JavaMail_1.5.1_Release
以前は
<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency>
みたいに書いていましたが、今は同じようなことを書こうと思うと
<dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.5.1</version> </dependency>
となるようです。com.sum.mailになってますね。
このアーティファクトは、SMTP、POP3、IMAPを含んだリファレンス実装らしいですが、各プロトコルのプロバイダや、APIのみのアーティファクトもあります。
使い方は、変わらないので簡単に。
src/main/java/org/littlewings/javamail/JavaMailExample.java
package org.littlewings.javamail; import java.util.Properties; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class JavaMailExample { public static void main(String... args) { // x-windows-iso2022jpをISO-2022-JPのエイリアスに System.setProperty("sun.nio.cs.map", "x-windows-iso2022jp/ISO-2022-JP"); Properties properties = new Properties(); // SMTPサーバのホスト名 or IPアドレス properties.put("mail.smtp.host", "smtp.example.com"); // SMTPサーバのポート properties.put("mail.smtp.port", "25"); // デバッグ情報を出力する場合 properties.put("mail.debug", "true"); try { Session session = Session.getDefaultInstance(properties); // 送信メッセージ MimeMessage message = new MimeMessage(session); // From message.setFrom(new InternetAddress("from-address@example.com")); // 宛先(TO) message.setRecipients(MimeMessage.RecipientType.TO, new InternetAddress[] { new InternetAddress("to-address@example.com") }); // 件名および本文 message.setSubject("件名です", "ISO-2022-JP"); message.setText("こんにちは、JavaMail\r\n①②③", "ISO-2022-JP"); Transport.send(message); } catch (MessagingException e) { e.printStackTrace(); } } }
ムダに、x-windows-iso2022jpを使っています。
// x-windows-iso2022jpをISO-2022-JPのエイリアスに System.setProperty("sun.nio.cs.map", "x-windows-iso2022jp/ISO-2022-JP");
今回は、全機能を持ったJARを依存関係に追加しましたが、個々に追加しようとするとこのようになります。
<dependency> <groupId>javax.mail</groupId> <artifactId>javax.mail-api</artifactId> <version>1.5.1</version> </dependency> <dependency> <groupId>com.sun.mail</groupId> <artifactId>mailapi</artifactId> <version>1.5.1</version> </dependency> <dependency> <groupId>com.sun.mail</groupId> <artifactId>smtp</artifactId> <version>1.5.1</version> </dependency>