【1】Java で、 Email を送る
* (色々あるらしいが)JavaMail を利用する
JavaMailの公式サイト
http://www.oracle.com/technetwork/java/javamail/index.html
https://javaee.github.io/javamail/
【2】準備
1)JavaMailの設定
* 色々、方法はあるが、ここでは、以下を紹介。 [1] JavaMailを直接ダウンロード [2] Gradle を使う << ★2018/03/20追記★
[1] JavaMailを直接ダウンロード
* 以下のサイトから「javax.mail.jar」(今回は「JavaMail v1.5.5」)を ダウンロードしインポートしておく
https://javaee.github.io/javamail/
[2] Gradle を使う
* 以下の関連記事の「準備 : Buildship: Eclipse Plug-ins for Gradle のインストール」を行い Gradle プロジェクトを作成し、Eclipseの対象プロジェクトを右クリックし、 [Gradle]-[Refresh Gradle Project]を選択しモジュールをダウンロード
build.gradle
dependencies { // ★JavaMail★ compile group: 'com.sun.mail', name: 'javax.mail', version: '1.6.1' }
【3】任意準備
1)開発用SMTPサーバーの設定
Windowsローカル上でテストする (これまた色々あるらしいが)smtp4dev を利用する * 以下のサイトから「smtp4dev-X.X.X-binaries.zip」(今回は「smtp4dev-2.0.9-binaries.zip」) をダウンロードし、解凍し、smtp4dev.exeを起動するだけ(簡単)
【4】サンプル
EmailHandler.java
import java.security.InvalidParameterException; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class EmailHandler { private final static String DEFAULT_TIMEOUT = "10000"; private final static String DEFAULT_HOST = "localhost"; private final static String DEFAULT_POST = "25"; private String fromAddress; private List<String> toAddresses; private String mailSubject; private String mailBody; private String host; private String port; private String timeout; private boolean isOnDebugMode; /** * Default Contractor. */ public EmailHandler() { this.fromAddress = null; this.toAddresses = new ArrayList<>(); this.mailSubject = null; this.mailBody = null; this.host = DEFAULT_HOST; this.port = DEFAULT_POST; this.timeout = DEFAULT_TIMEOUT; this.isOnDebugMode = false; } public void setFromAddress(String fromAddress) { this.fromAddress = fromAddress; } public void setToAddresses(List<String> toAddresses) { this.toAddresses = toAddresses; } public void addToAddress(String toAddress) { this.toAddresses.add(toAddress); } public void setMailSubject(String mailSubject) { this.mailSubject = mailSubject; } public void setMailBody(String mailBody) { this.mailBody = mailBody; } public void setHost(String host) { this.host = host; } public void setPort(String port) { this.port = port; } public void setOnDebugMode(boolean isOnDebugMode) { this.isOnDebugMode = isOnDebugMode; } public void send() throws MessagingException { if (this.toAddresses == null || this.host == null) { throw new InvalidParameterException(); } Properties props = new Properties(); props.put("mail.smtp.host", this.host); props.put("mail.smtp.port", this.port); props.put("mail.debug", this.isOnDebugMode); props.put("mail.smtp.connectiontimeout", this.timeout); props.put("mail.smtp.timeout", this.timeout); Session session = Session.getInstance(props, null); Message mimeMessage = new MimeMessage(session); mimeMessage.setFrom(this.toInternetAddress(this.fromAddress)); InternetAddress[] addresses = this.toInternetAddresses(this.toAddresses); mimeMessage.setRecipients(Message.RecipientType.TO, addresses); mimeMessage.setSubject(this.mailSubject); mimeMessage.setSentDate(new Date()); mimeMessage.setText(this.mailBody); Transport.send(mimeMessage); } private InternetAddress[] toInternetAddresses(List<String> addresses) throws AddressException { InternetAddress[] returnValues = new InternetAddress[addresses.size()]; int index = 0; for (String address : addresses) { returnValues[index] = this.toInternetAddress(address); index++; } return returnValues; } private InternetAddress toInternetAddress(String address) throws AddressException { return new InternetAddress(address); } /** * 【使用例】 * * @param args */ public static void main(String[] args) { try { EmailHandler email = new EmailHandler(); email.setFromAddress("sample@yahoo.com"); email.addToAddress("sample@gmail.com"); email.setMailSubject("タイトルです。"); email.setMailBody("メール本文です。\r\n以上です。"); email.setOnDebugMode(true); email.send(); } catch (Exception ex) { ex.printStackTrace(); } } }
1)補足
上記のサンプルは、Listを使っているが、以下のようにもできる。 InternetAddress[] myToList = InternetAddress.parse("abc.001@gmail.com,def.002@yahoo.com");
参考文献
* 以下のサイトは、非常に参考になった。
http://qiita.com/rubytomato@github/items/b106ff8011bcad60bce2
* smtp4dev に関する参考サイト
http://www.atmarkit.co.jp/ait/articles/1410/23/news017.html
* シンプルなサンプル
http://www.javadrive.jp/javamail/smtp/index1.html
その他のサイト
http://www.atmarkit.co.jp/ait/articles/0502/08/news103.html
http://masahnoheya.blog11.fc2.com/blog-entry-54.html
関連記事
JavaでEmail ~ JavaMail / 添付ファイル ~
https://dk521123.hatenablog.com/entry/2016/07/17/023459
JavaでEmail ~ SMTP認証 ~
https://dk521123.hatenablog.com/entry/2016/11/07/215251
JavaでEmail ~ SMTP認証 / DIGEST-MD5 ~
https://dk521123.hatenablog.com/entry/2016/12/07/222229
JavaでEmail ~ JavaMail / TLS ~
https://dk521123.hatenablog.com/entry/2017/05/03/163219
JavaでEmail ~ JavaMail / Return-Path・Errors-To ~
https://dk521123.hatenablog.com/entry/2017/05/07/000344
Amazon SES ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2017/04/28/234103
メモ
Velocityを利用してメールテンプレート機能の実装を考える [1] Windowsでの開発用SMTPサーバー ~ ダミーSMTPサーバ構築 ~ Linuxでの開発用SMTPサーバー [1] ~ FakeSMTP編 ~ Linuxでの開発用SMTPサーバー [2] ~ MailCatcher編 ~ Email送信に関する単体試験について ~ Dumbster編 ~ Email送信に関する単体試験について ~ SubEthaMail編 ~