信頼はずっと、挑戦はもっと。

お問い合わせ
TEL:03-3496-3888

BLOG コアテックの社員ブログ (毎週月曜~金曜更新中)

LIST OF ARTICLES

記事一覧

  • テクログ

    受信メールの解析について2

    こんにちわ。パグ(▼・(エ)・▼)です。最近お外が寒くて、早くこたつを 設置しないと風邪をひいちゃうなーと思ってます。 前回はこんな書き方はダメだという、メールの解析について書きました。 受信メールの解析について1が、前回の終わりだと、 「具体的にどうやって取り出せばいいのよ?ヽ(`Д´#)ノ ムキー!!」 となると思います。なので、今回は取り出すって所について書いていきます。 前回書いたブログを振り返りますと・・・ 1.メールをシングルパート、マルチパートで考えちゃダメ。 switch(strtolower($this->structure->ctype_primary)) { case "text": // シングルパート(テキストのみ) 処理 break; case "multipart":  // マルチパート(画像付き) 処理 break; 2.ファイル名の拡張子をCtype_secondaryからとっちゃダメ。 //添付ファイルの拡張子を取得する $type = strtolower($part->ctype_secondary); //ファイルネームを作成する。 $file_name = date("YmdHis") . "." . $type; ファイルの拡張子の取り方と、シングルパートとマルチパートの判定について記述しています。 では、早速、メールを分解してみます。 入れ物を宣言しましょう。$body に内容を入れます。$attachementsに添付の情報を入れますので、 配列で宣言して下さい。 var $body = array('text'=> null , 'html'=> null ); var $attachments = array(); このあたりはお約束のやつです。 // メールソースを標準入力から読み込み if(!$params['input']) { //ログの出力を行ったりして下さいね。 exit(); // 読み込み失敗 } //PAERmimedecodeでメールの解析を行う。 $decoder = new Mail_mimeDecode($params['input']); $this->structure = $decoder->decode($params); //解析の関数を呼び出す $this->_decodeMail($this->structure); ここから解析の関数です。 ここのサイトが秀逸でしたので、引き続き非常に参考にして作りましたぁ。 http://d.hatena.ne.jp/ya--mada/20080415/1208318475     function _decodeMail(&$decoder) { // 上記ブログに載っていたこの再帰処理部分で、 // 分かれているテキストなんかも同じ所にしまうことができるし、 // 階層が深くなる場合もとれる用になります。 if (!empty($decoder->parts)){ foreach ($decoder->parts as $part){ $this->_decodeMail($part); } }else{ if (!empty($decoder->body)){ // 本文 (text or html ) if ( 'text' === strToLower($decoder->ctype_primary) ) { // ガラケーの特定機種用です。textの方に画像ファイルが入ってしまいます。 if (isset($decoder->ctype_parameters['name']) || _                                         isset($decoder->d_parameters['filename'])) { $tmp = isset($decoder->ctype_parameters['name']) ? _                             explode('.', $decoder->ctype_parameters['name']) : _                             explode('.', $decoder->d_parameters['filename']); $type = strtolower(array_pop($tmp)); $this->_set_attachments($decoder, $type); //ここでplainテキストを取り出しています。 //下記のようにtext,htmlを分ける事で、メールの種類がHTML形式でもテキスト形式でも取り出せます♪ //メールがiphoneなどから送られた場合「テキスト、画像、テキスト」みたいにわかれても再帰処理で //全部取り出してしまうので、$body['text']につながって入っています。 //(ここが他の参考サイト様よりも秀逸だと思った点です。) } else {     if ( 'plain' === strToLower($decoder->ctype_secondary) ) { $get_contents =& $decoder->body; $this->body['text'] .= $get_contents;      }elseif ( 'html' === strToLower($decoder->ctype_secondary) ) { $get_contents =& $decoder->body; $this->body['html'] .= $get_contents;      } } // その他(添付ファイルです、動画も静止画もデコレーション絵文字も) }else { $type = strtolower($decoder->ctype_secondary); $this->_set_attachments($decoder, $type); } } } return; } private function _set_attachments($decoder, $type){ // デコメ判定はヘッダーのcontent-idが入っていたらデコメです。 //一部例外がございますが、ここでは触れていません。 $content_id = ""; foreach($decoder->headers as $key => $headers){ if ($key == "content-id") { $content_id = $headers; break; } } //ファイル名はCtypeパラメータの['name']に入っていますが・・・ //そこにないときはd_parameters['filename']に入っています。 //前回のブログのとおり3キャリア、WEBメール、メーラー、スマフォはiphone,アンドロイドで //試しましたが全部取得可能でした。 //紹介したブログと異なる点ではcontnt_idを取得しているところとtypeをとっている点です。 if (isset($decoder->ctype_parameters['name'])) {     $this->attachments[] = array('mime_type'=>$decoder->ctype_primary.'/'.$decoder->ctype_secondary,  'file_name'=>$decoder->ctype_parameters['name'],  'type'=>$type,  'content_id'=>$content_id,   'binary'=>&$decoder->body); }else{      $this->attachments[] = array('mime_type'=>$decoder->ctype_primary.'/'.$decoder->ctype_secondary,  'file_name'=>$decoder->d_parameters['filename'],   'type'=>$type,  'content_id'=>$content_id,   'binary'=>&$decoder->body); } return; } これで、本文も添付ファイルも取れます!! 添付ありなしで分岐させたいときは$this->attachmentsの数を数えればOK。 ただし、メールの難しいところは、解析してなお落とし穴がたくさんある点です・・・。 メールの内容を使う時はこんな感じで取り出せます♪。 //本文使う時 $this->body['text'] //添付ファイルを保存するとき //配列の場所はメールの保存状態に併せてヽ(・∀・)ノ $length = strlen($this->attachments[0]['binary']); //本文の長さを取得 file_put_contents($tmp_name,$this->attachments[0]['binary'],$length); @chmod($tmp_name, 0777); もちろん上記でほとんどのメールがカバーできるようになりましたが、「ほとんど」であって、 全機種、全キャリアではないって事です。 上記で注意すべき点はデコレーション絵文字などが、attachmentsに入ってしまう点。つまり、 添付ファイルと同様に処理される点です。もちろん取得しないようなシステムのときは、contents-idが 入っていたら、取得処理を飛ばす、など色々改造してみてくださいね☆。 はい、では今回はこれ位で~次回はデコレーション絵文字の落とし穴について 書きます。次回ブログアップはいつになることやら~。 ではでは、パグでしたぁ~ヽ(・∀・)ノばいばいぷぅ☆ミ
  • テクログ

    3分でできるeclipseプラグインの作成方法

    eclipseプラグインの作成方法を簡単にご紹介しつつ、 eclipseに電卓を起動できるボタンを表示するプラグインを作成します。   Pleiades All in One ダウンロードページ(http://mergedoc.sourceforge.jp/)   今回はテンプレートを使用して作成するだけなので、 PDE (プラグイン開発) 3.8.1をダウンロードします。 PHPに特化したプラグインを作成したい場合等は、Ultimateをダウンロードします。   ダウンロードしたファイルを解凍し、eclipse.exeを起動します。   新規プラグイン・プロジェクトを作成します。 File > New > Other...   Plug-in Projectを選択し、Next>ボタンをクリックします。   Project Nameを入力し、Next>ボタンをクリックします。   Next>ボタンをクリックします。   Hello, World Commandを選択し、Finishボタンをクリックします。   このテンプレートを選択することにより、 選択項目のメッセージを表示するメッセージ・ダイアログを開く「サンプル・アクション」を起動する「サンプル・メニュー」(メニューバー)、ボタン(ツールバー)を追加することができます。   他にも、プロパティー・ページ付きプラグイン(Plugin-with a property page)、 エディター付きプラグイン(Plug-in with an editor)等、 用意されている様々なテンプレートが使用して、プラグインを簡単に実装することができます。   Javaパッケージ名、ハンドラー・クラス名、メッセージボックスに表示するテキストを入力し、 Finishボタンをクリックします。   プラグイン・プロジェクトが作成されました。   SampleHandlerクラスが作成されています。   作成したプラグインをデバッグ実行してみると、 ツールバーにボタン、メニューバーにSample Menuが作成されています。   ボタンをクリック、またはSample Menu > Sample Commandをクリックすると、 メッセージウインドウに設定したテキストが表示されました。   ソースを見てみます。   メッセージを変更してみましょう。   デバッグ実行 メッセージの変更が反映されました。   メッセージを表示するアクションを、電卓を起動するアクションに変更してみましょう。   デバッグ実行 電卓が起動されるようになりました。   ボタンがあればいいので、Sample Menuを消してみましょう。 META-INF > MANIFEST.MF > plugin.xmlを開きます。   extension pointとは、拡張ポイントです。 プラグイン開発は、eclipseの既存機能を拡張する形で、 拡張ポイントを見つけて開発していきます。   メニューバーの拡張を設定している部分を削除します。   または、Extensionsタブから、 menu:org.eclipse.ui.main.menu?after=additionsを削除(Removeボタンをクリック)すると、 自動的にplugin.xmlからメニューバーの拡張を設定している部分が削除されます。   デバッグ実行 Sample Menuが消えました。   ボタンの画像を変更してみます。 ※アイコン画像はこちら(http://dots-design.com/)からお借りしました。   iconsフォルダのsample.gifを上書きします。   デバッグ実行 アイコンが変更されました。   では、作成したプラグインを配布できる形式で出力してみます。 File > Export   Deployable plug-ins and fragmentsを選択し、Next>ボタンをクリックします。   プラグイン・プロジェクトを選択し、出力先を入力し、Finishボタンをクリックします。   出力先に指定した場所に、フォルダが作成されます。   フォルダ内にできたjarファイルを、eclipseのpluginsフォルダに移動します。   eclipseを再起動します。 作成したプラグインが表示されています。   今回は簡単なプラグイン作成方法をご紹介しましたが、 ソースが公開されているプラグインを参考にしたり、 他のテンプレートを使用するなどして様々なプラグインを作成することができますので、 皆様も是非お試し下さい♪
  • テクログ

    FILE APIって便利なのね。

    はじめまして、6月入社、新人のクライです。 先日、というか、先程までハマっていたJavaScript関連から、お送りいたします。 HTML5から対応の「FILE API」。これかなり便利です。 このFILE API、指定したローカルファイルのファイル情報やファイルの中身(データ)をJavaScriptで取得できます。 たとえば、画像のプレビューのコードはこんな感じです。   //[HTML側] //ファイルタグ //画像表示するところ //[JS側] //画像プレビューだよ!  $(document).ready(function(){ jQuery.event.props.push('dataTransfer'); $("#input_file").change(function(){  var file = this.files[0]; viewFileContent(file); }); function viewFileContent(file){ if(!window.FileReader){ return; } if(file.type.match(/image/)){ var fr = new FileReader() fr.onload = function(event){ var image_add = $(" ").attr("src", event.target.result); $("#pic_wakuwaku").html(image_add); }; fr.readAsDataURL(file); } } });   と、超簡単に、プレビュー表示されます。 ※これを同じ動きをasp/VBScript/JavaScriptで実装するとなると、とても手間でした。なんとかその部分は出来ましたが。 また、容量(KB)やファイル名、ファイルの種類も簡単に取得できます。 しかし、HTML5からの対応の為、IE9やOPERA10.6等のブラウザでは、FILEオブジェクトが生成されません。 画像のプレビューや簡単な情報をブラウザから取得したい場合には、かなり使えると思います。 これからHTML5が普及していく中で見かける場面も増えてくるのではないでしょうか。 詳しくは、以下のリンクへどうぞ。 「FILE API」参考リンク:http://ascii.jp/elem/000/000/559/559105/
  • テクログ

    レアでモダンなNet Beansでデバッグを完全マスター

    NetBeans でPHPのステップ実行ができる!VBだとよく利用していた、ステップ実行や変数の内容を即時確認。phpでもできちゃうので環境作成しましょう。これでソースにEcho を仕込む必要なし!http://ja.netbeans.org/まずはここから最新版をダウンロードします、NetBeans IDE ダウンロードバンドルリストからPHPを選択10月19日の時点では7.2が最新なのでこのバージョンで説明します。多分そのまま実行すると Java SE Development Kit が無いと言われるのでJDKをダウンロードhttp://www.oracle.com/technetwork/java/javase/downloads/index.html JDKを選択(Java SE Development Kit 9 Update )Accept License Agreement にチェックを入れてWindows x86(32ビット)か Windows x64(64ビット)を選択ダウンロードしたら設定をかえずにJSDをインストール続いてNetBeans IDEもインストール NetBeans IDEを起動すると右下に最新にしてくださいと通知が出るので最新にします次に、xdebugのインストールxampに元から含まれていますが古いので最新版にする必要があります。http://localhost/xampp/phpinfo.phpを開きます画面の内容を [CTRL]+[A]->[CTRL]+[C]で全コピ。画面内容はxdebug以外も全てコピーしてくださいhttp://xdebug.org/wizard.phpコチラのページを開いて先ほどのコピーした内容をテキストエリアに貼り付けて「Analyse my phpinfo() output」をクリック!遷移した画面を下にスクロールするとファイルの最新と修正箇所が表示されます(実行結果↓)上の画面のいみは1. まずファイルダウンロード2. C:xamppphpext に1.のファイルを移動3. C:xamppphpphp.ini を開いて zend_extensionを探す※zend_extension は2個あるので[XDebug] 直下を修正してください。[XDebug];zend_extension = "C:xamppphpextphp_xdebug.dll"zend_extension = C:xamppphpextphp_xdebug-2.2.1-5.4-vc9.dllこんな感じで修正4. 保存したらアパッチ再起動実行構成カテゴリの設定 Net Beansにもどってファイル(F)→プロジェクトプロパティを選択ソースカテゴリの設定   ツール→オプションを開きPHP→デバッグ最初の行で停止のチェックを外す、これにより起動する毎に一時停止しなくなります。   設定が終わったら実行です。 ツールバーに三角とリストがいっしょになってるボタン(右側)を押します。(または[ctrl]+[F5]) するとと変化してテスト実行開始 あらかじめ、行番号の所をクリックしてブレークポイントを指定しておきます。 プログラムが指定の行に達すると、自動でストップしますそこで1行ずつ実行したり変数の中身をみたり。 1行ずつ実行(=ステップ実行)も他の関数の中にどんどん入っていく([F7])か、現在表示しているソース内で移動する([F8])かを選ぶことが出来ます。 説明しずらいのですが使ってみるとすぐに理解できると思います。   実行中は現在使われている全ての変数と内容が一目で確認可能となっています。  $sort_idには”000000000025”が入っていて、$sort_idsは6個の配列になっているのがわかります。 変数名の前にある「+」を押すと配列の中を展開して表示されます。   注意点として デバッグ実行中にソースを変更しても反映されません。 修正したソースは保存しなければ正しく動作しません。   以上で説明は終了となります。Net Beans + Xdebugですてきなデバッグライフを!
  • テクログ

    Dreamweaverのショートカットを使いこなす

    どうもどうも! 今回はDreamweaverのショートカットを覚えましょう、というお話です。   デザイン課の皆様なら日々使っていると思いますが、細かい部分では使いこなしているでしょうか?   ショートカットを頭に入れておけば、かなりの手間が省けたりします。   ctrl + 1(~6) = 見出し(h1~h6)の挿入ctrl + shift + p = pタグの挿入ctrl + alt + t = テーブルの挿入ctrl + alt + i = 画像の挿入ctrl + b = strongタグの挿入ctrl + i = emタグの挿入shift + enter = brタグの挿入   この辺を覚えるだけでもかなり手間が省けます。   …知らなくていちいち手で打ち込んでいた人、全部覚えてってくださいNE!(´ε`;)   ctrl + shift + space で   も入れられたりします。 びっくりデスね!   また、手打ちじゃ面倒くさいテーブルの制御もショートカットで出来ます。   ctrl + m = 行の追加ctrl + shift + a = 列の追加ctrl + shift + m = 行の削除ctrl + shift + - = 列の削除   あとはこんな事も… 是非ともマスターして作業効率化をしていきましょう。
  • テクログ

    jQueryとJavaScript2

    今回はjQueryで「ツールチップ」を作成したいと思います。 「ツールチップ」はマウスポインタを当てると 吹き出しのように文字が表示されるものです。 本ページの右側にある「テクログ」へのリンクなどで使用しています。 通常「ツールチップ」はアンカータグのtitle属性を使用すれば、表示されます。 ほげほげ 今回は、hover()・fadeIn()・fadeOut()を使用します。 まず、hover()の書式です。 $("セレクタ").hover(function() { // 処理A }, function() { // 処理B }); hover()は、指定したセレクタにマウスポインタが 当たったときや外れたときに実行したい処理を設定できます。 上記により、指定したセレクタにマウスポインタが当たると 第一引数の「処理A」部分が実行されます。 マウスポインタが外れると、第二引数の「処理B」部分が実行されます。 次に、fadeIn()・fadeOut()の書式です。 // フェードイン $("セレクタ").fadeIn(1000); // フェードアウト $("セレクタ").fadeOut("slow"); fadeIn()・fadeOut()はそれぞれ指定したセレクタを フェードイン・フェードアウトさせてくれます。 fadeIn()・fadeOut()の引数は、アニメーションが完了するまでの時間を設定でき、 「"slow"」「"normal"」「"fase"」もしくは「ミリ秒」を指定できます。 何も指定しなければ「"normal"」となります。 「ミリ秒」を指定する場合は、数字のみの指定ですので注意して下さい。 ちなみに、 「"slow"」 は 600ミリ秒 「"normal"」は 400ミリ秒 「"fase"」 は 200ミリ秒 になります。 これらのメソッドを用いたのが、下記になります。 ほげほげ 表示したい文字 //  cssの指定によって、自分好みの「ツールチップ」を作ることができます。 では、また来月お会いしましょう。。。