ようこそゲストさん

Qdmail - PHP::Mail Library , Quick and Detailed for Multibyte

半角カナの送信

インターネットの日本語メールでは半角カナは使わないのが一般的です。
なぜなら、文字セット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 : ソースコード内を変数名で検索してください。

# レポーター 2011年01月05日(水) 深夜3時31分

半角カナを含むデコメ送信に関してです。
1.2.6bで確認しましたが、1の方法のまとめではダメでした。
$mail -> charsetBody( 'utf-8' , 'base64' ) ;
こちらで設定した内容がmakeContentText関数で反映されていないようです。
(配布物にはそもそもこちらの設定が反映されていないバグがあるのでは…?)

1.2.6bでの対処方法としては、
キャリア別でエンコーディングを変更する場合は$deco_defを書き換えるのが手っ取り早いですが、
QdmailBase::html()を呼び出す際に下記のような形にしても対応可能です。
$mail->html($body, 'utf-8', 'base64');

手元の端末でしか試しておりませんが、
AUに関しては本文もSJIS & 7bitでないと全角になってしまうようです。

また、$mail -> kana(true);は必要ありませんでした。


#  非公開コメント   
  • TB-URL  http://hal456.net/qdmail/031/tb/
  • qdmailから機種依存文字を送信する HAPPY*TRAP
    qdmailで機種依存文字を送信する場合は、本文を UTF-8 , BASE64にエンコードにします。※$mailは、qdmailのインスタンスです。$mail->charsetBody( 'utf-8' , 'base64' ) ;半角カナも処理し...