<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
<channel>
	<title>CPA-LABテクニカル</title>
	<link>http://www.cpa-lab.com/tech/</link>
	<language>ja</language>
	<description>CPA-LABを作成する際の技術上の覚書。日曜プログラマの戯れ言。</description>
	<copyright>Copyright 2008</copyright>
	<pubDate>Sat, 30 Aug 2008 02:47:58 GMT</pubDate>
	<lastBuildDate>Sat, 30 Aug 2008 02:47:58 GMT</lastBuildDate>
	<generator>http://adiary.abk.nu/#1.44</generator>
	<docs>http://blogs.law.harvard.edu/tech/rss</docs> 
	<item>
		<title>デコメテンプレート変換はじめてガイド</title>
		<link>http://www.cpa-lab.com/tech/0172#tm1220064478</link>
		<guid>http://www.cpa-lab.com/tech/0172</guid>
		<category>デコメ</category>
		<pubDate>Wed, 27 Aug 2008 10:33:35 GMT</pubDate>
		<author>spok</author>
		<description><![CDATA[<div class="section">
デコメ（デコメール）のテンプレートはキャリア毎に仕様が異なる。今回の<a href="http://hal456.net/qdmail/">qdmail</a>バージョンアップでは、デコメテンプレート変換をできるようにした。<br>
しかもテンプレート変換だけでなく、通常のメールや受け取ったデコメデータから、テンプレートを作成してくれるスグレモノ（のはず）。<br>
なお、<a href="http://hal456.net/qdmail_rec/">QdmailReceiver</a>というQdシリーズのメールでコードソフトが必要です（使い方は簡単）。<br>
<br>
使い方は、<a href="http://hal456.net/qdmail/deco_template_convert">Qdmailデコメテンプレート変換マニュアル</a>をご覧下さい。<br>
<h4><a href="http://www.cpa-lab.com/tech/0172#p0.1" name="p0.1" class="linkall"><span class="sanchor"></span>これを使った試験サービス--デコメを3キャリ対応デコメテンプレートに変換</a></h4>
この記事の最後のQRコードを読み取って、携帯電話からメールを送ってみて下さい。<br>
その際には、ご自分のＰＣメールアドレスにCCしてください（しなくてもいいけど）。<br>
ＰＣメールから普通にメールしていただいても大丈夫です。なんとなく怖い方は（メルアドの収集なんてしていないですから安心はして欲しいのですが）、捨てアドから、以下のメールになんでもいいのでメールしてみてください。<br>
<br>
すると。。。。<br>
<br>
携帯アドレスとCcアドレスに、その送ったデコメが、ドコモ(Docomo)、au、ソフトバンク(Softbank)の３つのキャリアのデコメテンプレートに変換され、その変換されたファイルが添付されたメールが送られてくるはずです。<br>
<br>
お試しあれ。<br>
<a href="http://www.cpa-lab.com/tech/public/image/spok/200808/decotest987.jpg" class="tag image small"><img alt="decotest987.jpg" title="decotest987.jpg" src="http://www.cpa-lab.com/tech/public/image/spok/200808/thumbnail/decotest987.jpg.jpg"></a><br>
うまく読み取れない方は、decotest987　 あっとまーく　hal456　ドット　netまでデコメを送ってみて下さい。<br>
<br>
<br>
ちなみに、デコメでなくても、普通のメールを送っても、デコメテンプレートになって返ってきます。<br>
<a href="http://hal456.net/qdmail/deco_template_sample_script">このサービスのサンプルコードはこちら</a><br>
<p class="seemore"><a class="seemore" href="http://www.cpa-lab.com/tech/0172#">続きを読む</a></p>
</div>

<hr>
<h4><a href="/tech/0172#c">■コメント（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
<h4><a href="/tech/0172#tb">■トラックバック（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
]]></description>
	</item>
	<item>
		<title>タイポが止まらない</title>
		<link>http://www.cpa-lab.com/tech/0170#tm1219190810</link>
		<guid>http://www.cpa-lab.com/tech/0170</guid>
		<category>未分類</category>
		<pubDate>Wed, 20 Aug 2008 00:06:50 GMT</pubDate>
		<author>spok</author>
		<description><![CDATA[<div class="section">
<a href="http://hal456.net/qdmail/">Qdmail</a>でまたもやタイポミス。<br>
相当長い間気づかなかった。<br>
メールヘッダーのContent-type:の構築にて、attachmentとすべきところをattachementとしていた。。。。<br>
これって、一番最初のバージョンからだよね。<br>
このせいで、携帯端末のauでは添付ファイルが正常に認識されなかった模様。<br>
指摘していただいたユーザーに感謝。指摘がなければずっと気づかなかっただろう。<br>
でもだいぶすっきりした感じ。<br>
ユーザーにおかれましては、最新版にアップデートしてください。<br>
Qdmailは常に最新版推奨です。<br>

</div>

<hr>
<h4><a href="/tech/0170#c">■コメント（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
<h4><a href="/tech/0170#tb">■トラックバック（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
]]></description>
	</item>
	<item>
		<title>テストの限界</title>
		<link>http://www.cpa-lab.com/tech/0169#tm1219068679</link>
		<guid>http://www.cpa-lab.com/tech/0169</guid>
		<category>未分類</category>
		<pubDate>Mon, 18 Aug 2008 14:11:19 GMT</pubDate>
		<author>spok</author>
		<description><![CDATA[<div class="section">
<a href="http://hal456.net/qdmail/">Qdmail</a>の開発でえらいポカをした。<br>
単純なテストを忘れたために、一番基本的な使い方でエラーがでるバグ。<br>
複雑な指定ができるインターフェイスを設計した場合、一番複雑なパターンでテストはするのだけれど、今回は、最も単純なパターンでのテストを忘れていた。<br>
今回のバグは、qd_send_mailの第１引数が配列でなく、単純なstringタイプの時にエラーが出ていた。<br>
機械的にすべてのパターンを試すようなテストのためのプログラムを組めばいいのだろうけど。。。。。<br>
今後の開発ツールとしては必要なのだろうけれど、おそらく大幅な改編はしないであろうQdmailにそこまでの労力を注ぎ込むかどうか。。。。<br>
ぼちぼち本業サイトの繁忙期でもあるし、どうしましょう。<br>

</div>

<hr>
<h4><a href="/tech/0169#c">■コメント（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
<h4><a href="/tech/0169#tb">■トラックバック（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
]]></description>
	</item>
	<item>
		<title>メールのデータサイズを知る</title>
		<link>http://www.cpa-lab.com/tech/0168#tm1218639922</link>
		<guid>http://www.cpa-lab.com/tech/0168</guid>
		<category>未分類</category>
		<pubDate>Wed, 13 Aug 2008 15:05:22 GMT</pubDate>
		<author>spok</author>
		<description><![CDATA[<div class="section">
<a href="http://hal456.net/qdmail/">高機能メールコンポーネントQdmail</a>の1.0.3bから、メールのデータサイズ（バイト数）を取得できるようにしました。<br>
<a href="http://hal456.net/qdmail/size">http://hal456.net/qdmail/size</a><br>
<br>
デコメなどでは、容量制限を守らなくてはいけない場合があり、メール送信前に、制限値を超えているかどうかを確認する必要もあるのかな、と思って実装してみました。<br>

</div>

<hr>
<h4><a href="/tech/0168#c">■コメント（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
<h4><a href="/tech/0168#tb">■トラックバック（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
]]></description>
	</item>
	<item>
		<title>エラーの隠蔽</title>
		<link>http://www.cpa-lab.com/tech/0160#tm1218587368</link>
		<guid>http://www.cpa-lab.com/tech/0160</guid>
		<category>未分類</category>
		<pubDate>Wed, 13 Aug 2008 00:28:37 GMT</pubDate>
		<author>spok</author>
		<description><![CDATA[<div class="section">
<a href="http://hal456.net/qdmail/error_display">高機能メールコンポーネントQdmail</a>では、発するエラーを画面に表示しないこともできます。<br>
<br>
<a href="http://hal456.net/qdmail/error_display">Qdmailのエラー処理</a><br>
<br>
そうしないと、残念ながらこうなってしまいます。<br>
<br>
<a href="http://www.namikawa.co.jp/dataupload/registration_send.php">http://www.namikawa.co.jp/dataupload/registration_send.php</a><br>
（エラーの画面なので、いつなくなるかわかりません。）<br>
<pre>
Qdmail error: Must Header is not exist 'TO' line -&gt; 1537
Qdmail error: No Receipt line -&gt; 2159
Qdmail error: No send . Because PHP mail function replied error line -&gt; 1500
Qdmail error: Send Error line -&gt; 1436
Qdmail error: No send . Because PHP mail function replied error line -&gt; 1500
Qdmail error: Send Error line -&gt; 1436
</pre>
このエラーの例をみて、ああ、エラー出力にも、Qdmailのバージョンを表示させたほうがいいな、と思い、あるバージョンからは、エラー時にバージョンも表示するようにしています。<br>
<br>
でも、運用時には必ず、<br>
<pre>
$mail -&gt; errorDisplay( false );
</pre>
としたほうがいいですね。<br>
これで画面にエラー出力をすることはありません。他でエラーを検知する必要はありますが。<br>
というか、これをデフォルトにしたほうがいいのだろうか。。。。<br>

</div>

<hr>
<h4><a href="/tech/0160#c">■コメント（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
<h4><a href="/tech/0160#tb">■トラックバック（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
]]></description>
	</item>
	<item>
		<title>CakePHPのプロもメールのプロではない？</title>
		<link>http://www.cpa-lab.com/tech/0167#tm1218378999</link>
		<guid>http://www.cpa-lab.com/tech/0167</guid>
		<category>未分類</category>
		<pubDate>Sun, 10 Aug 2008 14:36:39 GMT</pubDate>
		<author>spok</author>
		<description><![CDATA[<div class="section">
<a href="http://www.cpa-lab.com/tech/0146" class="tag adiary-key" title="記事指定 ">弘法もメールの誤り？</a>で書いたブルー...さんから、逆引きCakePHPのバージョンアップのお知らせが届いた。<br>
ら、<br>
<p class="seemore"><a class="seemore" href="http://www.cpa-lab.com/tech/0167#">続きを読む</a></p>
</div>

<hr>
<h4><a href="/tech/0167#c">■コメント（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
<h4><a href="/tech/0167#tb">■トラックバック（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
]]></description>
	</item>
	<item>
		<title>秀丸メール返信テンプレート</title>
		<link>http://www.cpa-lab.com/tech/0166#tm1218256474</link>
		<guid>http://www.cpa-lab.com/tech/0166</guid>
		<category>秀丸</category>
		<pubDate>Sat, 09 Aug 2008 04:31:36 GMT</pubDate>
		<author>spok</author>
		<description><![CDATA[<div class="section">
<h3><a href="http://www.cpa-lab.com/tech/0166#p1" name="p1"><span class="sanchor">■</span></a>秀丸返信テンプレート覚書</h3>
<h4><a href="http://www.cpa-lab.com/tech/0166#p1.1" name="p1.1" class="linkall"><span class="sanchor"></span>引用符無し,日時,From,To,Cc,Subjectを入れる</a></h4>
<pre>
$c

 ----- Original Message ----- 
Date:     $(FormatDate,$(RootHeader,Date),"YYYY年MM月DD日(W) hh:mm:ss")$-

$(SmallRootHeader)$-

$(OrikaeshiRootBody)
</pre>
<h5>Tips</h5>
$(OrikaeshiRootBody)を$(RootBody)とすると、折り返し禁止の改行コードとなる。<br>
私は$(OrikaeshiRootBody)が好み。<br>
<h4><a href="http://www.cpa-lab.com/tech/0166#p1.2" name="p1.2" class="linkall"><span class="sanchor"></span>○○さんが書きました。</a></h4>
<pre>
$c

 -----------------------------
$(FormatDate,$(RootHeader,Date),"YYYY年MM月DD日(W) hh:mm:ss")$-に
$(SetNameOnly,$(RootHeader,From))$- さんが書きました。

$(OrikaeshiRootBody)
</pre>
<h4><a href="http://www.cpa-lab.com/tech/0166#p1.3" name="p1.3" class="linkall"><span class="sanchor"></span>○○様　お世話になります。▲▲です。</a></h4>
<pre>
$(SetNameOnly,$(RootHeader,From))$-　様

お世話になります。$(SetNameOnly,$(CurrentHeader,From))です。
$c

（署名）

 ----- Original Message ----- 
Date:     $(FormatDate,$(RootHeader,Date),"YYYY年MM月DD日(W) hh:mm:ss")$-

$(SmallRootHeader)$-

$(OrikaeshiRootBody)
</pre>

</div>

<hr>
<h4><a href="/tech/0166#c">■コメント（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
<h4><a href="/tech/0166#tb">■トラックバック（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
]]></description>
	</item>
	<item>
		<title>qd_send_mail登場</title>
		<link>http://www.cpa-lab.com/tech/0165#tm1217763725</link>
		<guid>http://www.cpa-lab.com/tech/0165</guid>
		<category>未分類</category>
		<pubDate>Sat, 02 Aug 2008 06:22:45 GMT</pubDate>
		<author>spok</author>
		<description><![CDATA[<div class="section">
<a href="http://hal456.net/qdmail/">高機能日本語メールコンポーネントQdmail</a>が1.0.0bにバージョンアップし、<br>
mb_send_mailの機能強化版、qd_send_mail関数が使用可能になりました。<br>
デフォルトではPear::Mailでもできない、携帯へのデコメ送信も簡単にできます。<br>
それでいて複雑な設定も可能です。<br>
<br>
（mb_send_mail自体は使用していません。）<br>
</div>

<div class="section">
<h3><a href="http://www.cpa-lab.com/tech/0165#p1" name="p1"><span class="sanchor">■</span></a>Qdmail　1.0.0 の特徴（機能）Feature</h3>
<ul>
	<li>使い方に合わせた3つの指定方法
	<ul>
		<li>qd_send_mail() 型　　超オススメ！</li>
		<li>$mail -&gt; easyText()　型</li>
		<li>$mail -&gt; send() 型</li>
	</ul>
	</li>
</ul>
<ul>
	<li>PHPの対応バージョン
	<ul>
		<li>PHP4,PHP5の両方に対応</li>
	</ul>
	</li>
</ul>
<ul>
	<li>フレームワークへの対応
	<ul>
		<li>CakePHP1.1 & 1.2</li>
		<li>専用ファイルでなく、通常のQdmailをCakePHPのコンポーネントとして使用可能</li>
	</ul>
	</li>
</ul>
<ul>
	<li>簡単にできること
	<ul>
		<li>日本語メール（日本語本文、日本語ヘッダー）</li>
		<li>日本語以外のマルチバイト各国語メール</li>
		<li>添付ファイル（日本語添付ファイル名ＯＫ）</li>
		<li>携帯デコレーションメール対応（携帯4社+PHS1社自動判別対応。日本のみ）</li>
		<li>インテリジェント・ワードラップ（http://の列は、折り返しをしない等が指定できる）（文字数でなく、文字幅での折り返しも可能。英数字と日本語が混ざっても綺麗！）</li>
		<li>簡易テンプレート機能(差し込みメール)</li>
		<li>SMTP送信　<a href="http://hal456.net/qdsmtp/">QdSmtp</a>と組み合わせて、簡単にSMTP送信</li>
	</ul>
	</li>
</ul>
<ul>
	<li>自動でやってくれること
	<ul>
		<li>文字コード判別</li>
		<li>MIME判定</li>
		<li>HTMLメール時の代替テキスト文生成機能</li>
		<li>様々な指定省略時のデフォルト設定</li>
	</ul>
	</li>
</ul>
<ul>
	<li>多彩にできること
	<ul>
		<li>宛先分離機能（複数宛先に1通づつ送付する機能）</li>
		<li>複雑なMIMEタイプ指定</li>
		<li>複雑なマルチパート構成</li>
		<li>複雑なワードラップ(折り返し処理)</li>
		<li>多彩な指定方法</li>
		<li>常に管理者にBCC</li>
		<li>iso-2022-jp以外にも、utf-8,Shift-JIS等の文字セット可能</li>
		<li>ヘッダー、本文の文字コードをそれぞれ別に指定可能</li>
		<li>本文base64エンコードの指定可能</li>
		<li>本文Quoted-printableエンコード指定可能</li>
		<li>送信ログ、エラーログ作成機能</li>
		<li>不具合時のデバッグ情報作成機能</li>
		<li>新たな方式のデコメ対応機種がでても簡単に追加可能</li>
		<li>独自のメールアドレスチェック（バリデーション）関数を指定可能</li>
		<li>デコメ、インラインHTMLメール時のContent-Idを任意に指定可能</li>
		<li>sendmailへのオプション渡し可能</li>
	</ul>
	</li>
</ul>

</div>

<hr>
<h4><a href="/tech/0165#c">■コメント（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
<h4><a href="/tech/0165#tb">■トラックバック（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
]]></description>
	</item>
	<item>
		<title>でるわでるわ伝説</title>
		<link>http://www.cpa-lab.com/tech/0163#tm1217249742</link>
		<guid>http://www.cpa-lab.com/tech/0163</guid>
		<category>未分類</category>
		<pubDate>Mon, 28 Jul 2008 12:55:42 GMT</pubDate>
		<author>spok</author>
		<description><![CDATA[<div class="section">
Qdmailバージョン1系にて、バージョン0系のユーザーインタフェイス系のコードを見直している。<br>
<br>
そこで驚愕の事実がっ！<br>
<p class="seemore"><a class="seemore" href="http://www.cpa-lab.com/tech/0163#">続きを読む</a></p>
</div>

<hr>
<h4><a href="/tech/0163#c">■コメント（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
<h4><a href="/tech/0163#tb">■トラックバック（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
]]></description>
	</item>
	<item>
		<title>Qdmail 1系の開発に着手</title>
		<link>http://www.cpa-lab.com/tech/0162#tm1217062638</link>
		<guid>http://www.cpa-lab.com/tech/0162</guid>
		<category>未分類</category>
		<pubDate>Sat, 26 Jul 2008 08:24:16 GMT</pubDate>
		<author>spok</author>
		<description><![CDATA[<div class="section">
おかげさまで、<a href="http://hal456.net/qdmail/">Qdmail</a>は、ある程度の方々に使っていただいているようです。<br>
機能的には問題ないと思うのですが、ユーザーインタフェイスに若干難がある部分があります。<br>
ここでむやみに変更するとバージョンによって、引数の指定方法が変わったりしてしまうので、いったんバージョン0系は開発終了とし、新たなメジャーバージョンアップとして、バージョン1系に移行しようかと思っています。<br>
<br>
もし、こんな機能が欲しい、いらない、というのがあればぜひお教え下さい。<br>
<h4><a href="http://www.cpa-lab.com/tech/0162#p0.1" name="p0.1" class="linkall"><span class="sanchor"></span>バージョン0系からバージョン1系への変更点（予定）</a></h4>
<ul>
	<li>qd_send_mail()関数の新設</li>
	<li>easy * での引数指定の変更　array('address@example.com','日本語名')方式に統一。</li>
	<li>replace機能の廃止</li>
</ul>
<h4><a href="http://www.cpa-lab.com/tech/0162#p0.2" name="p0.2" class="linkall"><span class="sanchor"></span>qd_send_mail</a></h4>
オブジェクト指向って何？という方のために、単純な関数形式を提供します。<br>
例え、オブジェクト指向をわかっている方でも、たぶんこれを使ったほうが簡潔なプログラムがかけるようになると思います。<br>
これがバージョン1系の一番の目玉です。<br>
<br>
実は0系でもコードは埋め込んではいるのですが、正しく動作しない状態です。これを完成させたいと思っています。<br>
<br>
<h4><a href="http://www.cpa-lab.com/tech/0162#p0.3" name="p0.3" class="linkall"><span class="sanchor"></span>引数指定の変更</a></h4>
これまで、easyText()などのeasyシリーズではメールアドレスにつける日本語名について<br>
<pre>
$mail -&gt; easyText('address@examplle.com','日本語名',......)
</pre>
という指定方法ですが、これだと、日本語名を指定しない場合は、<br>
<pre>
$mail -&gt; easyText('address@examplle.com',null,......)
</pre>
と、nullを置く必要があり、ちょっとスマートではありませんでした。<br>
そこで、配列の要素0にはメールアドレス、要素1には、マルチバイト日本語名、とし、マルチバイト日本語名を指定しない場合は、配列でなくてもいいようにします。<br>
つまり、通常はこのような指定方法になります。<br>
<pre>
$mail -&gt; easyText(array('address@examplle.com','日本語名'),......)
</pre>
日本語名が必要ない場合は、<br>
<pre>
$mail -&gt; easyText('address@examplle.com',......)
</pre>
となります。<br>
こうすることで、第1引数が to ヘッダがらみ、ということになりすっきりします。<br>
<br>
また複数指定するときは、<br>
<pre>
$to[]=array( 'address1@example.com' , '日本語名1');
$to[]=array( 'address2@example.com' , '日本語名2');

$mail -&gt; easyText( $to ,......)
</pre>
という感じになる予定です。<br>
<h4><a href="http://www.cpa-lab.com/tech/0162#p0.4" name="p0.4" class="linkall"><span class="sanchor"></span>replace機能の廃止</a></h4>
マニュアル化もしていなかったので、たぶん使っている人はほとんどいないreplace機能を廃止しようかと思っています（まだ迷っているけど）。<br>
これを実現するのは結構面倒＆使っている人少ない、のであれば廃止しようかと。<br>
<br>
というわけで、こんな方針でバージョン1系の開発を進めたいと思います。<br>

</div>

<hr>
<h4><a href="/tech/0162#c">■コメント（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
<h4><a href="/tech/0162#tb">■トラックバック（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
]]></description>
	</item>
	<item>
		<title>0.9.0になったQdmail</title>
		<link>http://www.cpa-lab.com/tech/0158#tm1216822649</link>
		<guid>http://www.cpa-lab.com/tech/0158</guid>
		<category>qdmail</category>
		<pubDate>Wed, 23 Jul 2008 14:17:09 GMT</pubDate>
		<author>spok</author>
		<description><![CDATA[<div class="section">
おかげさまで、先日、<a href="http://hal456.net/qdmail/">高機能日本語メールライブラリQdmail</a>は、0.9.0aになりました。それなりに使えるようになっていると思います。<br>
<br>
次回のメジャーバージョンアップでは、現在、qd_send_mail() としても使用できるよう、鋭意作業中です。<br>
<br>
しかし、そのためには、若干、パラメータの指定方法を変えなければならない事態になりそうで、迷っています。<a href="http://www.cpa-lab.com/tech/0156" class="tag adiary-key" title="記事指定 ">Dynamic Drawの品格</a>でも述べたように、ユーザーインタフェイスは、なるべく変えないほうがいいのはわかっているのですが。。。。<br>
こういう設計は、もっと入念にやっておくべきでした。<br>

</div>

<hr>
<h4><a href="/tech/0158#c">■コメント（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
<h4><a href="/tech/0158#tb">■トラックバック（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
]]></description>
	</item>
	<item>
		<title>iPhoneのメールは一体どうなってしまうの</title>
		<link>http://www.cpa-lab.com/tech/0157#tm1216474531</link>
		<guid>http://www.cpa-lab.com/tech/0157</guid>
		<category>未分類</category>
		<pubDate>Sat, 19 Jul 2008 13:35:31 GMT</pubDate>
		<author>spok</author>
		<description><![CDATA[<div class="section">
iPhoneは個人的には魅力はないけれども、<a href="http://hal456.net/qdmail/">Qdmail</a>としては対応しておきたい。<br>
2年縛りの端末を契約する気になれないのだけど、誰かiPhone貸してくれないかな～。<br>
<br>
iPhoneメールについては下記サイトの方々が大変詳しく調べているのだけれど、やっぱり実機がないとわからない部分もあり、どうしましょうかね～。<br>
<br>
<a href="http://blog.livedoor.jp/mensstudio/archives/50629802.html">【iPhone 3Gまとめ】メールはiPhone１台で複数アドレスを利用可能！-め～んずスタジオ － me-n's STUDIO</a>さんによると、@i.softbank.jpでは、デコメの一部については受信可能とのこと。<br>
<br>
<br>
iPhoneのメール全般については、こちらが詳しい。<br>
<a href="http://blog.livedoor.jp/sakusakupocky/archives/50262985.html">iPhoneについて知っておくべきこと【メール編】-MOBILE POWER feat. iPhone</a><br>

</div>

<hr>
<h4><a href="/tech/0157#c">■コメント（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
<h4><a href="/tech/0157#tb">■トラックバック（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
]]></description>
	</item>
	<item>
		<title>Dynamic Drawの品格</title>
		<link>http://www.cpa-lab.com/tech/0156#tm1216822629</link>
		<guid>http://www.cpa-lab.com/tech/0156</guid>
		<category>未分類</category>
		<pubDate>Sat, 12 Jul 2008 23:30:13 GMT</pubDate>
		<author>spok</author>
		<description><![CDATA[<div class="section">
知る人ぞ知る有名ソフトDynamic Draw<br>
<br>
<a href="http://www.dynamicdraw.com/jp/">Dynamic Draw Professional</a><br>
<br>
図を書くときにいつも使わせてもらっています。<br>
とにかく操作が直感的なので、たいへん便利。<br>
「<a href="http://www.cpa-lab.com/tech/081" class="tag adiary-key" title="記事指定 ">recursiveの正しい理解CakePHP</a>」の図も、Dynamic Drawを使わせていただいています。<br>
<br>
こちらの作者さんは、利用者の事を真剣に考えており、とても頭が下がります。<br>
「直感で使える」というつくりにするのは、かなり大変だと思います。こうしたヒューマンインターフェイスが、ソフト設計では重要ですね。<br>
これだけ便利なフリーソフトを提供していれば、様々な質問も来るかと思うのですが、それにとても丁寧に対応しています。<br>
真に技術力のある方は、品格もあるということでしょう。<br>
<br>
<a href="http://hal456.net/">Qdmailシリーズ</a>も、メソッドを呼び出す時の引数の型や、並び順などにかなり気をつけているつもりなのですが、今から思えば、「しまった、別の指定方法の方がよかった」と思う部分もけっこうあります。しかし、一度リリースすると、インターフェイス部分は修正するのは、かえってユーザーを混乱させることになるため、なかなかできないんですね～。<br>
ソフト内部は<br>
<blockquote>
結果が速く正しくでれば、構造、アルゴリズムや内部的なインターフェイスはどうでもいい。<br>
</blockquote>
ということなんでしょうけれども、<br>
対人間部分は<br>
<blockquote>
体系的で理解しやすく、『変わらないこと』<br>
</blockquote>
が重要だと思うのですね。だから、ソフトの設計では、中身よりも、対人間部分を事前に検討することが大事なのでしょうね。<br>
プロの方にとっては当たり前なのでしょうけれども、私のような者がソフトを作ると、どうしても作者オリエンティッドな、ユーザーを考えないインタフェイスを作りがちなんですよね。<br>
<br>
こちらが処理しやすい入力をユーザー負担で求めてしまうのです。<br>
<br>
なんせ、<br>
<blockquote>
人間にとって使いやすい入力　→　コンピューターにとって扱いやすいパラメータ<br>
</blockquote>
というヒューマンインターフェイス部分は、プログラマにとって相当の負担だろうな、と思います。<br>
<br>
Qdmailは、そのコードの約半分を構造的には本筋ではない、ユーザーからの入力対処＆パラメータ分析に使っています。<br>
<br>
ユーザーがプログラマでない一般ユーザーの場合は、プロトタイプをなるべく早くリリースしてユーザーからのフィードバックを得るというのは、大事なのでしょうね。<br>
Qdmailは、対プログラマ相手なので、一般ユーザーほどシビアではないと思うのですが、それでもやはりライブラリとして統一感のあるインタフェイスを提供できているかというと、ちょっと反省点があります。<br>
<br>
<br>
私が品格なぞ語ってはいかんのですが。<br>
タイトルは「<a href="http://pha22.net/hotentry/">ホッテントリメーカー</a>」でいただきました。<br>
<br>
関連リンク<br>
<a href="http://www.shibaguchi.com/molip/">ファンクラブ</a><br>
<a href="http://www.coara.or.jp/~ramerika/morip.htm">使い方事例</a><br>
<a href="http://www.forest.impress.co.jp/lib/pic/piccam/paintptclr/molipdraw.html">窓の杜レビュー</a><br>

</div>

<hr>
<h4><a href="/tech/0156#c">■コメント（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
<h4><a href="/tech/0156#tb">■トラックバック（1件）</a></h4>
<div style="margin-left: 1em;">
<a href="http://www.cpa-lab.com/tech/0158" rel="nofollow">0.9.0になったQdmail</a> （CPA-LABテクニカル） by spok<br>
</div>
]]></description>
	</item>
	<item>
		<title>今の新参は昔のホッテントリを知らないから困る</title>
		<link>http://www.cpa-lab.com/tech/0155#tm1215944134</link>
		<guid>http://www.cpa-lab.com/tech/0155</guid>
		<category>未分類</category>
		<pubDate>Mon, 07 Jul 2008 12:51:59 GMT</pubDate>
		<author>spok</author>
		<description><![CDATA[<div class="section">
新参者のスポックです。<br>
はじめて知りましたホッテントリメーカー。すごくおもしろいです。。。<br>
<a href="http://pha22.net/hotentry/">ホッテントリメーカー</a><br>
<br>
このタイトルは、ホッテントリメーカーでいただきました。。。。<br>
<br>
<a href="http://hal456.net/qdmail/">qdmail</a>でやってみたら、、、、<br>
<ul>
	<li>文系のためのqdmail入門　46 users（推定）</li>
	<li>本当にヤバいqdmailの脆弱性3つ　5 users（推定）</li>
	<li>qdmailにありがちな事</li>
	<li>qdmail信者が絶対に言おうとしない３つのこと　10 users（推定）</li>
	<li>リア充がひた隠しにしているqdmail　15 users（推定）</li>
	<li>全てを貫く「qdmail」という恐怖　</li>
</ul>
<a href="http://hal456.net/">hal456</a>でやってみたら、、、<br>
<ul>
	<li>モンスターペアレントからの視点で読み解くhal456　532 users（推定）</li>
	<li>これは凄い! hal456を便利にする33のツール　9 users（推定）</li>
	<li>hal456で年収が10倍アップ</li>
</ul>
<br>
おもしろすぎます。<br>
Cake PHPで制作したそうで。。。。<br>

</div>

<hr>
<h4><a href="/tech/0155#c">■コメント（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
<h4><a href="/tech/0155#tb">■トラックバック（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
]]></description>
	</item>
	<item>
		<title>PHPでPOP受信サーバー操作</title>
		<link>http://www.cpa-lab.com/tech/0142#tm1215263225</link>
		<guid>http://www.cpa-lab.com/tech/0142</guid>
		<category>QdmailReceiver</category>
		<pubDate>Sat, 05 Jul 2008 13:07:05 GMT</pubDate>
		<author>spok</author>
		<description><![CDATA[<div class="section">
メールの受信(POP)サーバーの操作ライブラリ＆マルチバイトメールデコーダーのご紹介。<br>
<br>
<a href="http://hal456.net/qdmail_rec/">簡単受信サーバー操作ライブラリQdmailReceiver</a><br>
<a href="http://hal456.net/">hal456トップページ</a><br>
<h4><a href="http://www.cpa-lab.com/tech/0142#p0.1" name="p0.1" class="linkall"><span class="sanchor"></span>応用すれば、こんなことができます</a></h4>
<ul>
	<li>空メール処理</li>
	<li>ブログへのメール投稿</li>
	<li>Spamフィルター</li>
	<li>gmailライクなWEBメール</li>
</ul>
<br>
もちろん、QdmailReceiverは、メールを解析したり、ＰＯＰサーバーを操作するライブラリなので、上記のことをやろうと思えば、他に自分でプログラムを組まなくてはなりません。<br>
しかし、マルチバイト（日本語処理）やメールの解析処理は意外にやっかいなので、それをQdmailReceiverに任せていただければ、かなり労力半減することでしょう。<br>

</div>

<hr>
<h4><a href="/tech/0142#c">■コメント（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
<h4><a href="/tech/0142#tb">■トラックバック（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
]]></description>
	</item>
	<item>
		<title>CakePHP(RC1.2)のemailコンポーネントで日本語はまだ厳しい</title>
		<link>http://www.cpa-lab.com/tech/0141#tm1215038885</link>
		<guid>http://www.cpa-lab.com/tech/0141</guid>
		<category>cakephp</category>
		<pubDate>Wed, 02 Jul 2008 12:40:42 GMT</pubDate>
		<author>spok</author>
		<description><![CDATA[<div class="section">
<h3><a href="http://www.cpa-lab.com/tech/0141#p1" name="p1"><span class="sanchor">■</span></a>CakePHP(1.2RC2)のemailコンポーネント評価</h3>
CakePHP 1.2 RC2 がリリースされたので、新しいemailコンポーネントを評価してみた。全般的に言えば、改行コード＆英文周りはかなり改善されており、英語メールを送る分には、大丈夫かと思う。<br>
しかし、一部でマルチバイト非対応となっており、日本語の場合、若干の問題点がある。<br>
<ol>
	<li>Content-Transfer-Encoding:ヘッダーは7bit固定＆charsetはutf-8なので、charsetをiso-2022-jpに変更し、本文、ビュー、レイアウトのすべてを自前でiso-2022-jpに変換する必要がある。<span class="footnote"><a title="7bitなのに、8bitコードのUTF-8をデフォルトにするのはよくないです。。。" href="http://www.cpa-lab.com/tech/0141#fn1" name="n1">*1</a></span></li>
	<li>ワードラップ処理がマルチバイト非対応<br>
__wrapメソッドがマルチバイト非対応なので、文字化けする可能性が大きい。また、「<a href="http://www.cpa-lab.com/tech/0144" class="tag adiary-key" title="記事指定 ">日本語文字列のバイト数取得にstrlenだけではダメな理由-PHP</a>」でも述べたとおり、マルチバイト環境では、文字列のバイト数を得るのに、strlenだけを使うのは、問題がある。<br>
	</li>
	<li>MIMEエンコードが、マルチバイト文字の途中で強制改行される可能性のあるスクリプトとなっており、長いsubject＆Gmailやbeckeyでタイトルが文字化けする可能性が大きい。<span class="footnote"><a title="私もハマったところ" href="http://www.cpa-lab.com/tech/0141#fn2" name="n2">*2</a></span></li>
	<li>qmail用がデフォルト？<br>
mail関数で送る際には、MTAがqmailであればLF,qmail以外のsendmailやPostFixであれば、CRLFである必要があるが、LFがデフォルトとなっている。<br>
これはこれで賢いやり方で、CRLFをデフォルトにするとqmailの時にエラーがでるけれど、ＬＦがデフォルトであれば、sendmailやPostFixがエラーを出すことはないだろうからだ。<br>
	</li>
	<li>SMTP送信の場合、　名前＜address@example.com＞　の形式が使えず、＜address@example.com＞　というメールアドレスのみのヘッダーとなる。<br>
う～ん。どうしてこうしたのでしょうかね。<br>
	</li>
</ol>
<h4><a href="http://www.cpa-lab.com/tech/0141#p1.1" name="p1.1" class="linkall"><span class="sanchor"></span>その他の制約</a></h4>
<ul>
	<li>本文base64エンコードできない。</li>
	<li>Quoted-Printable非対応</li>
	<li>デコメ送信不可能<span class="footnote"><a title="これは仕方ないよね" href="http://www.cpa-lab.com/tech/0141#fn3" name="n3">*3</a></span></li>
	<li>MHTL(インラインHTML)メール不可</li>
	<li>添付ファイルの日本語不可</li>
</ul>
<br>
<h4><a href="http://www.cpa-lab.com/tech/0141#p1.2" name="p1.2" class="linkall"><span class="sanchor"></span>全般的な感想</a></h4>
相当がんばれば、デフォルトでも日本語は送れないことはないと思うけど、メールひとつ送るのに、がんばりたくないでしょ。<br>
<br>
う～ん。mb_send_mail単体のほうがましかな。<br>
<h4><a href="http://www.cpa-lab.com/tech/0141#p1.3" name="p1.3" class="linkall"><span class="sanchor"></span>Qdmailなら。。。。</a></h4>
<a href="http://hal456.net/qdmail/">高機能マルチバイトメールライブラリQdmail</a>なら、CakePHPのコンポーネントとしても動作します。<br>
上記のemailコンポーネントの弱点はすべて克服されておりますので、一度お試し下さい。<br>

</div>
<div class="footnote">
	<p class="footnote"><a href="http://www.cpa-lab.com/tech/0141#n1" name="fn1">*1</a> : 7bitなのに、8bitコードのUTF-8をデフォルトにするのはよくないです。。。</p>
	<p class="footnote"><a href="http://www.cpa-lab.com/tech/0141#n2" name="fn2">*2</a> : 私もハマったところ</p>
	<p class="footnote"><a href="http://www.cpa-lab.com/tech/0141#n3" name="fn3">*3</a> : これは仕方ないよね</p>
</div>

<hr>
<h4><a href="/tech/0141#c">■コメント（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
<h4><a href="/tech/0141#tb">■トラックバック（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
]]></description>
	</item>
	<item>
		<title>mb_encode_mimeheaderの都市伝説を検証する</title>
		<link>http://www.cpa-lab.com/tech/0153#tm1216308130</link>
		<guid>http://www.cpa-lab.com/tech/0153</guid>
		<category>php5</category>
		<pubDate>Tue, 01 Jul 2008 12:50:35 GMT</pubDate>
		<author>spok</author>
		<description><![CDATA[<div class="section">
<h3><a href="http://www.cpa-lab.com/tech/0153#p1" name="p1"><span class="sanchor">■</span></a>mb_encode_mimeheader都市伝説</h3>
mb_encode_mimeheaderは、なんか使いにくい。文字化けする。とあまり良い評判を聞きません。私も、「使うのはちょっと怖いな」と思っていました。しかし、mb_encode_mimeheaderは正しく設定すれば、きちんと働いてくれます。それを検証したいと思います。<br>
<h4><a href="http://www.cpa-lab.com/tech/0153#p1.1" name="p1.1" class="linkall"><span class="sanchor"></span>間違ったバッドノウハウ</a></h4>
mb_encode_mimeheaderの有名なバッドノウハウに<br>
<a href="http://www.akiyan.com/blog/archives/2006/03/phpmb_encode_mi.html">PHPmb_encode_mimeheaderは事前にmb_internal_encodingが必要-akiyan.com</a><br>
というのがあります。その中身は<br>
<blockquote>
PHPのmb_encode_mimeheader関数で文字列をエンコードするときは、直前にmb_internal_encoding関数で変換したい文字列のエンコーディングをセットしてから呼ばないとうまく動作しないもよう。エンコードした文字列の後ろのほうが化け化けになってしまう。<br>
</blockquote>
というものです。<br>
そして、<br>
<pre>
// 元のエンコーディングを保存
$orgEncoding = mb_internal_encoding();
// 変換したい文字列のエンコーディングをセット
mb_internal_encoding($targetEncoding); 
// エンコーディング実行
$encodedString  = mb_encode_mimeheader($targetString, $targetEncoding, 'B', "\n");
// 保存しておいたエンコーディングに戻す
mb_internal_encoding($orgEncoding); 
</pre>
というコードが掲載されています。<br>
それを検証しようとした、<br>
<a href="http://blog.poyo.jp/archives.php/categ-1/year-2006/month-3/id-1142267008">mb_internal_encoding()は必須か?」に対しての疑問と検証-よくきたblog</a><br>
というのもあります。<br>
<br>
しかしながら、このバッドノウハウは間違っており、検証した方も、残念ながら、検証になっていません。<br>
<h4><a href="http://www.cpa-lab.com/tech/0153#p1.2" name="p1.2" class="linkall"><span class="sanchor"></span>正しいバッドノウハウ</a></h4>
そこでPHP5.2.4のソースコードを読みつつ、動作検証をしてみました。<br>
その結果、mb_encode_mimeheaderを使う時の正しいバッドノウハウは、<br>
<blockquote>
mb_encode_mimeheaderに渡す文字列の文字コードとmb_internal_encodingは一致させておかなければならない。<br>
</blockquote>
というものです。<br>
必ずしも、最終のターゲットエンコーディングとmb_internal_encodingを一致させる必要はありません。<br>
ん、最初のノウハウと何が違うのかって？<br>
次章でよ～く考えてみましょう。<br>
<br>
<h4><a href="http://www.cpa-lab.com/tech/0153#p1.3" name="p1.3" class="linkall"><span class="sanchor"></span>結論から</a></h4>
文字コードが３つでてきますので、整理しましょう。<br>
<ol>
	<li>mb_internal_encodingの文字コード</li>
	<li>mb_encode_mimeheaderに渡す文字列の文字コード</li>
	<li>mime変換する最終文字コード</li>
</ol>
この中で、１と２が一致している必要があるだけであって、３は独立していてＯＫです。<br>
２→３の文字コード変換は、mb_encode_mimeheaderがきちんとやってくれます。<br>
<pre>
正しくいえば、mb_encode_mimeheaderは「２の文字コードは１と同じであるとして、１→３のパラメータでもって、２の文字列を変換」します。つまり、　

mb_convert_encoding($word,$target_encoding,mb_internal_encoding());

という動作が、mb_encode_mimeheaderには含まれています。
（特殊な条件の時のみ、無変換となる）
</pre>
間違っているバッドノウハウは、１と３を一致させようというもので、２についての言及がありません。偶然に２についても同じ文字コードであれば文字化けすることはないのですが、２が（１,３）と違うコードの場合、正しくエンコードされません。<br>
<blockquote>
1=2となるように、文字コードを設定しましょう。<br>
</blockquote>
（さらに、mb_languageもjaに設定しておけば間違いがありません。）<br>
<br>
本来は、mb_encode_mimeheader関数にて　2の「渡す文字列の文字コード」を指定できるような仕組みがあればいいのですが、残念ながらそうなっていません。<br>
１のmb_internal_encodingを指定することで、2の「渡す文字列の文字コード」を間接的に指定することになります。<br>
<h5>注</h5>
この結論は、下記テストコードと、PHP5.2.4本体のmb関係のソースを読んでのことですが、C言語のソースは私も理解できない部分もあり、結論が間違っている可能性もあるかも知れません。その際はご指摘いただければ幸いです。<br>
</div>

<div class="section">
<h3><a href="http://www.cpa-lab.com/tech/0153#p2" name="p2"><span class="sanchor">■</span></a>テストコード</h3>
<p class="seemore"><a class="seemore" href="http://www.cpa-lab.com/tech/0153#p2">続きを読む</a></p>
</div>

<div class="section">
<h3><a href="http://www.cpa-lab.com/tech/0153#p3" name="p3"><span class="sanchor">■</span></a>長文でテストしてみる。</h3>
<p class="seemore"><a class="seemore" href="http://www.cpa-lab.com/tech/0153#p3">続きを読む</a></p>
</div>

<div class="section">
<h3><a href="http://www.cpa-lab.com/tech/0153#p4" name="p4"><span class="sanchor">■</span></a>PHPの本体コードを読んでみる。</h3>
<p class="seemore"><a class="seemore" href="http://www.cpa-lab.com/tech/0153#p4">続きを読む</a></p>
</div>

<div class="section">
<h3><a href="http://www.cpa-lab.com/tech/0153#p5" name="p5"><span class="sanchor">■</span></a>WEB上の間違った情報（主なもの）</h3>
以下は、googleで、mb_encode_mimeheader のキーワードで検索した時に、比較的上位に出てくるページや、他に多く引用されているページにつき、私の見解を書いています。決して、けなしているわけではありません。ただ、私の得た結論が正しいとするならば、間違った情報をそのままにしておくと、また私のような無駄な時間を費やしてしまう人がでてくるであろう、という予測のもとに、「この情報は私が正しいと思う結論に対して、間違っている」ということを指摘するものです。<br>
PHPのバージョン違いによるものもあるかも知れません。私が検証したのはPHP5.2.4ですので、それより前のPHPでは挙動が違うのかも知れません。（一応、PHP4.4.7でもテストコードを動かしてみて、結論は変わらないという心証はえているのですが、4.4.7についてはPHPソースまでは読んでいません。）<br>
またPHP5.2.4であっても私の見解が間違っている可能性もあります。その際は、ご指摘いただければ幸いです。<br>
<br>
<ul>
	<li><a href="http://www.akiyan.com/blog/archives/2006/03/phpmb_encode_mi.html">PHPのmb_encode_mimeheaderは事前にmb_internal_encodingが必要-akiyan.com</a></li>
</ul>
この記事の冒頭で紹介したページです。1=3という間違った結論です。多くのWEBサイトがこのページを引用しています。この記事のバージョン5.1.2ではこうだったのでしょうか？<br>
<ul>
	<li><a href="http://blog.poyo.jp/archives.php/categ-1/year-2006/month-3/id-1142267008">mb_internal_encoding()は必須か?」に対しての疑問と検証-よくきたブログ</a></li>
</ul>
私と同様の疑問を持ち、akiyan.comさんの記事を検証しています。しかし、環境が、internal='euc-jp',input='utf-8',target='utf-8'では文字化け、internal='utf-8',input='utf-8',target='utf-8'で文字化けなし、ということを検証しているのみで、十分ではありません。<br>
<ul>
	<li><a href="http://www.lab.keiken.co.jp/xoops/modules/pukiwiki/77.html">phpでmb_encode_mimeheader()を使う際の注意点-ケイケンラボ</a></li>
</ul>
1=2=3と設定しないと文字化けする、という間違った情報です。丁寧に「mb_encode_mimeheader() ですが、文字コードの変換まではしてくれない為」と書かれていますが、これも間違いです。上のほうに書いたように、むしろ原則として、文字コードの変換をします。<br>
<br>
<ul>
	<li><a href="http://lists.sourceforge.jp/mailman/archives/tep-j-develop/2003-March/000133.html">Re: mb_encode_mimeheader() default encoding-Tep-j-develop</a></li>
</ul>
非常に有益なテストコードです。この記事の次の記事の方が<br>
<blockquote>
しかも、これらの結果が異なるんですね。<br>
mb_encode_mimeheader($str, 'ISO-2022-JP');<br>
mb_encode_mimeheader(mb_convert_encoding($str,'JIS','EUC'),'ISO-2022-JP');<br>
</blockquote>
と述べていらっしゃいますが、mb_internal_encoding('EUC-JP');なので、スクリプトをEUC-JPで保存していれば、上段は1=2となり正常稼働しますが、下段は1≠2なので当然文字化けします。もし、このスクリプトをUTF-8で保存して実行すれば、上段も文字化けするでしょう。<br>
また、<a href="http://lists.sourceforge.jp/mailman/archives/tep-j-develop/2003-March/000131.html">同じスレッド</a>で、<br>
<blockquote>
mb_encode_mimeheader 自体は、文字コードの変換はしてくれないと思っていたんですが。<br>
</blockquote>
という発言もありますが、このように思っている人は多いのではないでしょうか。<br>
繰り返しになりますが、原則として文字コードの変換がなされます。<br>
<br>
<ul>
	<li><a href="http://puchiko.lowtech.ne.jp/?itemid=1125&catid=26">mb_encode_mimeheader()の使い方-ぱんぴーまっしぐら</a></li>
</ul>
こちらは逆に、「mb_encode_mimeheader()に渡す文字列はISO-2022-JPに変換するな。」という結論を導いていらっしゃいますが、間違いです。最初のスクリプトが、１≠２になっているだけであり、2=iso-2022-jpとしているからではありません。しかも、次のスクリプトでは、1=2=iso-2022-jp と設定し、結果も正しいのに、「mb_encode_mimeheader()に渡す文字列はISO-2022-JPに変換するな。」というのは、論理的に正しくありません。mb_encode_mimeheader()に渡す文字列はISO-2022-JPに変換しても、１＝２を守る限り大丈夫です。<br>
<br>
<h5>正しい考察</h5>
<a href="http://d.hatena.ne.jp/ryuzi_kambe/20060517/p2">PHPのmb_encode_mimeheaderは事前に-ryuzi_kambe の？Ｄ</a><br>
こちらは、私と同じ結論です。そちらにも書いてある通り、mb_encode_mimeheaderに”from-encoding”を指定するパラメータがないのが、混乱のもとになっていると思います。<br>
<br>
<h5>混乱する考察</h5>
mb_encode_mimeheaderについては、そのソースコードのエンコードを書いていないスクリプトの場合、情報が不足するため混乱の元となります。mb_encode_mimeheaderに言及する多くのWEBサイトでは、ソースコードの文字コードに触れおらず、暗黙のうちにEUC-JPやShift_Jisが前提だったりします。<br>
おまけに、inputされる文字列の文字コードさえも記載のないページもあります。<br>
そのようなページはあまりに多いので、ここでの引用は省略します。<br>
<h4><a href="http://www.cpa-lab.com/tech/0153#p5.1" name="p5.1" class="linkall"><span class="sanchor"></span>開発者さま</a></h4>
ぜひ、このようなバッドノウハウをなくすために、mb_encode_mimeheaderにて、引数に渡す文字列のエンコードであるfrom-encodingを指定できるようにお願いいたします<span class="footnote"><a title="こういうのってどこに要望ださばいいのだろう" href="http://www.cpa-lab.com/tech/0153#fn2" name="n2">*2</a></span>。<br>
たったこれだけで、この大混乱を収束することができます。。。<br>
<br>
<br>
しかしながら、マルチバイト関係のPHP本体のソースをみると、すごく複雑です。c言語で、マルチバイトを自在に処理するのは至難の業ですね。mb_convet_encodingをおっかけると、あの組み合わせの多さに、それだけで萎えてしまいます。それに果敢に挑戦された開発者の方はすごいです。mb*関係に係わった関係者の方々に感謝と尊敬の意を表します。<br>
<br>
<br>
</div>
<div class="footnote">
	<p class="footnote"><a href="http://www.cpa-lab.com/tech/0153#n2" name="fn2">*2</a> : こういうのってどこに要望ださばいいのだろう</p>
</div>

<div class="section">
<h3><a href="http://www.cpa-lab.com/tech/0153#p6" name="p6"><span class="sanchor">■</span></a>覚書</h3>
<p class="seemore"><a class="seemore" href="http://www.cpa-lab.com/tech/0153#p6">続きを読む</a></p>
</div>

<hr>
<h4><a href="/tech/0153#c">■コメント（2件）</a></h4>
<div style="margin-left: 1em;">
ELF『よくきたblogな人ですが，私の件の記事は網羅性は高くないです． もっと細かいことを書いたものがありまして，「超・極める! PH...』(2008/07/15 17:01)</span><br>
spok『ELFさん はじめまして。プロの方からコメントをいただけて光栄です。 私の記事が間違っていなかったようで安心しております。 さっ...』(2008/07/17 24:22)</span><br>
</div>
<h4><a href="/tech/0153#tb">■トラックバック（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
]]></description>
	</item>
	<item>
		<title>PHPの日本語デフォルトコードはEUC-JP</title>
		<link>http://www.cpa-lab.com/tech/0154#tm1214916635</link>
		<guid>http://www.cpa-lab.com/tech/0154</guid>
		<category>未分類</category>
		<pubDate>Mon, 30 Jun 2008 15:27:30 GMT</pubDate>
		<author>spok</author>
		<description><![CDATA[<div class="section">
php.ini が<br>
<blockquote>
mbstring.language = Japanese<br>
</blockquote>
であり、かつ、mbstring.internal_encodingが未設定の場合、PHPは、mbstring.internal_encodingが、文字コードEUC-JPであるとみなして動作する。<span class="footnote"><a title="PHP5.2.4  PHP_RINIT_FUNCTION mbstring-mbstring.c " href="http://www.cpa-lab.com/tech/0154#fn1" name="n1">*1</a></span><br>
ちなみに、languageの設定さえない場合は、ISO-8859-1のようだ。<br>
<br>
時代は、UTF-8だと思いますので、UTF-8でソースコードを書く時には、<br>
<blockquote>
mbstring.internal_encoding　= UTF-8<br>
</blockquote>
を忘れずに。<br>
<h4><a href="http://www.cpa-lab.com/tech/0154#p0.1" name="p0.1" class="linkall"><span class="sanchor"></span>可搬性を重視した場合</a></h4>
他の環境でも動作させることを考えれば、これらの項目は、php.iniで設定するのでなく、自分のスクリプトの初期設定で行うほうがよい。だって、レンタルサーバーであれば、languageの設定がjapaneseと保証されているわけでもないし、文字コードもphp.iniでどう設定されているかは、千差万別（のはず）だからだ。<br>
よって、日本語のコードであれば、必ず初期設定スクリプトで、<br>
<blockquote>
mb_language( 'ja' );<br>
mb_internal_encoding( 'UTF-8' );<br>
</blockquote>
を設定しましょう。<br>
<h4><a href="http://www.cpa-lab.com/tech/0154#p0.2" name="p0.2" class="linkall"><span class="sanchor"></span>なぜ今？</a></h4>
何を当たり前のことをお思いでしょうけど、mbstring.internal_encodingを未設定、またはEUC-JPのままで、UTF-8でコードを書くと思わぬ誤動作が生まれる可能性がある、ということで。。。。次回に続く。<br>

</div>
<div class="footnote">
	<p class="footnote"><a href="http://www.cpa-lab.com/tech/0154#n1" name="fn1">*1</a> : PHP5.2.4  PHP_RINIT_FUNCTION mbstring-mbstring.c </p>
</div>

<hr>
<h4><a href="/tech/0154#c">■コメント（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
<h4><a href="/tech/0154#tb">■トラックバック（1件）</a></h4>
<div style="margin-left: 1em;">
<a href="http://www.cpa-lab.com/tech/0153" rel="nofollow">mb_encode_mimeheaderの都市伝説を検証する</a> （CPA-LABテクニカル） by spok<br>
</div>
]]></description>
	</item>
	<item>
		<title>SMTP送信を使うべき3つの理由-PHP</title>
		<link>http://www.cpa-lab.com/tech/0151#tm1214400096</link>
		<guid>http://www.cpa-lab.com/tech/0151</guid>
		<category>qdmail</category>
		<pubDate>Wed, 25 Jun 2008 13:06:01 GMT</pubDate>
		<author>spok</author>
		<description><![CDATA[<div class="section">
<h3><a href="http://www.cpa-lab.com/tech/0151#p1" name="p1"><span class="sanchor">■</span></a>さらば、mail,mb_send_mail関数</h3>
<p class="seemore"><a class="seemore" href="http://www.cpa-lab.com/tech/0151#p1">続きを読む</a></p>
</div>

<hr>
<h4><a href="/tech/0151#c">■コメント（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
<h4><a href="/tech/0151#tb">■トラックバック（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
]]></description>
	</item>
	<item>
		<title>mail関数(PHP)のハマりどころ</title>
		<link>http://www.cpa-lab.com/tech/0149#tm1214399161</link>
		<guid>http://www.cpa-lab.com/tech/0149</guid>
		<category>qdmail</category>
		<pubDate>Tue, 24 Jun 2008 15:12:41 GMT</pubDate>
		<author>spok</author>
		<description><![CDATA[<div class="section">
Qdmailは原則としてPHP標準のmail関数を使用している<span class="footnote"><a title="SMTP送信もできるけど" href="http://www.cpa-lab.com/tech/0149#fn1" name="n1">*1</a></span>。<br>
このPHPのmail関数は何かとクセがあり<span class="footnote"><a title="PHPのせいじゃない部分も多々あるけど" href="http://www.cpa-lab.com/tech/0149#fn2" name="n2">*2</a></span>、特に改行コードでは苦労させられた。<br>
<a href="http://www.php.net/manual/ja/function.mail.php">マニュアル(mail)</a>を熟読すれば、載っていることばかりだけど、今後のために整理しておく。<br>
<h4><a href="http://www.cpa-lab.com/tech/0149#p0.1" name="p0.1" class="linkall"><span class="sanchor"></span>改行コード</a></h4>
インターネットメールの世界では、改行コードは原則として、CRLFである。それは、<a href="http://www.puni.net/~mimori/rfc/rfc2822.txt">RFC2822</a>を参照されたい。SMTPサーバーに直接渡す時は、これでＯＫ。<br>
しかし、PHPのmail関数には時と場合により、LFで渡さなければならない時がある。<br>
特に、ヘッダーと本文の改行コードは分けて考える必要があるので、注意すること。<br>
<h5>mail関数の改行コード注意点</h5>
<ul>
	<li>本文の改行コードはLFで渡すこと<span class="footnote"><a title="PHPがCRLFに変換するようです。" href="http://www.cpa-lab.com/tech/0149#fn3" name="n3">*3</a></span>。</li>
	<li>ヘッダーの改行コードは、原則としてCRLFだが、MTA（送信サーバー）によっては、LFで渡さなければならない場合がある。現在、LFで渡さなくてはならないMTAは、qmailであることが判明しているが、他もあるかも知れない。qdmailとqmailをごちゃごちゃにしないよう留意を。</li>
</ul>
<h4><a href="http://www.cpa-lab.com/tech/0149#p0.2" name="p0.2" class="linkall"><span class="sanchor"></span>混乱しがちな点</a></h4>
本文はLF。<br>
subject以外のヘッダーはCRLFで渡さなくてはならないのが、面倒なところ。<br>
<br>
たぶんlinux,unix系のサーバーは、OS標準の改行コードがLFであることから、このようにしているように思うけど、それならヘッダーもLFで渡すようにすればいいのに。。。。<br>
<br>
こちら（<a href="http://blog.poyo.jp/archives.php/id-1139994430">PHPのmail()のできの悪さ-よくきたblog</a>）でもご指摘ありますが、ちょっと、その実装は。。。。<br>
<br>
<h4><a href="http://www.cpa-lab.com/tech/0149#p0.3" name="p0.3" class="linkall"><span class="sanchor"></span>Windows版の制限</a></h4>
<h5>to引数</h5>
Windows版のmail関数は、第1引数のtoでは、<br>
<pre>
name&lt;address@example.com&gt;
</pre>
が使えず、<br>
<pre>
address@example.com
</pre>
しか許されない。<br>
私の環境では、sendmaneというsendmailのラッパーを使わせていただいてるので、この制限はないけれど。<br>
<h6>ピリオドだけの行</h6>
PHP が SMTP サーバと直接通信をする際、ピリオドから 始まる行は無視されます<br>
<h5>FromとReturn-Path</h5>
Windows では、From ヘッダを設定すると Return-Path も設定されます。 <br>
<br>
<h4><a href="http://www.cpa-lab.com/tech/0149#p0.4" name="p0.4" class="linkall"><span class="sanchor"></span>送信サーバーがqmailかどうかの判別</a></h4>
Qdmail0.8.6aでは、ini_get('sendmail_path');でもってPHP.iniのsendmail_pathを読み取り、そこに、qmailという文字列があるかどうかで判別している。<br>
これだと誤判別もあり得るので、他にもっといい判別方法があったら、ぜひ教えて下さい。<br>
<h4><a href="http://www.cpa-lab.com/tech/0149#p0.5" name="p0.5" class="linkall"><span class="sanchor"></span>参考にさせていただいたサイト</a></h4>
<a href="http://ya.maya.st/mail/qmail-violations.html">qmail の RFC 違反</a><br>
<a href="http://blog.poyo.jp/archives.php/id-1139994430">PHPのmail()のできの悪さ-よくきたblog</a><br>

</div>
<div class="footnote">
	<p class="footnote"><a href="http://www.cpa-lab.com/tech/0149#n1" name="fn1">*1</a> : SMTP送信もできるけど</p>
	<p class="footnote"><a href="http://www.cpa-lab.com/tech/0149#n2" name="fn2">*2</a> : PHPのせいじゃない部分も多々あるけど</p>
	<p class="footnote"><a href="http://www.cpa-lab.com/tech/0149#n3" name="fn3">*3</a> : PHPがCRLFに変換するようです。</p>
</div>

<hr>
<h4><a href="/tech/0149#c">■コメント（0件）</a></h4>
<div style="margin-left: 1em;">
</div>
<h4><a href="/tech/0149#tb">■トラックバック（1件）</a></h4>
<div style="margin-left: 1em;">
<a href="http://www.cpa-lab.com/tech/0151" rel="nofollow">SMTP送信を使うべき3つの理由-PHP</a> （CPA-LABテクニカル） by spok<br>
</div>
]]></description>
	</item>
</channel>
</rss>
