2008/5/30 金曜日 by kouichi
ソースはこちらです。
自分は独立後MSOfficeを買おうと思っていたのですが、自分で使う機能とのコストパフォーマンスを考えると、3、4万は高いなぁと思い、OpenOffice使っています。
UIの違いや過去のドキュメントが少々ずれて表示されたりとかありますが、自分としては許容範囲で使えています。
#お客様とのやり取りで、pptxやdocxで送られてきたときに、「すいません;;docで再送してください。。。」とお願いするのは少々心苦しいですが。
で記事の件ですが、役所が導入を決めたということで、ちょっとびっくりした反面、うれしくなりました。
きっと根回しだの大変だったでしょうから、担当の方が導入にかこつけるまで帆走して、いろいろご苦労されているのだろうなぁと、勝手な想像をするとアツイですね。
是非成功させてもらいたいです。
5年間で1500万経費削減だそうですが、1年で300万、1000台PCがあるらしいので、1台あたり3000円??
計算まちがってないかなぁ。
大規模導入する場合って、これくらいの費用なんでしょうか?
ちなみに、YouTubeで記者会見をUPしているのも素敵です。
Posted in その他 | No Comments
2008/5/29 木曜日 by kouichi
昨日のサンプルコードだと、送信先に
undisclosed-recipients:
と表示されてしまうので、修正しました。
Properties properties = new Properties();
// SMTPサーバーのアドレスを指定
properties.put("mail.smtp.auth","true");
// session作成
Session session = Session.getDefaultInstance(properties,null);
MimeMessage message = new MimeMessage(session);
// 送信先アドレス
InternetAddress[] to = { new InternetAddress("yyy@yyy.jp") }; // ←したから移動
message.setRecipients(Message.RecipientType.TO, to); // ←ここ追加
// 送信元アドレス
message.setFrom(new InternetAddress("xxx@xxx.jp"));
// サブジェクト
message.setSubject("subject","iso-2022-jp");
// メール本文
message.setText("text","iso-2022-jp");
// 送信日付
message.setSentDate(new Date());
// サービス接続
Transport tp = session.getTransport("smtp");
tp.connect( "SMTPホスト", SMTPポート, ユーザーID, パスワード );
// 送信先アドレス
tp.sendMessage( message, to );
ちなみに
message.setHeader("To", "yyy@yyy.jp");でも良かったですが、行儀的には↑でしょうか。
MimeMessage#setRecipientsで設定した値は単純にメールヘッダのToに指定されるだけ、Transport#sendMessageに指定したほうが実際に送られる送信先アドレスになります。
例えば、MimeMessage#setRecipientsに「x@xxx.jp」を指定、Transport#sendMessageに「y@yyy.jp」を指定してみると、「y@yyy.jp」にメールが届いて、受信したメールの宛先欄には「x@xxx.jp」が表示されました。
#でも、別にしとくとスパム扱いされそうなので、通常は同じアドレスですね。
勉強になりました。
後、HTMLメールを送信する場合ですが、
message.setText("text","iso-2022-jp");を
message.setContent("<html><b>html</b></html>","text/html; charset=iso-2022-jp");にすればOK
なお、エンコードもJavaMail内で行ってくれるようなので、アプリ側で送信するHTMLをiso-2022-jpエンコードする必要はないようです。
Posted in Java | 1 Comment
2008/5/28 水曜日 by kouichi
SMTPの25番ポートを使えないプロバイダが最近増えていると思います。
この場合ポートを指定したり、認証後にメールを送信しなければならないわけですが、JavaMailで実装してみました。
以下のような感じです。
Properties properties = new Properties();
// SMTPサーバーのアドレスを指定
properties.put("mail.smtp.auth","true");
// session作成
Session session = Session.getDefaultInstance(properties,null);
MimeMessage message = new MimeMessage(session);
// 送信元アドレス
message.setFrom(new InternetAddress("xxx@xxx.jp"));
// サブジェクト
message.setSubject("subject","iso-2022-jp");
// メール本文
message.setText("text","iso-2022-jp");
// 送信日付
message.setSentDate(new Date());
// サービス接続
Transport tp = session.getTransport("smtp");
tp.connect( "SMTPホスト", SMTPポート, ユーザーID, パスワード );
// 送信先アドレス
InternetAddress[] to = { new InternetAddress("yyy@yyy.jp") };
tp.sendMessage( message, to );
2つだけ特筆事項を
その1
Properties properties = new Properties();は、よくサンプルなどで
Properties properties = System.getProperties();となっていますが、newするほうをお勧めします。
Systemプロパティを書き換えると、複数のアプリが動作するVMではメールの設定が上書きされてしまいます。
その2
// SMTPサーバーのアドレスを指定
properties.put("mail.smtp.auth","true");は
// SMTPサーバーのアドレスを指定
boolean auth = true;
properties.put("mail.smtp.auth",auth);ではNGで、文字列を設定する必要がありました。
環境によってはポート指定や認証が必要ない場合もありますがので、使い分けしていただければと思います。
2008/5/29 追記
サンプルコードを一部修正しました。
こちらをご参照ください。
Posted in Java | 1 Comment