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.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 にはかないません。
もっと競合して選択肢が増えることを願うばかりです。
陳旧性陰影?
今日は健康診断に行ってきました。
去年は年度末がサンフランシスコ出張で行きそびれてしまい、健康診断は実に2年ぶりです!
しっかり診て貰おうとバリウムに加えいくつかオプションの血液検査も頼んでしまいました。
4年ぶりのバリウムは食事抜きの胃に染みて実に美味。おかわりをしようと思ったくらい!ということは全くなくあまりのエグさに終始ブルー。
ちょっと待たされましたが、一部の検査項目をのぞいて当日中に結果をだしてくれました。
新宿健診センター恐るべし。
体はまったくもって健康とのことですが、胸部X線の診断に「左 肺野上 小 陳旧性陰影」という審査結果が。
「これは問題ないです」とサラっと流されてしまったのですがなんだか嫌な感じのする漢字の羅列なので調べてみました。
・久野マインズタワークリニック > Q&A よくあるご質問
当日の結果説明では、X線はきれいと言われましたが・・
A. 陳旧性陰影とは、以前肺に炎症があったもののことを意味します。肺炎や結核など炎症の原因はいろいろありますが、知らないうちにかかって、知らないうちに治っているケースがほとんどです。現時点で炎症を認めないという意味で「X線はきれい」と説明しましたので、ご心配にはおよびません。
ふーむ、以前肺に炎症があったそうで。肺炎も結核もやったことなく心当たりないんですが。
まぁ問題ないということなので気にしない気にしない!