ようこそゲストさん

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

関数型qd_send_mailの基本

関数型qd_send_mail()

mb_send_mail()ライクに指定できます。

基本構文
qd_send_mail(  'メールタイプ' ,
               'address@example.com',
               '件名',
               '本文',
               'from@example.com'
            );

'メールタイプ'

'メールタイプ'には、'text,'html,'deco'が入ります。
また、この第1引数を配列してオプションを渡すことができます。
オプションの詳しい方法については、オプションの指定方法をご覧下さい。

宛先、フロムに日本語を入れる場合

$to = array('address@example.com','宛先日本語');
$from = array('from@example.com','フロム日本語');

qd_send_mail( 'text' , $to , '題名ですsubject' , '本文' , $from );

添付ファイルを添付する場合

$to = array('address@example.com','宛先日本語');
$from = array('from@example.com','フロム日本語');
$attach = array('test.jpg','添付ファイル日本語名');

qd_send_mail( 'text' , $to , '題名ですsubject' , '本文' , $from , $attach);

複数の添付ファイルを添付する場合

$to = array('address@example.com','宛先日本語');
$from = array('from@example.com','フロム日本語');
$attach1 = array('test1.jpg','添付ファイル日本語名');
$attach2 = array('test2.jpg','添付ファイル日本語名');
$attach = array($attach1,$attach2);

qd_send_mail( 'text' , $to , '題名ですsubject' , '本文' , $from , $attach);

添付ファイルのMIMEタイプを明示的に指定する場合

(デフォルトでは拡張子から、適切なものが自動的につけられます)
$to = array('address@example.com','宛先日本語');
$from = array('from@example.com','フロム日本語');
$attach = array('test.jpg','添付ファイル日本語名',true,'image/jpeg');

qd_send_mail( 'text' , $to , '題名ですsubject' , '本文' , $from , $attach);

記事リスト

# kado 2009年01月06日(火) 午後5時20分

半角カナ文字をメール送信したところ、??????? となってしまいます。

以下の構成です。

$r_text = "カタカナカタカナ";
$r_sub = "テスト";
$mail1 = "test@test.com"

qd_send_mail('text', $mail1, $r_sub, $r_text, 'test@test.com');

# kado 2009年01月06日(火) 午後5時24分

半角カナ文字をメール送信したところ、??????? となってしまいます。

以下の構成です。

$r_text = "カタカナカタカナ";
$r_sub = "テスト";
$mail1 = "test@test.com"

qd_send_mail('text', $mail1, $r_sub, $r_text, 'test@test.com');

なにか解決策があれば教えて下さい。

# spok 2009年01月06日(火) 深夜1時18分

Qdmailをお使いいただきありがとうございます。

日本語メールで一般的であり、Qdmailデフォルトのキャラクタセットであるiso-2022-jpでは、半角カナをサポートしていないので、正しくできません。これはQdmailの制限ではなく、iso-2022-jpの制限です。どのメーラーを使ってもiso-2022-jpを使う限り、同じです。

半角カナを送りたい場合は、
http://hal456.net/qdmail/kana
をご参照下さい。

# spok 2009年01月06日(火) 深夜1時21分

これもおいておきます。
http://www.google.com/search?&num=100&hl=ja&q=%E3%83%A1%E3%83%BC%E3%83%AB+%E5%8D%8A%E8%A7%92%E3%82%AB%E3%83%8A&lr=lang_ja

# kado 2009年05月09日(土) 午前9時56分

Qdmail error: Qdmail Version 1.2.6b ,PHP Version 5.1.6
Qdmail error: OS Linux ; PHP Version 5.1.6 ; Qdmail version 1.2.6b
php.ini status: mb_language = Japanese ; mb_internal_encoding = EUC-JP ; mb_detect_order = ASCII,JIS,UTF-8,EUC-JP,SJIS
Qdmail Status debug: 0, log: 0, errorlog: 0
Qdmail error: Empty Body do not allowed. If you want to send empty Mail , use method -> bodyEmptyAllow(true) line -> 2583
Qdmail error: Error happen, see upper line -> 2194
Qdmail error: Send Error line -> 2115
Qdmail error: Qdmail Version 1.2.6b ,PHP Version 5.1.6
Qdmail error: OS Linux ; PHP Version 5.1.6 ; Qdmail version 1.2.6b
php.ini status: mb_language = Japanese ; mb_internal_encoding = EUC-JP ; mb_detect_order = ASCII,JIS,UTF-8,EUC-JP,SJIS
Qdmail Status debug: 0, log: 0, errorlog: 0
Qdmail error: Empty Body do not allowed. If you want to send empty Mail , use method -> bodyEmptyAllow(true) line -> 2583
Qdmail error: Error happen, see upper line -> 2194
Qdmail error: Send Error line -> 2115

上記のエラーはどのような時、発生するのでしょうか?
解決策も出来れば教えて下さい。

# t 2009年09月10日(木) 午後1時33分

いまさら返信ですが、

>Empty Body do not allowed.
本文が空ですよ。

>If you want to send empty Mail , use method -> bodyEmptyAllow(true) line -> 2583
空メールを送る場合は、2583行目をtrueにしてください。

と書いてあると思います。

# popoc 2009年09月26日(土) 午後11時26分

以下のソースを実行するとTimeoutが発生します。

