はじめに
SMTPSでメールアカウントを認証してから暗号化してメール送信します。
ついでに本文と添付ファイルの構成例とします。
事前に以下のライブラリを用意します。
- JavaMail API
- http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-eeplat-419426.html#javamail-1.4.7-oth-JPR
- ※”javamail1_4_7.zip”のリンクからダウンロード
実装例
サンプルでは、動作確認しやすいようにmainメソッドで実行できるようにしてあります。
SMTPSTest.java
import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.Date; import java.util.Properties; import javax.activation.DataHandler; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Store; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import javax.mail.internet.MimeUtility; import javax.mail.util.ByteArrayDataSource; /** * * @author tool-taro.com */ public class SMTPSTest { public static void main(String[] args) throws MessagingException, UnsupportedEncodingException, IOException { String from = "差出人メールアドレス"; String fromName = "差出人名を指定します"; String subject = "件名を指定します"; String to = "宛先メールアドレス"; String toName = "宛名を指定します"; String body = "これは本文です。\n\n\n\n\n\n\n\n\n\n以上。"; String attachmentFileName = "添付ファイル名.txt"; String attachmentFileType = "text/plain; charset=UTF-8"; byte[] attachmentFileBody = "これは添付ファイルです。\n\n\n\n\n\n\n\n\n\n以上。".getBytes("UTF-8"); String host = "メール送信サーバホスト"; String user = "メール送信アカウント"; String password = "メール送信アカウントパスワード"; Properties properties; Session session; Store store = null; Transport transport = null; MimeMessage mimeMessage; MimeBodyPart messageBody; MimeMultipart multipart; InternetAddress[] address; try { properties = System.getProperties(); properties.setProperty("mail.transport.protocol", "smtps"); properties.setProperty("mail.smtp.port", "465"); properties.setProperty("mail.smtp.auth", "true"); properties.setProperty("mail.smtp.starttls.enable", "true"); properties.setProperty("mail.smtp.starttls.required", "true"); properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); properties.setProperty("mail.smtp.socketFactory.fallback", "true"); session = Session.getInstance(properties); mimeMessage = new MimeMessage(session); //件名は(一応)JISで mimeMessage.setSubject(MimeUtility.encodeText(subject, "iso-2022-jp", "B"), "iso-2022-jp"); mimeMessage.setSentDate(new Date()); address = new InternetAddress[1]; address[0] = new InternetAddress(from); //差出人名は設定しなくても問題ない if (fromName != null) { //差出人名は(一応)JISで address[0].setPersonal(MimeUtility.encodeText(fromName, "iso-2022-jp", "B")); } mimeMessage.setFrom(address[0]); address[0] = new InternetAddress(to); //宛名は設定しなくても問題ない if (toName != null) { //宛名は(一応)JISで address[0].setPersonal(MimeUtility.encodeText(toName, "iso-2022-jp", "B")); } mimeMessage.setRecipients(Message.RecipientType.TO, address); /* マルチパートのメッセージを作成する 構造 パート1: 本文 パート2: 添付ファイル */ multipart = new MimeMultipart(); mimeMessage.setContent(multipart); //パート1: 本文 messageBody = new MimeBodyPart(); //本文のテキストは(一応)JISで messageBody.setText(body, "iso-2022-jp"); messageBody.setHeader("Content-Transfer-Encoding", "7bit"); multipart.addBodyPart(messageBody); //パート2: 添付ファイル messageBody = new MimeBodyPart(); //添付ファイル名は(一応)JISで messageBody.setFileName(MimeUtility.encodeText(attachmentFileName, "iso-2022-jp", "B")); messageBody.setDataHandler(new DataHandler(new ByteArrayDataSource(new ByteArrayInputStream(attachmentFileBody), attachmentFileType))); multipart.addBodyPart(messageBody); transport = session.getTransport(); transport.connect(host, user, password); transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients()); } finally { if (store != null) { try { store.close(); } catch (Exception e) { } } if (transport != null) { try { transport.close(); } catch (Exception e) { } } } } }
動作確認
$ javac SMTPSTest.java $ java SMTPSTest
送られてきたメールを見てみます。
指定した通りの
- 差出人名
- 宛名
- 件名
- 本文
- 添付ファイル名
が表示されています。
添付ファイルを開いてみます。
環境
- 開発
- Windows 10 Pro
- JDK 1.8.0_74
- NetBeans IDE 8.1
- 動作検証
- CentOS Linux release 7.2
- JDK 1.8.0_74
Webツールも公開しています。
Web便利ツール@ツールタロウ