Java

JavaMail / Google Apps for Domain を使って GMail からメール送信

部活とか研究室同期とかの連絡に使っている自前掲示板があります。
書き込みをすると購読者にメールで通知をしてくれるお利口さんなのですが、去年の7月からどうも DoCoMo の携帯電話にメールが届いたり届かなかったりとどうも不安定です。

localhost に置いてある James から送信しているメールが送信者名を偽装したスパムと思われているようです。
スパムを受信するのが嫌で 25 番を塞いでいる(サーバ管理者としてあまりに安直です。はい、ごめんなさい)のも心証が悪いのかもしれません。

というわけで以前申請してあったGoogle Apps for Domainの GMail を使うことにしました。

Google Apps for Domain自分のドメインで GMail などのツールを利用できるサービスです。

GMail は Web インターフェースだけでなく普通に smtp サーバからも送信できます。
ただ、SSL ポートしか空いていないのと、SMTP 認証 が必要なので今までのザルな James 向けのコードでは動きません。

ごちょごちょとやって、なんとか送信できるようになりました。
スパム扱いされていないようで無事 DoCoMo の携帯電話でも受信できています。

参考のため可能な限りシンプルなコードを載せておきます。

import java.security.Security;
import java.util.Date;
import java.util.Properties;

import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class GMail {
public static void main(String[] args) throws Exception {
 final String user = “myname@mydomain”;
 final String password = “mypassword”;
 String encoding = “ISO-2022-JP”;
 String to = “foo@bar.com”;
 Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
 Properties props = new Properties();
 props.setProperty(“mail.smtp.host”, “smtp.gmail.com”);
 props.setProperty(“mail.smtp.socketFactory.class”,
      “javax.net.ssl.SSLSocketFactory”);
 props.setProperty(“mail.smtp.socketFactory.fallback”, “false”);
 props.setProperty(“mail.smtp.port”, “465”);
 props.setProperty(“mail.smtp.socketFactory.port”, “465”);
 props.setProperty(“mail.smtp.auth”, “true”);
//  props.setProperty(“mail.debug”, “true”);
 Session session = Session.getInstance(props, new Authenticator() {
  protected PasswordAuthentication getPasswordAuthentication() {
   return new PasswordAuthentication(user, password);
  }
 });
 MimeMessage mimeMessage = new MimeMessage(session);
 mimeMessage.setHeader(“Content-Type”, “text/plain; charset=” + encoding);
 mimeMessage.setFrom(new InternetAddress(user, user, encoding));
 mimeMessage.setRecipients(Message.RecipientType.TO
   ,new Address[]{new InternetAddress(to)});
 mimeMessage.setSubject(“subject”, encoding);
 mimeMessage.setText(“テストです”, encoding);
 mimeMessage.setSentDate(new Date());
 Transport.send(mimeMessage);
}
}

MXレコードを Google のモノに変更した瞬間から今までは業者に跳ね返っていたであろうスパムがザクザク届き始めました。

でも Gmail なら勝手にスパムを振り分けてくれるのが楽ですね。
メールの中身を握られてしまうのは心得ませんが、0 に近い TCO にはかないません。
もっと競合して選択肢が増えることを願うばかりです。