続2Zend_Mailで日本語本文が文字化け

昨日書いた対処により、Mac OS9 Outlook Expressでは化けなくなったが、
他のメーラーではまだ化けることがあるようでした。

そんなときに、会社のメールサーバ等に詳しい方から情報をもらいました。
日本語メールの本文のエンコーディングは、7bitでないといけないということを。
メールヘッダのContent-Transfer-Encodingの部分です。

というわけで早速変更してみました。
以前、Zend_Mime::ENCODING_BASE64としていた部分を、
Zend_Mime::ENCODING_7BITに変更です。

$mail = new Zend_Mail(‘ISO-2022-JP’);

$mail->setBodyText($text, null, Zend_Mime::ENCODING_7BIT);

これで、文字化け問題から解放されることを望みます。
また新たなメーラーで問題がおこりませんよーにー。

続Zend_Mailで日本語本文が文字化け

以前https://life.co-hey.com/2008/09/zend-mail-6.htmlという記事を書きましたが、的外れだった可能性がでてきました。

メールヘッダーがbase64になっていたのに、printableで送信していたため、
この対処を入れて様子を見ていたのですが、まだ文字化けする場合がありました。

Mac OS9で、Outlook Expressをの場合に文字化けする現象がでました。
いろいろ試したところ、以下の対処で文字化けしなくなりました。

$mail = new Zend_Mail(‘ISO-2022-JP’);
$mail->setBodyText($text):

上記のように、base64の指定をしない形に戻す。

次に、メール本文の最後に改行を入れる。

これでMac OS9 Outlook Expressでも文字化けしなくなりました。
誤った情報を書いてしまったことをお詫び致します。

ユニクロの実力

最近、ユニクロでちょうどいいサイズのスリムストレートデニムを買った。

これまではブーツカットとか、ゆるめのストレートのみだったので、
スリムストレートは初めて。でも、とてもいい。

リーバイスとかに比べると、生地は薄めでしっかり感はないけど、
履き心地はいいし、薄い分洗濯した後も乾きが早い。

しかも、4000円弱というお値打ち価格。よくて安いのはかなり強力。
消耗品の部類に入るデニムならなおさら、そこは魅力的。

ファッション業界にいる友達の話によると、ユニクロは価格帯から考えると
とても他社が真似できないようないい生地を使っていることは有名だそうだ。

大量生産による恩恵なのか、理由はよくわからないけれど、
安かろう悪かろうというイメージは必要なさそうだ。
最先端って感じのものはないし、そういうものをユニクロに求める人はいないだろう。

ベーシックなラインのもの、時々やるデザイナーとのコラボ商品。
これらは、少なくともチェックする価値はありそうだ。

Zend_Mailで日本語本文が文字化け

今回、メーラーによっては、日本語の本文が文字化けするという現象を確認。

調査したところ、通常、本文はPrintableでエンコードされて送信されていました。
なので、ここをbase64にてエンコードするように修正して解決。

$mail = new Zend_Mail(‘ISO-2022-JP’);

$mail->setBodyText($text):

と書いていた部分を以下のようにエンコード形式を指定して設定します。

$mail = new Zend_Mail(‘ISO-2022-JP’);

$mail->setBodyText($text, null, Zend_Mime::ENCODING_BASE64);

文字化けってほんとやっかいです。

MySQLでの発見

select
  t1.column_a,
  t2.column_b
from
  table_a as t1
    left join table_b as t2 on (t1.hoge = t2.hoge and t2.make_date <= 'xxxx')
where
  t2.column_b is null

こんな感じで、left joinしたテーブルに対しての条件を、
更にwhere句で追加できるとは知らなかったです。
勝手にできないものだと思っていました。

この場合、t2.column_bがnullではないものは、left join on で指定してしまえばOKなのですが、
nullの場合、カラムの値がnullでなくても、make_dateの条件に合致しなければ、nullが
取得されるので、今までは取得結果をループで回してnull以外のデータをはじいてました。

これで、無駄なソースが減る場所がいくつかあったので、メモです。