PEAR::Mail_mimeで日本語ファイル名の添付ファイルを送る方法

世の中もう大体 UTF-8 で OK かなと思ったら、メールの添付ファイル名はそうでもないっぽいです。UTF-8 + URLエンコードで添付した日本語ファイル名が正しく読めないメール環境があったので、ISO-2022-JP + base64 にしたら大丈夫でした。


これをするのにPEAR::Mail_mimeだと、ややこしい引数を渡さなければいけないのでそれのメモ。以下のソースは UTF-8 で書かれていることを前提にしています。

<?php
require_once 'Mail.php'; // PEAR::Mail
require_once 'Mail/mime.php'; // PEAR::Mail_mime

$textbody = '日本語の本文。';
$filename = '日本語添付ファイル名.txt';
$filedata = '日本語添付ファイルの中身';

// 文字コードを ISO-2022-JP に変える
mb_convert_variables('ISO-2022-JP', 'UTF-8', $textbody, $filename);

// 各 mime パートの構築
$mime = new Mail_mime;
$mime->setParam('text_charset', 'ISO-2022-JP');
$mime->setParam('text_encoding', '8bit');
$mime->setTxtBody($textbody);
$mime->addAttachment($filedata // data
                     ,'application/octet-stream'  // content-type
                     ,$filename // attached file name
                     ,false // isfile
                     ,'base64' // encoding
                     ,'attachment' // disposition
                     ,'' // charset
                     ,'' // language
                     ,'' // location
                     ,'base64' // n_encoding
                     ,'base64' // f_encoding
                     ,'' // description
                     ,'ISO-2022-JP' // h_charset
    );

$subject = '日本語表題';
$jis = mb_convert_encoding($subject, 'ISO-2022-JP', 'UTF-8');
$encsubj = mb_encode_mimeheader($jis, 'ISO-2022-JP', 'B');

$recpts = 'example@example.jp';

$headers = array(
    'From' => 'webapp@example.jp';
    'To' => $recpts,
    'Subject' => $encsubj,
    );
$headers = $mime->headers($headers);
$body = $mime->get();

// メール送信には SMTP を直接使うのが好きw
$mail = Mail::factory('smtp', array('host' => 'localhost'));
$mail->send($recpts, $headers, $body);

ABC 2012 Springで写真を撮りまくった

http://www.flickr.com/photos/koyhoge/7018593321/

先週の土曜日 2012年3月24日に「Android Bazzar and Conference 2012 Spring」(abc2012s)が東大本郷で開催されました。上の写真はそれとはあまり関係なく、会場となった工学部2号館の東側で行われていたビル工事現場です。かっこいい。


ABCのスタッフをやるのは前回のABC 2011 Summerに続いて2回目で、事前の準備をやる余裕はあまりないですが、当日だけでいいならと当日スタッフとして登録しています。前回、自分が担当になった震災セッションで例のごとく登壇者写真を撮りまくってたら(Flickrのセット)、それが案外好評だったようで、今回は記録班として写真を撮る専門な役割になってしまいました(笑)。


ABCといえば、屈指のセッション同時並行トラック数で有名です。今回も11トラック+バザール(展示)2会場という構成で、まぁ全部のセッションを撮影するのは土台無理と諦めつつ、できるだけたくさん会場を回ってセッションを撮影しようと心掛けました。


東大安田講堂内は当初は撮影禁止だったのが、ぎりぎりになって撮影OKになって、天井からシャンデリアがぶら下がっている素晴らしい講堂内の写真が撮れたり。
http://www.flickr.com/photos/koyhoge/6871930536/in/set-72157629672902151


当日の天気は、開始時は小雨、途中でちょっと強い雨になって、その後晴れる、というあまりイベント日和な天気ではありませんでしたが、それでも 2,000 人以上の方々にご参加いただけたようです。


小雨が降る中、メイン会場の工学部2号館と安田講堂の間を何度も往復したわけで、終わってみると結構疲れました。でも楽しかったので、きっとまた次回の ABC も当日スタッフ登録をすると思います。


