JavaMailとりあえず送るだけ
やるたびに忘れるのでメモ。
送信部
public void mailSend(String subjectText, String bodyText) {
log.info("メールを送信します。");
Session session = Session.getInstance(Common.props);
MimeMessage mimeMessage = new MimeMessage(session);
try {
// 宛先の設定
for (String mailto : Common.mailTo) {
try {
mimeMessage.setRecipients(MimeMessage.RecipientType.TO, mailto);
} catch (AddressException ae) {
log.warn("メール宛先設定に失敗しました。[{}]{}", mailto, ae.getMessage());
}
}
// 送信元の設定
//mimeMessage.setFrom(new InternetAddress("hogehoge@hoge.com"));
// サブジェクトの設定 Base64「B」Quoted-Printable:「Q」
//subjectText = MimeUtility.encodeText(subjectText, "iso-2022-jp", "B");
mimeMessage.setSubject(subjectText);
// 本文の設定
mimeMessage.setText(bodyText);
// 設定の保存
mimeMessage.saveChanges();
// メールの送信
Transport.send(mimeMessage, Common.smtpUser, Common.smtpPass);
} catch (MessagingException e) {
log.error("メール送信に失敗しました。", e);
}
}
設定読み込み
import java.io.FileInputStream;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Properties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Common {
/**
* メール宛先配列
*/
public static String[] mailTo;
/**
* SMTP認証ユーザー
*/
public static String smtpUser;
/**
* SMTP認証パスワード
*/
public static String smtpPass;
/***
* 設定ファイルプロパティ
*/
public static Properties props = null;
/***
* 設定ファイル名
*/
public static String propFileName = "hoge.xml";
/**
* ロガー
*/
static Logger log = LoggerFactory.getLogger(Common.class);
/**
* 設定ファイル読み込み
* @param propFileName
*/
public static void getProp() {
try {
if (!Files.exists(Paths.get(propFileName))) {
log.warn("{}が存在しません。", propFileName);
return;
}
InputStream is = new FileInputStream(propFileName);
props = new Properties();
props.loadFromXML(is);
mailTo = props.get("mailTo").toString().split(",");
smtpUser = props.get("mail.smtp.user").toString();
smtpPass = props.get("mail.smtp.password").toString();
} catch (Exception e) {
log.error(String.format("{}の取得に失敗しました。", propFileName), e);
}
}
}
設定ファイル(hoge.xml) https://javaee.github.io/javamail/docs/api/com/sun/mail/smtp/package-summary.html
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment></comment>
<entry key="mail.debug">false</entry>
<entry key="mail.smtp.host">hoge.host.com</entry>
<entry key="mail.smtp.port">587</entry>
<entry key="mail.smtp.auth">true</entry>
<entry key="mail.smtp.user">hoge.user</entry>
<entry key="mail.smtp.password">hoge.password</entry>
<entry key="mail.smtp.from">from.hogehost.com</entry>
<entry key="mailTo">to.hogehost.com</entry>
<!-- コネクション確立までのタイムアウト時間(ミリ秒) -->
<entry key="mail.smtp.connectiontimeout">10000</entry>
<!-- SMTPサーバとの通信(read)のタイムアウト時間(ミリ秒) -->
<entry key="mail.smtp.timeout">10000</entry>
<!-- ソケットの書き込みのタイムアウト時間(ミリ秒)-->
<entry key="mail.smtp.writetimeout">10000</entry>
<!-- authコマンドでのユーザー認証を行うか -->
<entry key="mail.smtp.auth">false</entry>
<entry key="mail.smtp.ssl.enable">false</entry>
<entry key="mail.smtp.starttls.enable">true</entry>
<entry key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</entry>
<entry key="mail.smtp.socketFactory.fallback">true</entry>
<entry key="mail.smtp.socketFactory.port">587</entry>
</properties>