<?php
require_once('qdmail.php');
qd_send_mail( 'text' , 'example@test.com' , '題名ですsubject' , '本文' , 'example@test.com' );
?>

この他、Qdmailインスタンスの作成($mail = & new Qdmail();)の際にもTimeoutが発生します。
手も足も出ない状況なのですが、どうかご助力お願いいたします。

Qdmailバージョン:1.2.6b
QdSmtpバージョン:0.2.0a
PHPのバージョン:4.0.6
OS:Windows2000Server + IIS 5.0
MTA:レンタルサーバーのため不明
ソースコードの文字コード、改行コード:ANSI CRLF


#  非公開コメント   
  • TB-URL  http://hal456.net/qdmail/042/tb/

特殊文字を送りたい(丸数字、はしご高など)

特殊文字、拡張文字と文字コードセット

はしご高(髙)や機種依存文字の①などの丸数値を送りたい時があるでしょう。
まずは、特殊文字と対応文字オードを示します。

参考:
文字コードの基本-IT Pro
文字コード規格の基礎-IT Pro
使ってはいけない文字(β版)
PHPで「髙(はしごたか)」「﨑(たつさき)」が文字化ける(2)-yossy.blog
文字コードの話
以下はあくまでもPHPの文字コードセット指定の場合です。
7bit8bit
iso-2022-jputf-8shift_JISsjis-wineuc-jpeucJP-win
IBM拡張文字(髙﨑黑神福など)××××
NEC拡張文字(①②㈱㌍ⅠⅡ伹侚など)×××
半角カナ×
ただし、上記で○だからといって文字化けしない訳ではなく、例えば、OutlookExpressは、eucJP-winのメールは正しく表示できないようです。gmail,秀丸メールはOKでした。このようにインターネットの中は正しく通っても、最後のメーラーで文字化けすることもあるようです。
また、-winとついている文字コードセットは、基本的にwindows用なので、Macでは文字化けすると思います(ただし、私はMacを持っていないのでテストしていません。Macにも-winの文字フォントが入っていればたぶん表示できるでしょう)。

特殊文字をメールで送信する時の文字コードセットと本文エンコード

文字コードセット :UTF-8
本文エンコード指定:Base64
具体的な手続としては、QdmailでのUTF-8,BASE64の指定方法をご参照下さい。

ただし、au携帯の一部では、UTF-8のヘッダーをデコードできない場合があります。
その時は、ヘッダーはiso-2022-jp(特殊文字は使えないけど)、本文はUTF-8(特殊文字が使える)というのはいかがでしょう。

このヘッダーと本文の文字セットを変える方法は、「ヘッダ、本文に別々のCharsetを指定する 」をご参照ください。

どうして本文エンコードは、base64なのか?

そして、UTF-8 + 8bit という指定もあり得るのですが、現状では、 8bit を受け付けないSMTPサーバーもある以上、文字化けのリスクは残ります。貴方の環境でうまくいっても、他の人に送信した場合に文字化けするかも知れません。

一方で、base64エンコードであれば、SMTPサーバーはもちろん大丈夫、クライアントであるメーラーも、対応していないメーラーは珍しい部類かと思います。

単純に言いましょう
組み合わせ規格(RFC1652-MIME)*1的にSMTPサーバー対応メーラー
文字コードセット :UTF-8
本文エンコード指定:7bit
間違っている*2--
文字コードセット :UTF-8
本文エンコード指定:8bit
正しい対応していないサーバーもあるauの古い携帯では未対応らしい
文字コードセット :UTF-8
本文エンコード指定:Base64
正しいすべて大丈夫auの古い携帯では未対応らしい

特殊文字を送るのは UTF-8 + Base64 が最もお薦めです。

インターネットメールの世界はまだまだ7bit

7bitである、iso-2022-jp,utf-7などは、本文エンコードを7bitにして送信することができますが、本文エンコード8bitで送らなければならない8bit文字コードセットは、まだまだ対応していないSMTPサーバーがあるようで、そのまま送信するのは、お薦めできません。
8bit文字コードセットを送信する場合には、本文をbase64エンコードして送るのがよいでしょう。
Base64エンコードとは、8bitの文字コードセット*3を、6bitにするエンコード方式なので、インターネット経路上は絶対に安全なのです。

インターネット経路上は安全であっても、受け取った人のメーラーがBase64に未対応の場合には、文字化けしますが、古いau端末以外はまず大丈夫だと思います。

それにしても、auは、デコメも特殊だし、utf-8対応は不完全だし、どうにもわがまま?なキャリアですね。

UTF-8 か Shift-JISか

私としては、国内ローカルのShift-JISよりも、全世界共通のUTF-8がいいと思います。海外在住の日本人の人が、Shift-JIS対応の端末を入手できるかどうかわからないからです。
一方で、国内の携帯端末のほんの一部は、UTF-8に対応していないのもあるようなので、難しいところです。

特殊文字は使わないのが一番

確かに、特殊文字を使わないのが一番いいです。しかし、WEBサービスではそうも言ってられない場合もあるでしょうね。。。。
でも、現状ではやっぱり、特殊文字を送らない方策を探るのが、もっともトラブルが少ないような気がします。

*1 : RFC1428等も

*2 : CakePHP1.2RC2はこれなんだよな~

*3 : 別に8bitでなくても、文字コードセットでなくてもいいのだけれど


#  非公開コメント   
  • TB-URL  http://hal456.net/qdmail/041/tb/