当日、私が撮影した写真のflickr setは以下です。

20120324-abc2012spring - an album on Flickr

『VIERAとDIGAで実現する「スマートAVライフ」ブロガーイベント』

今月のはじめにタイトルにあるブロガーイベントに参加しました。イベント終了後比較的すぐにはてなブログの方で報告レポートを書いたのですが、メインブログに設定してあるはてダに書かないといろいろ拾われないっぽいので、こちらにも誘導エントリを起こします。

書いた記事はこちら。
AV機器は今後来るソフトウェア化の波に対抗できるのか? (パナソニックブロガーイベントレポート) - はてブロ::koyhoge

はてなの「cybozu.com」記事キャンペーンに当選してレッドブルが72本送られてきた

http://www.flickr.com/photos/koyhoge/6683548523/

はてなサイボウズの共同キャンペーンで、その記事をブックマークすると抽選でプレゼントが当たるという企画がありました。

「クラウド基盤から作りました」――はてなチーフエンジニアとid:TAKESAKOが聞く「cybozu.com」 - はてなニュース

この手のプレゼント運は生まれてこの方全く恵まれたことがないので、普通に面白い記事をブックマークする体で、結果的にキャンペーンに応募したところ、なんと

が当たるという思わぬ結果に。

『はてなチーフエンジニアとid:TAKESAKOが聞く「cybozu.com」』記事キャンペーン当選者発表! - はてなブックマーク日記 - 機能変更、お知らせなど


これでもIT業界の端くれなので、自分の周りにはレッドブルジャンキーがごろごろいます。でも私自身に取ってはレッドブルは単に高いだけの健康ドリンクなので、普段はほとんど飲みません。コスパの良いドデカミンの方がよく飲むくらいです。そんな訳で72本とか家に送られてもとても飲みきれません。必然的にジャンキーが多数生息する勤務先、アジャイルメディア・ネットワークに送ってもらうことにしました。


送付先をはてなのWebフォームに入力して数日、無事にレッドブルがAMNに送られてきました。はてなさんありがとう。


ダンボールには中身がレッドブルであることを過不足無く主張した紙が貼られています。
http://www.flickr.com/photos/koyhoge/6683507129/

これが1ケース=24本。あと2つ同じものがあります。
http://www.flickr.com/photos/koyhoge/6683512051/


この位の写真を twitter に投下して報告終了しようとしたら、傍らにいた カイさん が、

「タワー建てないとダメでしょ!」

と強烈にダメ出しして来ました。さすが身体中の血管に RSS が流れているアルファブロガーは一味違います。


しかし考えてみれば、なるほどこれをネタに遊ばないのは送ってくれたはてなさんに申し訳ないということで、空いていた会議室にレッドブルタワーを建てることにしました。

3ケース分を全部机に乗せるとこんな感じ。
http://www.flickr.com/photos/koyhoge/6683534633

ほいほいとレッドブル缶を積んでいき、あっという間にレッドブルタワーが出来ました。
http://www.flickr.com/photos/koyhoge/6683548523/

上から見ると、「ミッション:インポッシブル/ゴースト・プロトコル」にも登場して有名になった世界一高いビル「ブルジュ・ハリファ」にそこはかとなく似ている気もします。
http://www.flickr.com/photos/koyhoge/6683554747/

ひとしきり撮影された後レッドブルタワーは解体されて、その一部は冷蔵庫に収まりました。すでに数本社内で消費されたようです。
http://www.flickr.com/photos/koyhoge/6683706499


なにせ大量にありますので、近々で AMN に来社する方でレッドブルを飲みたい方は遠慮無くリクエストして下さい。

ということで、このようなプレゼントを頂いたサイボウズさん、はてなさん、本当にありがとうございました。


この記事は最初ははてなブログの方に載せようと思ったのですが、はてブロはリンク記法のimage属性が使えないことに気がついて、仕方なくダイアリーとなりました。はてブロはもう少し頑張って欲しい。

業務連絡 Symfony Advent Calendar JP 2011 参加者の皆さんへ

