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

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

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

LIST OF ARTICLES

記事一覧

  • テクログ

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

    こんにちわ。パグ(▼・(エ)・▼)です。 技術ブログ自分回以外での更新ですが、 鬼ぶちょうのOKが出たので、きまぐれに更新します。 最近業務でメールの解析業務があったので、忘れそうなとこを備忘録として残そう!と思いました。 技術で分からない点があるときは、私としても、ネットをウロウロして 近い事象を探したりするものですが、今回はこの例はバグる!!って話をします。 所々間違いがある場合は「間違ってやがる・・・うぷぷ」とか心の中で思うなり、 弊社お問い合わせ(https://core-tech.jp/)にご連絡いただけると嬉しいです。 解析はPEARのMimeDecodeで行いました。 使用したモジュールは ・Mail/mimeDecode.phpです。 今回検証した媒体は ・WEBメールだと  google  msn  yahoo ・PCのメーラー ・ガラケー(au,docomo,softbank) ・スマホ(iphone,アンドロイド)です。 簡単に検証した内容についてですが、 上記の媒体のうちどれかからメールが送られてきて、受信したメールを 解析し、保存するってとこまでです。 まずはメールを解析するところなんですが、メールというのは大きく分けて (大多数の)添付なしメールのシングルパート (大多数の)添付ありメールのマルチパートに分かれています。 サーバーに送られてきたメールデータをメモ帳やvmで開いてみると、興味深いことが分かります。 (上部省略) From: XXXXXX@XXXX.ne.jp         (送り元) To:   XXXXXX@XXXX.ne.jp         (送り先) Subject: =?iso-2022-jp?B?GyRCJCIbKEI=?= =?iso-2022-jp?B?GyRCJCsbKEI=?=   =?iso-2022-jp?B?GyRCJDUbKEI=?= =?iso-2022-jp?B?GyRCJD8bKEI=?=   =?iso-2022-jp?B?GyRCJEolIhsoQg==?=     =?iso-2022-jp?B?GyRCJSsbKEI=?=   =?iso-2022-jp?B?GyRCJTUbKEI=?= Message-ID:  MIME-Version: 1.0 Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit メール本文 これはシングルパートのメールになります。 見ればすぐに分かると思いますが、構造がすごく単純になってます。 次はマルチパートのメールについてです。 (上部省略) From: XXXXXX@XXXX.ne.jp         (送り元) To:   XXXXXX@XXXX.ne.jp         (送り先) Subject: =?iso-2022-jp?B?GyRCJCsbKEI=?= Message-ID:  Date: Thu, 4 Oct 2012 15:39:15 +0900 Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="-----=_NextPart_39325_15894_57999" -------=_NextPart_39325_15894_57999 Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit メール本文 -------=_NextPart_39325_15894_57999 Content-Type: video/3gpp; name="121003_2001~01.3gp" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="121003_2001~01.3gp" AAAAIGZ0eXBrZGRpAAAAAGtkZGkzZzJhM2dwNTNncDQAAAAkdXVpZG12bWyojBHUgZcAkCcIdwMA AAAA///oBcyRy4QAAAA8dXVpZGVuY2mojBHUgZcAkCcIdwMAAAAAS0RESS1TTgBXNjRTAAAAAFNO (以下省略) マルチパートメールは添付ファイルもこの文字列に凝縮されています。 添付したファイルはバイナリ型で保存されています。 「Content-Type: video/3gpp; name="121003_2001~01.3gp"」 が添付ファイルです。 添付ファイルが複数添付されている場合はその分 -------=_NextPart_39325_15894_57999 Content-Type: video/3gpp; name="121003_2001~01.3gp" AAAAIGZ0eXBrZGRpAAAAAGtkZGkzZzJhM2dwNTNncDQAAAAkdXVpZG12bWyojBHUgZcAkCcIdwMA(以下略) -------=_NextPart_39325_15894_57999 Content-Type: video/3gpp; name="121003_2001~02.3gp" AAAAIGZ0eXBrZGRpAAAAAGtkZGkzZzJhM2dwNTNncDQAAAAkdXVpZG12bWyojBHUgZcAkCcIdwMA(以下略) こんな感じで区切られています。 このうちこの部分が Content-Type: video/3gpp content-type の「ctype_primary/ctype_secondary」って言います。 添付ファイルの解析方法について検証をかさねた結果、あちこちのサイトでありがちな こんな書き方だとプログラムがバグるということがわかりました。 switch(strtolower($this->structure->ctype_primary)) { case "text": // シングルパート(テキストのみ) 処理 break; case "multipart":  // マルチパート(画像付き) 処理 break; これです!!調べた3サイトのうち2サイトがこんな検証方法を使用していました。 ctype_primary に入ってる値が必ずしもtext 、multipartとは限らないのです。 画像つきでもmultipartじゃなくてtextのほうに入ってるときがあるんですよ。ガラケーの特定機種なんですが、 textしかないからって「これはシングルパートメールなんだね☆」って判定しちゃうのは危ないことです。 次にこんな書き方を良く見ます。 //添付ファイルの拡張子を取得する $type = strtolower($part->ctype_secondary); //ファイルネームを作成する。 $file_name = date("YmdHis") . "." . $type; ctype_secondaryで拡張子付けちゃう人が多いですけどね・・・\(^o^)/これは大きな間違いです。 必ずしもctype_secondaryが拡張子になるとは限らないからです。WEBメールから送信した場合なんかは octet-streamやx-msvideo、alternativeになったり、iphone から送信した場合3gppなんかが ctype_secondaryに入ってきたりしますので、そのまま出来たものとして嬉々として公開するとバグります。 改修を行ったプログラムがまさにこの状態で( ՞ਊ ՞)コノヤローってなりました。 なら、どうしたら判断できるのか? まず、シングルパートなのかマルチパートなのかって判定方法はあきらめることです。 シングルパートなのか、マルチパートなのかってことよりも、添付ファイルがあるのかないのか? ってことを考えましょう。もちろん、添付ファイルが更にデコレーション系絵文字なのかどうか、 なんてことも判定可能です。 そんでもって、拡張子なんて元のファイル名の「.」以降からとっちゃえばいいですね。 ワザワザ別枠からとる必要がないってことです。 ちなみにこのサイトのコードは非常に秀逸でしたので、参考にして作りましたあ。 http://d.hatena.ne.jp/ya--mada/20080415/1208318475 マルチパートだとここにalternativeなどの意味が書いてあってよかったです。 http://www.atmarkit.co.jp/fnetwork/rensai/netpro04/netpro01.html 今回ネット情報は結構あてにならない!と思いました。内容はあくまで、とっかかりや参考程度に考えて、ちゃーんと検証して、修正してからリリースしましょう。次回もメールの解析を行います☆ 次回ブログアップはいつになることやら~。 ではでは、パグでしたぁ~ヽ(・∀・)ノばいばいぷぅ☆ミ
  • テクログ

    ASPではご注意を...

    はじめまして。 ザキヤマです。 ネタを探して、探して四苦八苦していました。 ようやく見つけたネタは、以前の案件でた障害の事例をもとにお話します。   今はあまり使われていませんが、 一部案件では、ASPを使用しています。 このASPの画像情報取得の既存関数が一癖あるんです。 障害として挙がったときは何事かと思いましたね。   一癖ある関数、 それは、LoadPictureという関数です。 ネットで「asp 画像情報取得」と検索すると何気なくでてくる関数なんですが、 詳細な情報があまりないため、 僕も不用意に使ってしまったんです。 この関数ですが、 RGB形式の画像には対応しているんですが。。。 何とCMYK形式(印刷用画像)の画像には対応できていなかったんです。 CMYK画像を読み込もうとする、 エラーとして表示されてしまいます。。。 エラー内容だけみると、 なにが原因なのかわからないので、 これは本当に注意したほうがいいです。 管理画面側でCMYKをRGB形式に変換していれば、 別ですが。 でも、オフィシャルのページでは、 あまり使わないほうがいいという記載もあるので、 基本的に使用しないほうがいいかと思います。   あ、ついでにですが、 CMYKの画像情報を読み込む手段として、 imagemagicを使用する方法もあるのですが、 imagemagicは相当なCPUを使用するようで、 多用し過ぎるとサーバー負荷につながります。 PHPでは影響はあまりないようですが、 ASPではものすごく影響します。   ご注意ください!!  
  • テクログ

    【Google Chrome】WEBディレクターが入れておくべき拡張機能

     ふと見るとiPhoneの電源が落ちている なかむ です。 テクログ公開にあたってデザイナーや開発、ディレクターとブログを分けようと思ったのですが、面倒くさいのでやめました、すいません・・・ ディレクター(ディレクターじゃなくてもいいですけど)なら入れておいて損はないChromeの拡張機能をご紹介します!   ◯Awesome Screenshot    ページ全体やページの一部のキャプチャーPNG形式で保存できる。FLASHもキャプってくれる優れもの。注釈もつけれます。キャプチャーの拡張機能は多々ありますが、一番しっくりきました。   https://chrome.google.com/webstore/detail/alelhddbbhepgpmgidjdcjakblofbmce   ◯Chrome Sniffer      サイトがどんな技術が使われているか教えてくれる拡張機能。   こんな感じでアドレスバーに表示(テクログはWordpressで構築しているのでWマークがでてます) 色んな発見があって勉強になります。   https://chrome.google.com/webstore/detail/homgcnaoacgigpkkljjjekpignblkeae   ◯Color Picker     知りたい色のカラーコードを抽出できる拡張機能。カーソルの先に色を合わせてクリックするとカラーコードが簡単にコピーできるのが便利です。   https://chrome.google.com/webstore/detail/ohcpnigalekghcmgcdcenkpelffpdolg   ◯Drag & Drop Search   記事を見ている際、あーこれすぐに検索したいって思った時にドラッグして検索したいサービスですぐに検索できますヒャッホイオプションでサービスを変更できます。   https://chrome.google.com/webstore/detail/njdeknfopjeielabfoglnmbggkegcanm   ◯Facebook Social Plugin     サイトや記事がどのぐらい「いいね!」されてるかひと目で分かります。クリックすれば「いいね!」もできます。いいね!   https://chrome.google.com/webstore/detail/hdmclgnbhdiklglmmdcaelggigiiigpm   ◯FireMobileSimulator for Google Chrome     携帯やスマートフォンの動作を確認できる拡張機能。最新機種も追加可能です( ^,_ゝ^)ニコッ※ちょっと確認したい時に使います。基本的には実機で確認します。   https://chrome.google.com/webstore/detail/mkihbloiacgiofaejgagokalpeflnmbe   ◯HTML5 Powered     HTML5でマークアップされているかひと目で分かる拡張機能。色んな発見があります。 こんな感じでアドレスバーに表示(テクログはHTML5でマークアップしてます)   https://chrome.google.com/webstore/detail/klleofbhhghgacodijohlacbfhfcefom   ◯Image Properties Context Menu     画像の大きさとか重さとか調べたいなぁーって時に重宝します。右クリックで簡単に調べることができます。 https://chrome.google.com/webstore/detail/khagclindddokccfbmfmckaflngbmpon   ◯Page Ruler     閲覧中のページでこの高さどのぐらいかなぁー困ったなぁーって時にささっとサイズが調べられます。CSSで確認するのがメンドーな時によく使ってます。 https://chrome.google.com/webstore/detail/jlpkojjdgbllmedoapgfodplfhcbnbpn   ◯QRcode maker     ガラケーやスマートフォンでWEBサイトを確認する際に、直接URLを打ち込むのがメンドーな時に便利なのがこの拡張機能。今開いているページURLのQRコードを表示してくれます。ダウンロードもできます。   https://chrome.google.com/webstore/detail/mljeoehehjjniajneijpcnmapmmhilgj   ◯文字数カウンタ     ここ何文字ぐらいあるのかなぁー困ったなぁーって時にコピペだけで文字数を表示してくれます。文字数制限があった場合、とても便利☆   https://chrome.google.com/webstore/detail/inhhfghhfjpmhleoidodhcgeecicfbep   こういう拡張機能あったよ!という方は教えてください!Chromeが重くならない程度に試してみます♪
  • テクログ

    負荷分散装置

    ムチャぶりおにぃです。負荷分散装置について、ざっくりと話したいと思います。 負荷分散装置と聞くと、数百万もする鉄の箱をイメージされる方がいらっしゃるかと思いますが、時代の流れでしょうか。。価格も下がり35万で購入できるものまで出てきていますね。 しかし、35万でも高いものは高いです。そこで考えるとなると。。。もっと安くできるのではないかと。。。 まず、負荷分散について話しますと(知っている方は、流してください)、WEBサイトやデータベースで少量のデータの処理であれば、さくっと終わるので気にしなくてもいいですが、膨大なトラフィックやデータとなってくるとかなりの時間がかかってしまいますよね。そこで負荷分散を行い、短時間で終わりにしようというものです。そのまんまですね。 さて、本題。負荷分散を安く抑える方法は、リナックスに負荷分散ができるソフトをインストールして利用しちゃいましょってこと。負荷分散ソフトとしてLVSというものを利用します。 下準備、テスト用として3台のPCを用意し、リナックスをすべてにインストールしておきます。1台が負荷分散用(LB01)、2台がウェブとかメールとかのサービス用(SV01/SV02)として利用します。今回の対象のリナックスは、CentOSになります。 各マシンには、以下のようにそれぞれIPアドレス・ホスト名を設定しておきます。SV01/SV02には、apacheがインストールされていて、ブラウザでアクセスするとSV01・SV02とレスポンスを返す設定になっています。SV01/SV02のデフォルトGWは、LB01からのレスポンスを返答するためにLB01のeth1に向いています。 リナックスのインストール・サービス用マシンの構築・初期設定については、割愛いたします。※CentOSをBASE・Development Tools・Development Librariesのパッケージでインストールした環境で進めております。 LVSは、非常に簡単に設定できます。LB01を起動します。 起動しrootでログインしたら yum -y install ipvsadm を入力。たったこれだけです。Complete!が表示されたらインストール完了です。インストールされているか確認してみましょう。 ipvsadm -v を入力。 ipvsadm v1.25ほにゃららと表示されればインストールされています。 次に、分散処理を行うためのコマンドを実行しましょう。 1.サービス応答用IPアドレスの設定リクエストに答える為のIPアドレスをLB01に設定。LVSにも設定をします。 ifconfig eth0:1 192.168.92.248 netmask 255.255.255.255ipvsadm -Cipvsadm -A -t 192.168.92.248:80 -s rr 2.LVSにサービス応答のサーバー設定実際にサービスを行うサーバーを登録します。 ipvsadm -a -t 192.168.92.248:80 -r 192.168.192.35 -mipvsadm -a -t 192.168.92.248:80 -r 192.168.192.37 -m 3.動作確認ブラウザにてhttp://192.168.92.248へアクセス。とその前に!! 動作確認の前に、もうひと工夫が必要です。 負荷分散で、パケットをほかのサーバーに渡して処理するので、パケットを転送してもいいよっていう設定を許可してあげないといけません。 echo "1" > /proc/sys/net/ipv4/ip_forward これで、設定がOK! ブラウザでチェックしてみよう!正しく設定ができていれば、SV01/SV02が表示されると思います。 これで、負荷分散について、できるようなりました。 高価な負荷分散装置を買うことなく、同じようなことができるようになりますね。 しかし、このままの設定だと問題があります。再起動したら、利用できなくなる。ネットワーク障害・ハード故障などが発生したらそこへのアクセスをさせないように行う。しかもLVSには、その機能が付いていません。 じゃあ、どう解決したらよいのか。。。長くなるため、その話は、また今度、では。
  • テクログ

    ドメイン(サーバー)移転

    ドメイン(サーバー)移転とは インターネットでは、ドメインを入力するとDNS[Domain Name System]サーバーの情報に従って、ホームページが存在するサーバーに接続されるしくみになっています。 ドメイン移転とは、お客様のドメインを管理しているレジストラのデータベースにアクセスして、Newサーバーの場所を登録する作業のことです。 ドメイン移転の手続き ドメイン名の種類によって、手続き方法が異なります。  JPドメイン名 お客様ご自身でドメイン名を管理されている場合は、ドメイン管理画面から現在割り当てられているネームサーバー(DNS)を弊社指定の情報に書き換えていただくだけで手続きが完了します。  ドメイン名の管理を弊社に移管することも可能ですが、この場合は指定事業者変更手続きを行います。 この手続きでは、お客様の作業は特にありません。  外国ドメイン名(com.net.org等) お客様ご自身でドメイン名を管理されている場合は、ドメイン管理画面から現在割り当てられているネームサーバー(DNS)を弊社指定の情報に書き換えていただくだけで手続きが完了します。  ドメイン名の管理を弊社に移管することも可能ですが、この場合はドメイン管理画面から【Auth-Code】or【レジストリキー】入手してください。 ドメイン名の管理を外部事業者に委託されている場合は、そちらからご入手ください。  外国ドメインの【Auth-Code】or【レジストリキー】をご存知無い場合 本来、お客様側でご契約のレンタルサーバー、プロバイダなどにお問合せ頂く内容です。お客様の方でご契約のサポート窓口に電話、メールでお問合せ頂くことが望ましいです。 それぞれのサーバー業者により、【Auth-Code】or【レジストリキー】の発行手順は異なりますが 解約申請書の郵送が必要になることがほとんどです。   解約申請書の郵送 (Eストアの場合) Eストアの場合の手順を記載します。下記URLのような詳しい説明ページがある業者は珍しく、詳細はサポート窓口に問合せなければ分からないケースがほとんどです。解約の説明ページを目立つ場所に置かないのは仕方ない部分もあるかと思います。 各サーバー業者で手順異なりますが、Eストアの場合、他社サーバーへドメイン移転するためには解約月の前月末日まで解約申請書を郵送する必要有ります。  解約申請書 -->下記URL印刷し 1) or 2) のどちらか選択 http://manual.estore.co.jp/form/itp-rs/print/itprs_kaiyaku.pdf  下記 1) or 2) どちらか選択することで 【Auth-Code】or【レジストリキー】が発行されます。  1) 他社ドメイン管理サービス移転する (ドメイン管理団体〔レジストラ〕の変更 移転先のドメイン管理サービスがお決まりの場合は、サービス提供業者名・移転後のドメイン所有者名を 以下にご記入ください。(未記入の場合、お客様に確認を要するなど、移転に時間がかかることがございます)  2) 自社サーバーの利用等、お客様にてドメイン管理をする 弊社管理下のドメインを、お客様管理下へ移行する手続き(レジストリキー発行)を承ります。後日発送の 「解約承り書」がお手元に届きましたら、ITparkレンタルサーバカスタマーヘルプデスクまでお問合せください。  他社サーバーへの移転手順 http://manual.estore.co.jp/itpark-rs/mvout/index.html  解約後のドメインについて > 他社へ移転する場合 > 国際ドメインの移転(com) http://help.shopserve.jp/support/contract/kaiyaku-domain.html#point4
  • テクログ

    謎のエラーが消えない

    はーい。どうも。ぶーちゃんです。 技術ブログ・・・・なに書こうかなー。みんなかっこよくて書くのビクビクしています・・・・。   技術って訳じゃないけど、よくハマって「え?!なんで?」ってなることを思いついたので、 書いておきます。    新規で作る場合は、ほぼこの問題がおきないと思うんですが、既存のあるものに追加、変更を 繰り返していると、あとで「あー。なんだ。」って思うことがしばしば・・・。    こんなプログラム(ASP)をHTMLに書くとします。             最近はスマホサイトブームですからね。  新しく「ベース処理」と「アナタのキャリアはなんですの?」処理を追加  「スマホ処理」をガリガリ書いて、よし!完成!スマホでテスト実施!! 「はい。いきなりエラー。」「しってた。しってた。」  トライ&エラーの鬼の私には、いつものこと(普通の人はやらないですよねw) 「まあね。どこかやっちゃったんだろう。」ってスマホ処理.aspを見直します。  「あれ??ないなー。悪い事ないよな。頭は悪いけど・・・・って誰が頭が悪いじゃ!」 ね?寂しいでしょ? プログラマって独り言多くなると思うんですけど、どう思います? まあメンドくさいポイントとして、ASPをテキストエディタで書いてるからね。 eclipseとかでアシストしてくれて、コンパイルエラーなんて見つけてくれませんよ。・・・。 何回もデバッグ出力して、 「あれ?どこだろう?・・・・ってか何書いてもエラーになるんだけど?! サーバー壊れてんじゃね?」 はい。すみません。壊れてるのは私の頭です。。。。 問題は「スマホ処理.asp」じゃなくて、前からあった「PC&moble処理.asp」だったんです。 「PC&moble処理.asp」は、別に何も変えてません。触れてもいません。しかもif文。 けどエラーなんです。えーえー。ですからー。えー。 「PC&moble処理.asp」で「ベース.asp」をインクルードしてたんですねー。 2重定義ってやつですね。 PC&moble側の問題がスマホ側までエラーとして出ちゃうんですね。 いやー。最初に会った時は本当にビビりました。 if文でもコンパイル時はPC&moble側まで見るんですね。 かなり嵌りましたw とりえあず入れておけ。入れておけ。って精神だとダメって勉強しました。 ASPとかってインクルードって読み込んでるファイルを内部的に全展開してるだけだからですかね? なにかいい方法で回避出来ないですかねー。調べたんですがいい方法がなかったんですよね。 さわってない、触れてない、if文で括られてるからと言って、必ずしも大丈夫ではない。 確認することを忘れず、これからも作業していきたいってことですね! ってな感じで今回のブログを終了します。 ・・・・かなりおそまつでした・・・。ではまた。