COMPANY SERVICE STAFF BLOG NEWS CONTACT

STAFF BLOG

スタッフブログ

TECHNICAL

テクログ

2013.02.21

FuelPHPでHTML_Emojiを拡張して絵文字メールからHTMLメールを作成、送信する

テクログ

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ネタがガラケ関係とは。

この記事を書いた人

core-corp

入社年

出身地

業務内容

特技・趣味

テクログに関する記事一覧

TOP