ATND のメッセージですでに送らせて頂きましたが、メールアドレスの設定をしていない方も何人かいらっしゃるので、ここでも書いておきます。

Symfony Advent Calendar JP 2011 では、Gihyo Digital Publishing さんの「技術系アドベントカレンダー電子書籍化する企画」に乗る予定です。

2011年の技術系Advent Calendarを電子出版で提供しませんか? | Gihyo Digital Publishing

つきましては、今回のアドベントカレンダー参加者の中で自分のエントリは電子書籍化して欲しくないという方は、12/29 までに以下のいづれかの方法でその旨表明して下さい。

どうぞよろしくお願いします。
 

アドベントカレンダーと勉強会文化

クリスマスが過ぎ、各コミュニティで開催されていたIT系アドベントカレンダーもみな一段落したようです。自分も今年は PHP Advent Calendar jp 2011Symfony Advent Calendar JP 2011に参加して、それぞれ記事を書かせてもらいました。
特に Symfony の方は、成り行きで取りまとめ役になってしまい、運営サイドのやきもきもちょっと経験できましたw。


昨年くらいから盛り上がりを見せてきたIT系アドベントカレンダーですが、gihyo.jp さんの記事によると、今年はものすごいことになっています。

本日12月1日より,プログラマ有志による2011年の技術系Advent Calendarが各所ではじまる:インフォメーション|gihyo.jp … 技術評論社

1ヶ月弱という短い期間に、これだけ大量の技術記事が一気に投入され、ノウハウが共有されアーカイブされていくのですから、日本は凄いところに来たなぁと割りとマジで思います。


その基板になっているのは、ここ5年くらいで徐々に広がってきていた勉強会文化(もう文化と呼んじゃっていいよね)が熟成させてきたIT系コミュニティなのでしょう。かつて勉強会ムーブメントを目の当たりにしたときに、これはひょっとして日本の社会を変えるんじゃないかと考えて「IT Community Impact!」というイベントを企画したりしました。

IT Community Impact!というイベントをやります - Blog::koyhoge

最近のこの手の盛り上がり方を見てると、日本人は情報発信が苦手なんて誰が言ったんだろうと思いますw。お祭り好きで自分の好きな事を話したり聞いたりするのが好きな日本人像に、割りかし明るい未来が見えたりするのは自分だけでしょうか?

Nexus SをAndroid 4.0にアップデートした

Nexus S 向けに Android 4.0.3 Ice Cream Sandwitch がリリースされたという報道がありました。1日待っても自動で OTA する様子がなかったので手動にてアップデートを行いました。


手順は以下にある通り。

[INFO] Nexus S Official ICS 4.0.3 Released D… | Samsung Nexus S | XDA Forums

定番ボタン付きの ICS は案外使い易い

友人の Galaxy Nexus をこれまでに何回か触らせてもらいましたが、いろんな人がすでに書いている通り、メニューボタンの場所がコロコロ変わるのは UI デザインの改悪としか思えませんでした。Nexus S の場合は、端末が持っているメニューボタンがそのまま使用できるので、その点は不満はありません。

設定項目の増減

設定項目に無くなったものがあります。例えば、従来は確か「ディスプレイ」カテゴリにあった「アニメーション」の設定が無くなっています。つまり ICS では画面のエフェクトアニメーションが常に有効になっています。


また「開発者向けオプション」がかなり拡張されていて、

  • 厳格モードを有効にする
  • ポインタの位置
  • タップを表示
  • 画面の更新を表示
  • CPU 使用状況を表示
  • ウィンドウアニメスケール
  • トランジションアニメスケール

などなど、多くの項目が追加されています。

アプリによっては非常に不安定

既存のアプリの互換性ですが、モノによっては非常に不安定です。サスペンド状態から復帰したときに、かなりの確率で Google+ アプリ(サービス)がクラッシュします。


他にも不定期にアプリがクラッシュして

問題が発生したため <アプリ名> を終了します

というダイアログが出ることがあります。同じアプリを再度立ち上げても再現性はありません。

以上 ICS で気がついたことを書いてみました。