半角カナの送信

2008/06/23 未分類 spok
インターネットの日本語メールでは半角カナは使わないのが一般的です。
なぜなら、文字セットiso-2022-jpでは半角カナをサポートしていないからです。

しかし、それでも半角カナを送りたい場合もあるでしょう。以下の方法を試して下さい。
  1. 本文を UTF-8 , BASE64 エンコードにする。参考 参考2
  2. mb_convert_kanaを使ってQdmailに渡す前にユーザーで対処する。mb_convert_kana-PHPマニュアル
  3. Qdmail0.8.7a以降を$mail->kana(true);モードで使う。または、Qdmailソースコードのvar $kana = false; を var $kana = true;に変更して使う。
1の方法は、悪くありません。他の言語やら、機種依存文字でもなんでもOKです。(のはずです)。この場合、UTF-8 & BASE64 にしてください。UTF-8のみ、または、iso-2022-jp & BASE64 では、たぶん文字化けします。
ただし、ヘッダーもUTF-8にした場合、au携帯の一部の端末では対応していないため文字化けするかも知れません。(件名や宛先等。)
UTF-8 & BASE64 であれば、下記の$kana = true;にする必要はありません。半角カナをそのまま送信できます。
もっとも一部のau機種対策としては、 「本文はUTF-8 + BASE64」「ヘッダーはiso-2022-jpで、$kana = true」とするのが、最強かと思います。


2の方法も悪くありません。半角カナを、全角カナに変換するようにするのです*1
ただし、mb_convert_kanaは、濁点も一文字として数えますので、スペックは、「スペック」でなく「スヘ゜ック」となってしまいます。(この問題は、0.8.8aにて解消の予定です。)


3の方法も悪くはありませんが、2と同じ問題点は残っています。また、半角カナは解決しても、機種依存文字は、これだけは解決しないでしょう*2
Qdmailで対応させる場合には、下記のようにします。
$mailには、Qdmailのインスタンス(オブジェクト)が入っているものとします。
$mail->kana(true);
qd_easy* を使用している場合には、ソースコードを以下のように変えて下さい。
エディタなどで、「$kana」を検索し、$kanaの定義部分を変更します。
var $kana = true;
var $kana = true;をデフォルトにしようかとも考えたのですが、以下の点で見送りました。
  • mb_convert_kana関数の他の言語体系への影響がよくわからない(マニュアルには日本語しか使えないと記載があるが、他の言語が混ざった場合のことに言及していない)
これが解決すれば、いつかデフォルトでtrueにするかも知れません。

1の方法のまとめ

本文UTF-8 + BASE64 , ヘッダーはiso-2022-jpで、$kana = ture にするには、以下のようにします。
OOP方式で送信している場合
$mail -> charsetBody( 'utf-8' , 'base64' ) ;
$mail -> kana(true);
Qdmailソースコード改変で対応する場合
下記のように変数定義を変更してください*3
var $charset_content = 'utf-8';

var $content_transfer_enc_text	= 'base64';
var $content_transfer_enc_html	= 'base64';

var $kana = true;

*1 : したがって、半角カナを送信できるわけではありません

*2 : 機種依存文字対策は、UTF-8+BASE64が最強です。

*3 : ソースコード内を変数名で検索してください。