JavaからHTMLメールを送信するサンプルコード


Posted on 2021/12/14 at 5:20


サーバー機にて常駐させている自前のJavaアプリケーションがあるのですが、お知らせやエラー等の情報を携帯のメールに送信したいという事がありました。

今回はそのサンプルコードです。

ただし、契約しているプロバイダなどのSMTPサーバーがすでにあることを前提としております。

JavaMailライブラリをダウンロードする

こちらのページ から最新バージョン(2021年12月14日時点での最新バージョンは1.6.2)のjavax.mail.jarをダウンロードし、 使用しているIDEのプロジェクトの「ビルド・パス」にjavax.mail.jarを追加します。

サンプルコード

  
import java.io.UnsupportedEncodingException;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class MailTest {

	private String to = "送信先アドレス";

	public static void main(String[] args) {
		MailTest mailTest = new MailTest();
		StringBuilder b = new StringBuilder();
		b.append("<div class=\"content\">");
		b.append("<p class=\"title\">◇ お知らせメール</p>");
		b.append("<ul>");
		b.append("<li>お知らせ1</li>");
		b.append("<li>お知らせ2</li>");
		b.append("</ul>");
		b.append("</div>");
		mailTest.sendHTMLMail("Java Mail Api", "お知らせです", b.toString());
	}

	public void sendTextMail(String from, String title, String message) {
		Properties objPrp=new Properties();
			objPrp.put("mail.smtp.host","SMTPアドレス");
			objPrp.put("mail.smtp.port", "SMTPポート");
			// メールセッションを確立
			Session session = Session.getDefaultInstance(objPrp, null);
			// 送信メッセージを生成
			MimeMessage objMsg = new MimeMessage(session);
			Transport transport = null;
			try {
				// 送信先(TOのほか、CCやBCCも設定可能)
				objMsg.setRecipients(Message.RecipientType.TO, to);
				// Fromヘッダ
				InternetAddress objFrm = new InternetAddress("Fromアドレス", from);
				objMsg.setFrom(objFrm);
				// 件名
				objMsg.setSubject(title, "ISO-2022-JP");
				// 本文
				objMsg.setText(message+"\n", "ISO-2022-JP");
				transport = session.getTransport("smtp");
				transport.connect();
				transport.sendMessage( objMsg,objMsg.getAllRecipients());
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (MessagingException e) {
			e.printStackTrace();
		} finally{
			if (transport != null) {
				try {
					transport.close();
				} catch(MessagingException e){
					e.printStackTrace();
				}
			}
		}
	}

	public void sendHTMLMail(String from, String title, String content) {
		Properties objPrp=new Properties();
			objPrp.put("mail.smtp.host","SMTPアドレス");
			objPrp.put("mail.smtp.port", "SMTPポート");
			// メールセッションを確立
			Session session = Session.getDefaultInstance(objPrp, null);
			// 送信メッセージを生成
			MimeMessage objMsg = new MimeMessage(session);
			Transport transport = null;
			try {
				// 送信先(TOのほか、CCやBCCも設定可能)
				objMsg.setRecipients(Message.RecipientType.TO, to);
				// Fromヘッダ
				InternetAddress objFrm = new InternetAddress("Fromアドレス", from);
				objMsg.setFrom(objFrm);
				// 件名
				objMsg.setSubject(title, "ISO-2022-JP");
				// 本文
				objMsg.setContent(createHTML(content), "text/html; charset=ISO-2022-JP");
				transport = session.getTransport("smtp");
				transport.connect();
				transport.sendMessage( objMsg,objMsg.getAllRecipients());
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (MessagingException e) {
			e.printStackTrace();
		} finally{
			if (transport != null) {
				try {
					transport.close();
				} catch(MessagingException e){
					e.printStackTrace();
				}
			}
		}
	}

	private String createHTML(String content) {
		StringBuilder b = new StringBuilder();
		b.append("<html><head>");
		b.append("<style type=\"text/css\">");
		b.append("div.content div { padding: 0 5px;}");
		b.append("div.content p.title { width: 100%; background-color: #83c51a; font-color: #fff; font-size: 1.2em; padding: 5px 0 5px 5px; margin: 5px 0;}");
		b.append("ul {background-color: #fff; width:100%;}");
		b.append("li {font-size: 1em; padding: 0; margin: 0; background-color: #fff;}");
		b.append("</style>");
		b.append("</head>");
		b.append("<body>");
		b.append(content);
		b.append("</body></html>");
		return b.toString();
	}

}
  

プログラムの実行結果

sendTextMailメソッドでテキスト形式、sendHTMLMailメソッドでHTML形式のメールを送信することができます。

今回はGmailにをHTML形式でメール送信しました。HTML形式だとリスト表示なども簡単でレイアウトの幅が広がります。 しかし、プログラム上で本文を書くにはタグやスタイルを書いてやる必要があるため、内容がわかればいいということであればテキスト形式 でメールを作成することをおすすめいたします。