サービスからメール送信 - javax.mail を使った日本語でのメールの送信(認証無し)
メールの送信
- ユーザ登録時に、入力されたメールアドレスが正しいかチェックする場合などにメールをサービスから送信します
- Javaからメール送信する際の一つの方法として、javax.mail を使ったメールの送信があります
- 毎回、どう書いたっけ?とググることになるので、サンプルコードを書いておきます
- 特に、送信者名を「日本語」にするのはどうやったっけ?になることが多いため、日本語を使う事前提のコードです
- まずは、認証無しでメール送信する場合のコードです
ライブラリの取得
- Javaのライブラリの管理は「Maven」を使っていることとして記載します
- 「Gradle」をお使いの方は読み替えてください
- ライブラリの指定は、dependencyに以下を追加
<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency>
メール送信
- 以下のコードでメールを送信できます
import java.io.UnsupportedEncodingException; import java.util.Date; 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 Mail { /** SMTPのホスト */ public static final String HOST = "yor.smtp.host.name"; /** SMTPのポート */ public static final int PORT = 587; /** メール送信元のアドレス(システムの送信アドレス) */ public static final String FROM_ADDRESS = "notify@your.system.address"; /** メール送信元の名前(下のエンコードが日本語なので、日本語OK) */ public static final String FROM_NAME = "XXXサービスからのご連絡(送信専用)"; /** メールのエンコード(日本語) */ public static final String ENCODE = "ISO-2022-JP"; public static void main(String[] args) throws Exception { Mail mail = new Mail(); mail.send(); } /** * メール送信 * @throws UnsupportedEncodingException * @throws MessagingException */ private void send() throws UnsupportedEncodingException, MessagingException { // 宛先のアドレス String to = "target@hogehoge.com"; // 宛先の名前 String toName = "宛先の名前"; // メールのタイトル String title = "XXXサービスからの○○○○のご連絡"; // メールの本文 String message = "xxx さん。平素XXXサービスをご利用いただきありがとうございます........"; // 認証無しでメールのセッション生成 Properties property = new Properties(); property.put("mail.smtp.host", HOST); property.put("mail.smtp.port", String.valueOf(PORT)); property.put("mail.smtp.socketFactory.port", String.valueOf(PORT)); property.put("mail.smtp.debug", "true"); Session session = Session.getDefaultInstance(property); MimeMessage mimeMessage = new MimeMessage(session); InternetAddress toAddress = new InternetAddress(to, toName, ENCODE); mimeMessage.setRecipient(Message.RecipientType.TO, toAddress); InternetAddress fromAddress = new InternetAddress(FROM_ADDRESS, FROM_NAME, ENCODE); mimeMessage.setFrom(fromAddress); mimeMessage.setSubject(title, ENCODE); mimeMessage.setText(message, ENCODE); // 送信日付を指定 mimeMessage.setSentDate( new Date() ); Transport.send(mimeMessage); System.out.println("送信しました"); } }
以上です。