2013.02.21
STAFF BLOG
スタッフブログ
TECHNICAL
テクログ
HTML_Emojiを使用すると、ガラケから送信されたメールの絵文字を、imgタグに変換することができます。
http://libemoji.com/html_emoji
http://libemoji.com/download
これは、webページで表示することを前提とした機能なので、EmailパッケージのHTMLなbodyにそのままは使えません。
http://fuelphp.com/docs/packages/email/introduction.html
以下、FuelPHPでHTML_Emojiを拡張して、EmailパッケージのHTMLなbodyとして使う例です。
classes/my/html/emoji.php
* HTML_Emojiの配置箇所はrequire_onceの通りです。
require_once APPPATH."vendor".DS."HTML".DS."Emoji.php";
class My_Html_Emoji extends HTML_Emoji
{
function &getInstance($carrier = null)
{
static $instances = array();
$aliases = array(
"docomo" => "docomo",
"i-mode" => "docomo",
"imode" => "docomo",
"au" => "au",
"kddi" => "au",
"ezweb" => "au",
"aumail" => "aumail",
"softbank" => "softbank",
"disney" => "softbank",
"vodafone" => "softbank",
"iphone" => "iphone",
"j-phone" => "jphone",
"jphone" => "jphone",
"willcom" => "docomo",
"emobile" => "docomo",
);
if (isset($carrier) === false) {
$carrier = HTML_Emoji::_detectCarrier();
}
$carrier = strtolower($carrier);
$carrier = isset($aliases[$carrier]) ? $aliases[$carrier] : "pc";
if (isset($instances[$carrier]) === false) {
$dirname = substr(__FILE__, 0, -4);
$filename = $dirname . "/" . ucfirst($carrier) . ".php";
require_once APPPATH."vendor".DS."HTML".DS."Emoji".DS."Pc.php";
$instance = new My_Html_Emoji_HtmlMail();
$instance->_carrier = $carrier;
$instances[$carrier] = $instance;
}
return $instances[$carrier];
}
}
classes/my/html/emoji/htmlmail.php
* $dir値は調整する必要があります。
class My_Html_Emoji_HtmlMail extends HTML_Emoji_Pc
{
public $cids = array();
public function clear_cids()
{
$this->cids = array();
}
function _convertCharacter($matches)
{
if (isset($this->_translationTable) === false) {
$this->_initTranslationTable();
}
$utf8 = $matches[0];
if (isset($this->_translationTable[$utf8]) === true) {
$sjis = $this->_translationTable[$utf8];
list($width, $height) = $this->_getImageSize($sjis);
$dir = DOCROOT."public".DS."assets".DS."img".DS."common".DS."emoji_images".DS;
$file = $img_root.bin2hex($sjis) . ".gif";
$this->cids[] = array(
????"cid" => $file,
"file" => $dir.$file,
);
return "<img"
. " src="cid:" . $file . """
. " alt="""
. " width="" . $width . """
. " height="" . $height . "" />";
} else {
return $utf8;
}
}
}
</img"
以下、使い方の例です。
* HTML_Emojiの標準的な使い方を踏襲しています。
* HTML_EmojiがPHP4もサポートしているため、エラー出力レベルを一時的に変更しています。
* $emoji->cidsには、Emailパッケージのattachメソッドで使用する情報が入っています。
$from = "xxx@yyy.zzz";
$to = "xxx@yyy.zzz";
$subject = "xxx";
$E = error_reporting();
error_reporting(0);
$emoji = My_Html_Emoji::getInstance("pc");
$body = "絵文字入りのデータ";
$fmt = "
%s
";
$html = nl2br($body);
$html = $emoji->filter($html, "output");
$html = sprintf($fmt, $html);
$html = mb_convert_encoding($html, "ISO-2022-JP");
$email = Email::forge();
$email
->from($from)
->to($to)
->subject($subject)
->html_body($html);
foreach($emoji->cids as $cid)
{
?$email->attach($cid["file"], true, "cid:".$cid["cid"]);
}
$email->send();
error_reporting($E);
まさかこのブログでの初FuelPHPネタがガラケ関係とは。