ようこそゲストさん

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

サポート

作者は、操作に関する質問はメールでは受け付けていません。
質問のある方、動作・バグ報告などはこのエントリーまたは関連する記事にコメントをつけることで行って下さい。ただし、作者の都合により、その質問には回答が寄せられないことがあります。

ご意見、感想も大歓迎です。というか感想聞きたいです。
質問の前にこちらの、トラブル時に試してみること、をお試し下さい。
なお、質問の際には、下記情報をお教えいただければ、解決の可能性が高くなります。
■Qdmailバージョン
■QdSmtpバージョン
■PHPのバージョン
■OS名称 & バージョン
■MTAの種類(sendmailかPostfixかqmailか)
■お使いのソースコード(公開されて支障がある部分は適当に変更してください。)
■ソースコードの文字コード、改行コード
■デバッグモード http://hal456.net/qdmail/debug での出力内容
なお、PHPのmail関数は問題が多いです。
mail関数でダメなときは、SMTP送信をお試し下さい。


操作に関する質問以外で、作者に連絡を取りたい場合は、プロフィール&連絡先をご覧下さい

記事リスト

# spok 2008年10月24日(金) 午後11時09分

サポートの過去ログは、
http://hal456.net/qdmail/support_past_1
http://hal456.net/qdmail/support_past_2
http://hal456.net/qdmail/support_past_3
に移動しました。

# kt 2008年10月25日(土) 深夜0時25分

qdmailを設置しているメールサーバがPostfixで、VERPという形式を利用したいと思っています。
http://www.postfix-jp.info/trans-2.1/jhtml/VERP_README.html

通常のsendmailでの送信の場合は
optionのmtaOptionに"-V+= -f bounce"というように指定すればVERP形式で送信されました。

SMTP送信の場合、
「MAIL FROM:<sender@domain> XVERP」
このような指定をしなければいけないのですが、qdmailのsmtpの設定で
'from'=>'home@domain VERP'

としても
QdSmtp error: Error :status501 message:501 Bad address syntax on MAIL FROM:<hoge@domain VERP>

というエラーメッセージが表示され、メッセージを見ると<>中にVERPが記述されています。

<>の外に追記したい場合、どのように記述すれば良いのでしょうか?

# spok 2008年10月25日(土) 深夜1時10分

VERPの機能は知りませんでした。情報ありがとうございます。
Qdsmtpを2.0.0a以降にバージョンアップし、
http://hal456.net/qdsmtp/xverp
を参考にSMTPのパラメータを指定してみていただけますでしょうか。
当方はsendmail環境なので、動作の結果をお教えいただければ幸いです。

# kt 2008年10月26日(日) 午後5時27分

更新していただきありがとうございます。

ただ、以下のようなエラーが出ます。

QdSmtp error: Unkown Error :status555 message:555 Unsupported option: XVERP on MAIL FROM:<from@example.com> XVERP
line -> 562
QdSmtp error: Error From setting line -> 488
QdSmtp error: Send Data Error or Auth Error line -> 415
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 = UTF-8 ; mb_detect_order = ASCII,JIS,UTF-8,EUC-JP,SJIS
Qdmail Status debug: 0, log: 0, errorlog: 0
Qdmail error: No send . Because SMTP mail method replied error line -> 2190
Qdmail error: Error 'TO' Separate mode in Sendbase function , the Address is -> to@example.com line -> 2096
Qdmail error: Send Error line -> 2115


送信方法はqd_send_mailです。XVERPの設定をしない場合は、送信出来たので
こちらのソースには問題ないかと思います。

お手数ですが、再度お願いします。

# spok 2008年10月26日(日) 午後7時33分

推測ですが、555のエラーということは、そのSMTPサーバーは、VERPをサポートしていないということ思います。

そのSMTPサーバーは、sendmailコマンドでVERPを使ったのと同じlocalhostのサーバーでしょうか?
そうだとすると外部向けには、VERPを使えないようにしているということかと思います。



レンタルサーバーのXserverにて試してみましたが(PostFix)、ログをみると、そもそもVERPはサポートしていませんでした。

SMTPのログをとってみていただき、EHLOコマンドの後にVERPがあるかどうかをみていただければ、そのサーバーがVERPをサポートしているかどうかわかるかと思います。


Xserverの例)(VERPは含まれていない)

QdSmtp EHLO ****.****.jp
Server 220 sv****.****.jp ESMTP Postfix
Server 250-sv****.****.jp
Server 250-PIPELINING
Server 250-SIZE 102400000
Server 250-VRFY
Server 250-ETRN
Server 250-STARTTLS
Server 250-AUTH LOGIN PLAIN
Server 250-AUTH=LOGIN PLAIN
Server 250 8BITMIME
以下、略。


こちらのログでは、正しく命令はセットされているものの、相手から、
Unsupported option
としてエラーが返ってきています。

繋いでいるサーバーが、VERPをサポートしているにもかかわらず、エラーになる場合はお手数ですが、再度ご連絡ください。

# spok 2008年10月26日(日) 午後7時35分

SMTPのログは以下のようにしてとることができます。出力されたログには、メールアドレス等の情報が記載されていますので、注意してください。

$option = array(
'type' => 'text',
'smtp' => $param,
'option'=>array(
'logLevel'=>2,
'errorlogLevel'=>2,
'smtpLoglevelLink'=>true,
),

これは、Qdmailのログレベルを2に設定し、それと同じレベルのログをとるよう、Qdsmtpに命令する方法です。

# kt 2008年10月26日(日) 午後8時44分

>そのSMTPサーバーは、sendmailコマンドでVERPを使ったのと同じlocalhostのサーバーでしょうか?

同じサーバです。自宅サーバなので、VERPを使えるのは確認しました。

エラーログの件ですが、上記に記載していただいたoptionの指定をして実行し、qdsmtp_error.logには以下のように記載されています。(※メールアドレスの箇所は省きました)

2008-10-26 20:40:03
QdSmtp error: Unkown Error :status555 message:555 Unsupported option: XVERP on MAIL FROM: XVERP
line -> 562
2008-10-26 20:40:03
QdSmtp error: Error From setting line -> 488
2008-10-26 20:40:03
QdSmtp error: Send Data Error or Auth Error line -> 415

もし、こちらのログを取る設定方法がおかしければ、再度ご指摘いただければと思います。よろしくお願いします。

# spok 2008年10月26日(日) 午後9時04分

たびたびすいません。エラーログでなく、qdsmtp.logのEHLO以下をご確認いただだき、

Server 250-VERP (またはXVERP)

という表記があれば、VERPが使用可能ということになりますが、これの表記をご確認ください。

>VERPを使えるのは確認しました
とのことですが、どのように確認されましたでしょうか?

PostFixのsendmailコマンドで使用可能であっても、SMTPサーバーとしては使用不可能な設定もあるかと思います。

私自身はPostFixは詳しいわけではないのですが、例えば、「PostFix詳解(オーム社、荒木靖宏著)」P288-290によると、XVERPのネットワークの制限(authorized_verp_clients)などの指摘もあります。

この場合、お使いのQdmail&Qdsmtpの環境で確実にVERPが使えるかどうかは、qdsmtp.logの、EHLO以降のログを確認するのがもっとも手っ取り早いと思います。

# kt 2008年10月26日(日) 午後10時14分

sendmail形式で送信されていたのと、Postfixのバージョンを満たしているので「SMTP送信でもVERPが使える」と思っていました。

ただ、私もPostfixについてそれほど詳しいわけではありませんので、明確な確認方法は提示出来ません。

また、qdsmtp.logを見ると
>Server 555 Unsupported option: XVERP

というメッセージがあるのですが、サポートされていないみたいですね。

とりあえず現時点ではPostfixの設定をどのように変更してSMTP送信されるように有効化するかわかりかねます。質問しておいて申し訳ないのですが、今後出来るようになりましたら、御報告させていただきます。

# spok 2008年10月26日(日) 午後11時40分

http://www.postfix-jp.info/trans-2.1/jhtml/postconf.5.html
のページで、authorized_verp_clientsがついたオプションをみるとヒントがあると思います。
たぶんデフォルトでは、外部からの接続に対しては、VERPは開放していないと思いますので、PHPスクリプトが置いてあるドメインなどを登録するようにすればいいような気がします(気がするだけ)。

# spok 2008年10月26日(日) 午後11時44分

authorized_verp_clientsかsmtpd_authorized_verp_clientsですね。
PostFixのバージョンによって異なるようです。
「デフォルトでは、どのクライアントも XVERP を指定することはできません。」
とあるので、明確にドメインやIPアドレスで指定してあげないとダメみたいですね。

# kt 2008年10月27日(月) 午後4時36分

コメントありがとうございます。

こちらのテスト環境のPostfixは2.2.10なんですが、
main.cfに以下の記述を追記したところ、SMTP送信でVERPが反映されました。

smtpd_authorized_verp_clients = $mynetworks

とりあえず御報告させていただきました。

# spok 2008年10月27日(月) 午後6時04分

ご報告ありがとうございました。
動作するようになってよかったです。

# FK 2008年10月28日(火) 深夜2時33分

はじめまして。
Qdmail + QdmailReceiver を使用するために勉強させていただいています。

Docomoの906からデコメにflashが使えるようになったようですが、Content-IDを取得することができません。

gif/jpegの場合は

--mimemk00
Content-Type: image/gif;
name="ikari_l_a_01.gif"
Content-Transfer-Encoding: base64
Content-ID: <02@081029.021115@__N906imyu@docomo.ne.jp>

と取得できるのですが、

flashの場合は

--mimemk00
Content-Type: application/x-shockwave-flash;
name="event01.swf"
Content-Transfer-Encoding: base64

というように、Content-IDがでてきません。

Flashは対応していないのでしょうか・・・。
それとも、設置面でなにか不備があるのでしょうか。

ただ、HTML部には
--mimemk01
Content-Type: text/html; charset="iso-2022-jp"
Content-Transfer-Encoding: quoted-printable

<HTML><HEAD><META http-equiv=3D"Content-Type" content=3D"text/html; charset=
=3Diso-2022-jp"></HEAD><BODY><DIV><OBJECT data=3D"cid:01@081029.021115@__N9=
06imyu@docomo.ne.jp" type=3D"application/x-shockwave-flash"></OBJECT></DIV>=
<DIV><IMG src=3D"cid:02@081029.021115@__N906imyu@docomo.ne.jp"></DIV><DIV>=
=1B$B$L$R$+$J$d=1B(B</DIV><DIV><IMG src=3D"cid:03@081029.021115@__N906imyu@=
docomo.ne.jp"></DIV><DIV><A href=3D"http://www.caba2.cc/">http://www.caba2.=
cc/</A></DIV><DIV> </DIV></BODY></HTML>
--mimemk01--

と出てきます。


使い方は
携帯メールからpostfixを使ってデコメをプログラムに渡し、

$body = $DECODE -> bodyAutoSelect();

で、情報を取得するという使い方をしています。

お忙しいとは思いますが、どうか教えてください。
よろしくお願いします。

# spok 2008年10月29日(水) 午後10時43分


FKさん

現象を確認いたしました。次回更新にて対応したいと思います。
flash というよりも、OBJECT data 形式に未対応ということです。

ちょっと本業多忙中でして、そのうちに対応したいと思います。

# FK 2008年10月29日(水) 深夜0時22分

早速の返信ありがとうございます。

906シリーズがかなり多くなっており、実際インラインで使うflashもgif/jpgの違いもわからない人ばかりなので・・・。

お忙しいとは思いますが、よろしくお願いいたします!

# kt 2008年10月30日(木) 午後5時41分

QdSmtpの事で気になった事があります。(書く場所を間違っていたらすみません)

存在しないメールアドレスを指定すると以下のようなエラーメッセージが表示されます。

QdSmtp error: Failure :status553 message:553 5.3.0 <aaa@domain>... Recipient is not local (2) on RCPT TO:<aaa@domain>
line -> 551
QdSmtp error: Error RCPT setting line -> 497
QdSmtp error: Error :status503 message:503 5.0.0 Need RCPT (recipient) on DATA
line -> 554
QdSmtp error: Error Data sending line -> 510
QdSmtp error: Send Data Error or Auth Error line -> 415
Qdmail error: Qdmail Version 1.2.6b ,PHP Version 5.2.0
Qdmail error: OS WINNT ; PHP Version 5.2.0 ; Qdmail version 1.2.6b
php.ini status: mb_language = Japanese ; mb_internal_encoding = UTF-8 ; mb_detect_order = ASCII,JIS,UTF-8,EUC-JP,SJIS
Qdmail Status debug: 0, log: 0, errorlog: 0
Qdmail error: No send . Because SMTP mail method replied error line -> 2190
Qdmail error: Error 'TO' Separate mode in Sendbase function , the Address is -> aaa@domain line -> 2096
Qdmail error: Send Error line -> 2115


これは宛先のメールサーバにアクセスして、メールアドレスの存在を調べているのでしょうか?

# spok 2008年10月30日(木) 午後7時22分

>これは宛先のメールサーバにアクセスして、メールアドレスの存在を調べているのでしょうか?
違うと思います。

# kt 2008年10月30日(木) 午後8時28分

そうですか。存在するメールアドレスを指定したら出ないエラーだったので、そう言う事がQdmailとQdsmtpで出来るのかと思いました。

# spok 2008年10月30日(木) 午後10時37分

これは送信SMTPサーバーが返すエラーです。

# yuipapa 2008年11月01日(土) 午後5時38分

いつもおせわになっております。

初めて、質問させていただきます。
関数型のQdmailを使用し、メール送信をしているのですが、
他のサイトでは、全く問題なく使用できていたのですが、
なぜか、メール本文に、
Message-Id: <Qdmail.1.2.5b_f7d9f800cc19851c4296522dc78074ac25fef0da@hal456.net>

Content-Type: text/plain; charset="iso-2022-jp"

Content-Transfer-Encoding: 7bit

MIME-Version: 1.0

X-PHP-Qdmail: version-1.2.5b The_MIT_License http://hal456.net/qdmail PHPver 4.3.9

send-by MailFunction
Date: Sat, 1 Nov 2008 17:23:56 +0900 (JST)

と、いうようにヘッダー情報が混入してしまいます。
どこか設定を、間違えているのでしょうか。
ご指摘いただけると幸いです。

■Qdmailバージョン(1.2.6b)
■PHPのバージョン(4.3.9)
■MTAの種類(sendmailかPostfixかqmailか)
■お使いのソースコード


$to = array(HONSYA_MAIL_ADDR,"本社担当");
$from = array( $email, $name."様" );
$subject = "お客様からのお問い合わせ";
$mailbody = $name." 様\r\n\r\n";
$mailbody .="お問い合わせ内容:\r\n".$body."\r\n";

qd_send_mail( $option, $to, $subject, $mailbody, $from );

■ソースコードの文字コード(SJIS)、改行コード(CRLF)

# spok 2008年11月01日(土) 午後7時57分

MTAがqmailの可能性があります。つまり、CRLFをMTAが勝手にCRCRLFに変更してしまうことが原因と考えられます。
http://hal456.net/qdmail/trouble_4
を参考に、改行コードをLFのみにしてみてください。

# yuipapa 2008年11月01日(土) 深夜0時08分

http://hal456.net/qdmail/trouble_4
を参考に、改行コードを変更してみましたが、結果は同じでした。
他に考えられる原因は、ありますか。

# yuipap 2008年11月01日(土) 深夜0時22分

//$subject = mb_decode_mimeheader($subject);
$option =

array(
array( 'type'=>'text' ),
array( 'option'=> array(
'lineFeed'=>"\n",
)
),
);
qd_send_mail( $option, 'yuipapa@virtualbrain.com', "TEST", "TEST", "yuipapa@virtualbrain.com" );

で送信テストを行ってみましたが、
Message-Id: <Qdmail.1.2.5b_5ab4948fd375629eb244a5e03c8c563ea8cc27e6@hal456.net>
Content-Type: text/plain; charset="iso-2022-jp"
Content-Transfer-Encoding: 7bit
MIME-Version: 1.0
X-PHP-Qdmail: version-1.2.5b The_MIT_License http://hal456.net/qdmail PHPver 4.3.9
send-by MailFunction
Date: Sun, 2 Nov 2008 00:18:57 +0900 (JST)

TEST
と、ヘッダーが、本文に付加されてメールが届いてしまいます。

# spok 2008年11月02日(日) 午前6時17分

array(
'type'=>'html' ,
'option'=> array(
'lineFeed'=>"\n",
),
);
としてみてください。

# spok 2008年11月02日(日) 午前6時18分

マニュアルの記載が間違っておりましたので修正しておきました。

# yuipapa 2008年11月02日(日) 午後5時33分

ありがとうございました。
解決しました。qdmailは、qmilと相性が悪いのでしょうか。
(ご指摘の通り、問題のサイトはqmalでした)

# kt 2008年11月02日(日) 午後8時08分

いつもお世話になっております。

Qdmailの動作で気になる箇所があったので、デバッグモードで調べたく思い、
http://hal456.net/qdmail/debugを参考に
qd_send_mail('text','宛先メールアドレス',$subject,$body,'差出人メールアドレス',2)
としました。

しかし、以下のようなエラーが出ます。

Warning: reset() [function.reset]: Passed variable is not an array or object in /home/test/public_html/lib/qdmail/qdmail.php on line 2883
Qdmail error: No attach file '' line->3036
Qdmail error: Error happen, see upper line -> 2194
Qdmail error: Send Error line -> 2115

添付ファイルがありませんというようなエラーに見えるのですが、
添付ファイルを送信しようとしていません。

これは何が原因でしょうか?お手数おかけしますが、ご意見いただければと思います。
バージョンは最新のものを使っています。

# spok 2008年11月02日(日) 深夜0時26分


ktさん

マニュアルの記載が間違っていました。
qd_send_mail( 'メールタイプ' ,
'address@example.com',
'件名',
'本文',
'from@example.com',
         $attach, // 添付ファイルがない場合は、null
2
);
としてみてください。
マニュアルも修正しておきました。

# spok 2008年11月02日(日) 深夜0時29分


yuipapa さん

相性が悪いといえば悪いのでしょうが、そもそもqmailがRFCに違反しまくりのMTAであるのに、多くは軽い(またはメンテナンス性がよい)という理由で多くのサーバーに採用されている現状では、どうしようもないことかと思っています。
またQdmailは、PHPのマニュアルを守るようにしており、それを守ろうとすると、qmailと相性が悪くなる、ということも原因のひとつです。
どちらかというと、Qdmailとqmailの相性というよりも、qmailとPHPの相性の問題です。
しかし、Qdmailは様々な部分で、qmail対策をしており、他のPHPメーラーよりも、qmail対策の最も進んだスクリプトであると自負しております。
(参考)
http://ya.maya.st/mail/qmail-violations.html

# kt 2008年11月02日(日) 深夜0時55分

デバッグモードの件、ありがとうございます。エラー無く送信内容が表示されました。

それでデバッグモードにして調べたいと思った事なのですが、
以下のソースをご覧ください。

for($i=0;$i<5;$i++){
$flag = qd_send_mail("text",$to,$subject,$body,$from,$attach,2);
echo $flag."<br>";
}

BCCやCCを使うのではなく、複数宛先に送信する為に上記のようにforで繰り返して送信させようとしました。
(上記ソースでは簡単にしています)

既存のプログラムがmail関数だったので、テストも兼ねてQdmailを利用してみたのですが、
なぜか送信が1秒置きに行われています。(ほぼきっかり1秒です)

mail関数だと5通ぐらいは一瞬で送信出来たので、サーバの問題でもないかと思います。
自宅サーバでもさくらのサーバでも同じ現象が起きました

qdmail.phpのソースを見てもsleepの設定がないので、1秒間隔で送信されるのはおかしいと思っているのですが、
いかがでしょうか?見落としている設定がありましたら、ご指摘下さい。

再度すみませんが、よろしくお願いします。

# spok 2008年11月02日(日) 深夜1時20分

QdmailにはSleepの機能はありません。

サーバーの問題でなければ、Qdmailは、送信実行前に重い処理を行っているので、それが原因かもしれません。
またデバッグモードもスピードを低下させます。メモリもそれなりに使用するので、場合によってはそれが制約条件となっているかも知れません。

それを回避するために、toSeparateモードがあるのですが。。。。
http://hal456.net/qdmail/toseparate
しかし、これでも状況によりけりですが、あまり高速化は期待できないかも知れません。
素のmail関数と比べれば、当然にQdmailはスピードは落ちます。

また、メール送信そのものを高速化したければ、mail関数を用いる方法は使ってはいけなくてSMTP送信で対応すべきです。(もちろん、送信前の処理の重たさはmail関数でもSMTPでも変わりはないのですが。)

(参考)
http://www.cpa-lab.com/tech/0151

# kt 2008年11月02日(日) 深夜1時34分

回答ありがとうございます。実際の送信はSMTPで行っているのですが、メールログを見るとなぜか1秒間隔で送信されていたので、どこに原因があるかソースを縮小して探っていました。

Qdmailは大変高機能で素晴らしく、HTML・添付メールを送る時や文字化けにも対処しているので、かなり重宝しているのですが、「送信スピードが落ちる」となると、一括メール配信系には利用出来ませんね。

toSeparateを使わなかったのも、個別でログに書き出したかったり、DBと連動しているのでその対処で使いませんでした。

SMTP送信でも「1秒ごとに送信される」という状況は変わりませんので、用途を限定するしか方法はなさそうです。メール送信部分を全部Qdmailに変えたかったのですが、諦めます。

# kt 2008年11月02日(日) 深夜1時48分

追記テストですが、

toSeparateにし、さくらのSMTPを使い、100通送信してみました。
(http://www.cpa-lab.com/tech/0130 にある実験と同じ事をしました。)

1通目と100通目の差違は16秒でした。
spokさんが実験された時間より1/10程遅いのですが、私のやり方が悪いんですかね‥。
件名も本文も「test mail」だけ書いて送信しただけなんですけどね。

# spok 2008年11月03日(月) 午後1時47分


ktさん

送信前処理が重いのですから、そのままでは当然高速一括メール配信には向きません。
Qdmailは(多少の例外はあれど)、1通1通のメールボディを丁寧に作成していきます。

ちなみに、QdmailはtoSeparateモードであっても、個別にログを書き出し、DB連動で、置き換えをすることはできます。
http://hal456.net/qdmail/simple_replace

それが実行速度的にktさんが満足するレベルかどうかはわかりませんが。

文字化けや、添付ファイル、など複雑な機能に対応すればするほど実行スピードが落ちるのは当たり前なので(または私の技術の限界)、スピードを第一に求められるのであれば、ご自分でメール本文を作成するのがよろしいかと思います。そのために、Qdmailは、作成した本文を渡す機能をつけてあります。

http://hal456.net/qdmail/return

でメール本文(ヘッダーも含む)で取得し、送信先毎に必要な部分だけを変更し、それをQdSmtpに渡せば、それなりに高速で作動すると思います。
Qdmailで基本のメールボディを作成し、それを変数に代入し、個別に変更する部分は、個別の差し替えプログラムを自作すれば、割と簡単にできるかと思います。(ただし、iso-2022-jpで送信することが前提でしょうけれども。)
その上で、ローカルのsendmailに渡すか、QdsmtpなどでSMTP送信するのがよろしいかと思います。

これでQdmailが作成したメール本文を、ご自分のスクリプトで、個別配送先ごとに置き換えを行い、それをQdSmtpに渡せば、現状より高速で送信することができるでしょう。
http://hal456.net/qdsmtp/send

もしくは、その本文を、ご自分で、sendmail関数(またはそのラッパー)に渡すということでもいいかと思います。(PHP では1行のスクリプトでできる話です。)場合によっては、その方が早いこともあるでしょう。

前述のようにQdmailには、置き換え機能がありますが、文字化け対応、Base64対応、その他エラーチェックのために、原則として、毎回毎回メール本文のエンコードを行っています。(attachBuildOnce、bodyBuildOnceという高速化のためのメソッド&パラメータも埋め込んであるのですが、技術力のないユーザーがストレスなく使えるレベルになっていませんので、マニュアルには記載していない状況です。)

Qdmailの置き換え速度が遅い理由は、文字化け対応と、Base64対応、その他のエラーチェックのためです。

なお、レンタルサーバー上のテストでは、そのサーバーの性能と、他のユーザーの負荷の違いがありますから、厳密な再現性はないでしょう。
そもそも私はテストスクリプトやその他のサーバーの設定状況もも公開していないのに、「同じ事」をどのように確認されたのでしょうか。

# kt 2008年11月03日(月) 午後4時27分

ご丁寧に解説ありがとうございます。

実際の仕様はQdmailの制限をかなり絞ったり、一部改変していたりします。置き換え文字はQdmailではなく、str_replaceで置き換えていますね。

おっしゃるとおり、ヘッダーの作成が丁寧ですし、細かい部分まで行き届いていますので、自作するより使い勝手が良く、利用させていただいておりました。

>そもそも私はテストスクリプトやその他のサーバーの設定状況もも公開していないのに、「同>じ事」をどのように確認されたのでしょうか。

っと、おっしゃられると証明する事は不可能です。あくまで「同じような状況」を「再現しようとした」だけであり、全く同じテストをしたわけではありませんから。突っ込まれると
非常に辛いです。


私はこれまで「こういう使い方も出来るかな?」と言ったユーザ視点で実験し、書かせていただき、Qdmailという素晴らしいプログラムが少しでも広まればと思い利用させていただきました。

その上で度々実験して書かせていただいたので、別にプログラム批判がしたいわけでは毛頭ありませんし、おしゃるような指摘も重々承知しています。それだけはご理解下さい。


これまで何度か質問・意見定義して申し訳ありませんでした。

# spok 2008年11月03日(月) 午後5時35分

誤解のないように申し上げますが、Qdmailへのご意見、ご批判、ご質問などは大歓迎です。

# spok 2008年11月03日(月) 午後5時48分

SMTPの接続は、通常は毎回毎回閉じているので、下記を参考にしていただければ、ある程度は早くなると思います。(continueメソッド)

http://hal456.net/qdsmtp/send

また、ローカルのsendmailコマンドに渡したほうが早い場合も十分にあり得ますので、お試し下さい。

また、お使いのサーバーが、ローカルのsendmailコマンドの制限と外部からのSMTP接続の宣言をわけている可能性もあるかと思います。
外部からの接続に対し、同時に立ち上がるプロセスを制限しているSMTPサーバーもあるかと思いますので、その確認もなさったほうがよろしいかと思います。
PostFixの場合の例)http://www.kobitosan.net/postfix/jhtml/rate.html#process
sendmailの場合の例)http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/ja/security-guide/s1-server-mail.html

ただし上記を詳しく読み込んだわけではありませんので、あくまでもご参考まで。

# spok 2008年11月03日(月) 午後5時57分


ktさん

>str_replaceで置き換えていますね。

というのはプログラムのどこで置き換えをされていますか?

A)Qdmailに渡す前の自前スクリプト内
B)Qdmailの内部のメソッドを書き換えた(どのメソッドを書き換えましたでしょうか?)
C)Qdmailから完成したメール本文(ヘッダー含む)を取り出した後

# 初心者です。 2008年11月07日(金) 午後6時35分

はじめまして。TWと申します。
今回、PHPでメール送信する場合、SMTP経由で送信するという試みに、
qdmailを使用させていただきました。また、非常に使いやすく、とても感激しております。
私は、qdmailのみならず、PHP自体が初心者で、悪戦苦闘しておりますので、
ご教授いただけると幸いです。

早速ですが、
メール送信自体は問題なくされているのですが、
時々、以下のようなエラーログが出力されます。
2008-11-07 09:51:54
Qdmail error: Qdmail Version 1.2.6b ,PHP Version 4.4.7
Qdmail error: OS WINNT ; PHP Version 4.4.7 ; Qdmail version 1.2.6b
php.ini status: mb_language = Japanese ; mb_internal_encoding = SJIS ; mb_detect_order = ASCII,JIS,UTF-8,EUC-JP,SJIS
Qdmail Status debug: 0, log: 1, errorlog: 1
Qdmail error: No send . Because SMTP mail method replied error line -> 2190
2008-11-07 09:51:54
Qdmail error: Send Error line -> 2115
2008-11-07 09:51:54
Qdmail error: Error happen, see upper line -> 2194
2008-11-07 09:51:54
Qdmail error: Send Error line -> 2115
2008-11-07 09:51:54
Qdmail error: Error happen, see upper line -> 2194
2008-11-07 09:51:54
Qdmail error: Send Error line -> 2115

これはどのようなときに発生するエラーなのでしょうか。

# spok 2008年11月08日(土) 午前10時40分


TWさん

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

上記のエラーは、「Qdsmtpがエラーを出してるよ!」とQdmailが指摘しているものです。
つまり、Qdsmtpのログ及びエラーログをみる必要があります。

http://hal456.net/qdsmtp/log

を参考にQdSmtpのログとエラーログをみてみてください。

ログの取り方がわからない場合には、
■Qdmailバージョン
■QdSmtpバージョン
■PHPのバージョン
■OS名称 & バージョン
■お使いのソースコード(公開されて支障がある部分は適当に変更してください。)
■ソースコードの文字コード、改行コード

をお知らせ下さい。

# ありがとうございます。 2008年11月08日(土) 午後4時24分

早速のご回答、ありがとうございました。
PHP自体が初心者なので、初歩的なご質問で失礼致しました。
現在、Qdmailの方はログの設定をしています。(下記、ソースです。)
これに加えて、QdSmtpのログ出力を有効にする場合は、どのようにしたらよいのでしょうか。

■お使いのソースコード(公開されて支障がある部分は適当に変更してください。)
require_once('../conf/qdmail.php');
include "../conf/qdsmtp.php";
$pop_user = 'XXXXXXXXXXXXXXX';
$pop_pass = 'YYYYYYYYYYYYYYY';

$param = array(
'host'=> 'ZZZZZZZZZZZZZZZZZZZ',
'port'=> 25,
'from'=> $mailaddress,
'protocol'=>'POP_BEFORE',
'pop_host' =>'ZZZZZZZZZZZZZZZZZZZZZ',
'pop_user' => $pop_user,
'pop_pass'=> $pop_pass
);

$mail = & new Qdmail();
$mail -> smtp(true);
$mail -> smtpServer($param);
$mail -> logLevel(1);
$mail -> errorlogLevel(1);

$mes =mb_convert_kana($mes,"KVa");

if($user_email_1) //ユーザー1にメール送信
{
$mail -> to($user_email_1);
$mail -> subject($subject);
$mail -> from($mailaddress);
$mail -> text($mes);
$return_flag = $mail -> send();
}
if($user_email_2) //ユーザー2にメール送信
{
$mail -> to($user_email_2);
$mail -> subject($subject);
$mail -> from($mailaddress);
$mail -> text($mes);
$return_flag = $mail -> send();
}
if($user_email_3) //ユーザー3にメール送信
{
$mail -> to($user_email_3);
$mail -> subject($subject);
$mail -> from($mailaddress);
$mail -> text($mes);
$return_flag = $mail -> send();
}
if($user_email_4) //ユーザー4にメール送信
{
$mail -> to($user_email_4);
$mail -> subject($subject);
$mail -> from($mailaddress);
$mail -> text($mes);
$return_flag = $mail -> send();
}
if($user_email_5) //ユーザー5にメール送信
{
$mail -> to($user_email_5);
$mail -> subject($subject);
$mail -> from($mailaddress);
$mail -> text($mes);
$return_flag = $mail -> send();
}

■Qdmailバージョン
 1.2.6b

■QdSmtpバージョン
 0.2.0a

■PHPのバージョン
 4.4.7

■OS名称 & バージョン
 Windows2003Server

■ソースコードの文字コード、改行コード
 申し訳ありません、何をお答えしたらよいのか、わかりません・・・。

以上、宜しくお願い致します。

# spok 2008年11月08日(土) 午後4時52分


$mail -> errorlogLevel(1);

の後に、

$mail -> smtpLoglevelLink( true );

をいれてください。
これで、Qdmailのログ設定をQdsmtpが共有するようになります。
(マニュアルに記載していなかったのですいません。)

出力されるログファイルにはメールアドレスやメッセージ本文が入っていますので、外部からアクセスされないようにお気を付け下さい。

# spok 2008年11月08日(土) 午後4時57分

エラーログよりも、通常のログをみたほうが、smtpのどこでエラーがでているかわかりやすいと思います。

# ありがとうございます。 2008年11月08日(土) 午後4時59分

早速のご回答ありがとうございました。
今、試せる環境におりませんので、
試せる環境で実行しまして、また、改めてご連絡致します。
ありがとうございました。

# ご報告と質問 2008年11月10日(月) 午後1時19分

spokさんからご教授いただきました、
$mail -> smtpLoglevelLink( true );
を加えましたら、ログが出力されるようになりました。ありがとうございました。

ただ、もう1点質問をさせて下さい。
$mail -> smtpLoglevelLink( true );
を追記しましたら、ログは出力されるようになりましたが、
エラーだったときにエラーメッセージが画面に表示されてしまうので、
$mail -> errorDisplay( false );
も記述しました。

そうしましたら、Qdmailのエラーメッセージは非表示になったのですが、
Qdsmtpのエラーメッセージは画面に表示されたままになっています。

ここを非表示する場合は、どのようにしたらよろしいでしょうか。
度々申し訳ありませんが、以上、ご確認を宜しくお願い致します。


■$mail -> smtpLoglevelLink( true );
 のみ記述のエラーメッセージ
QdSmtp error: Failure :status550 message:550 5.1.1 <*****@*****.com>: Recipient address rejected: User unknown in local recipient table on RCPT TO:<*****@*****.com>
line -> 551
QdSmtp error: Error RCPT setting line -> 497
QdSmtp error: Error :status503 message:503 No recipient(s). on DATA
line -> 554
QdSmtp error: Error Data sending line -> 510
Qdmail error: Qdmail Version 1.2.6b ,PHP Version 4.4.7
Qdmail error: OS WINNT ; PHP Version 4.4.7 ; Qdmail version 1.2.6b
php.ini status: mb_language = Japanese ; mb_internal_encoding = SJIS ; mb_detect_order = ASCII,JIS,UTF-8,EUC-JP,SJIS
Qdmail Status debug: 0, log: 1, errorlog: 1
Qdmail error: No send . Because SMTP mail method replied error line -> 2190
Qdmail error: Send Error line -> 2115
Qdmail error: Error happen, see upper line -> 2194
Qdmail error: Send Error line -> 2115

■$mail -> smtpLoglevelLink( true );
 $mail -> errorDisplay( false );
 を記述のエラーメッセージ
QdSmtp error: Failure :status550 message:550 5.1.1 <*****@*****.com>: Recipient address rejected: User unknown in local recipient table on RCPT TO:<*****@*****.com>
line -> 551
QdSmtp error: Error RCPT setting line -> 497
QdSmtp error: Error :status503 message:503 No recipient(s). on DATA
line -> 554
QdSmtp error: Error Data sending line -> 510

# spok 2008年11月10日(月) 午後9時18分

ああ、この方法だと確かにエラーは画面表示されてしまうかも知れないですね。。。
次回更新時にはなんとかしたいと思います。
もし、今のバージョンでしのぐのであれば、qdsmtp.phpの31行目付近の
var $error_display = true;

var $error_display = false;
に変更してください。

# spok 2008年11月10日(月) 午後9時22分


このエラーは、「メールボックスが利用できないため、要求された処理は実行不能。 」ということです。

POP_BEFOREの時間切れか、そもそもPOP_BRFOREをサポートしていないか。でしょうか。

そのSMTPサーバーがSMTP AUTHを使えるのであれば、SMTP AUTHを利用したほうがいいかと思います。

# ありがとうございました。 2008年11月11日(火) 午前9時14分

spokさんの仰るとおりに設定し、エラーメッセージ非表示にすることが出来ました。
ありがとうございました。

ご丁寧にご教授いただき、ありがとうございました。

# iizuka 2009年01月07日(水) 午後4時37分

こんにちは、すばらしいスクリプトの公開ありがとうございます。早速試したところ、HTML形式でメールが送信されてきませんでした。色々と試したところ、
$mail -> autoBoth(false);
を入れたらうまく行きました。Gmailで見ていたのですが、代替テキストが表示されていたようです。以上、報告します。

# yoshida 2009年01月07日(水) 午後6時39分

こんにちは、Qdmailを利用させていただいてます。
QDMAILのバージョンを最新に置き換えたところ
cronでメール配信の際に、配信1通毎に
----------------------------------
sendmail: invalid option -- d
sendmail: invalid option -- 0
sendmail: invalid option -- .
sendmail: invalid option -- 1
sendmail: invalid option -- d
sendmail: fatal: usage: sendmail [options]
----------------------------------
のアラートメールが出るようになりました。
MTAはPOSTFIXです。
if(false !== @system($sendmail_path.' -d0.1 < /dev/null > /dev/null',$ret)){
のqmailチェック部分をコメントアウトで対処できます。

# spok 2009年01月08日(木) 午前7時21分

ご指摘ありがとうございました。次回更新に生かしたいと思います。

# mini 2009年01月08日(木) 深夜4時16分

はじめまして、cakephp1.2でQdmailを利用させていただこうといろいろと試して
います。
Qdmail.1.2.6b
qdsmtp.0.2.0a
PHP5.26
window XP
MTA Qmail かsendmail な環境で、
$this->Qdmail->wordwrap_allow = true; にすると、指定した文字数の
ところから文字バケするようです。
何か設定が漏れているのでしょうか?
メールクライアントはMozilla Thunderbird で確認しています。
お手数ですが対応方法等をお教え願えますでしょうか。

# spok 2009年01月09日(金) 午後1時40分

miniさん

Qdmailをお使いいただきありがとうございます。
下記情報をお教えいただければ幸いです。

■お使いのソースコード(公開されて支障がある部分は適当に変更してください。)
■ソースコードの文字コード、改行コード
■デバッグモード http://hal456.net/qdmail/debug での出力内容

本文の言葉の組み合わせによって症状がかわるかもしれませんので、本文ないようは、変更せずに、そのままお教え下さい。公開されて支障があるのであれば、非公開コメントにチェックのうえ、ご連絡ください。

# mini 2009年01月09日(金) 午後5時06分

早速のお返事ありがとうございます。
あれからいろいろと試していたところ、テストだからとControllerの中に
下記を記述してしまってたのを削除したところ、文字化けも無く、改行
されるようになりました。
// mb_language('ja');
// mb_internal_encoding('UTF-8');

上記を記述したまま、wordwrap_allow=falseではなにも問題なかったので
気づきませんでした。
cakephpも初心者なのでこれからいろいろと試していきたいと思います。
ご迷惑をおかけしました。

# spok 2009年01月09日(金) 深夜1時48分

解決しまして何よりです。。

# や。 2009年03月18日(水) 午前11時54分

こんにちは。
バグかどうか分からないですが、おかしな挙動を見つけたので報告します。
(ご用意いただいているメソッドで解決しましたが)

■やりたい事
 ローカルに保存されている、iモードデコメテンプレートを
 au および SB のデコメテンプレートに変換して出力、端末へダウンロードさせる。
 (ダウンロード自体については今報告には関係ありません)

□おかしな挙動
 SB は問題ないが、au のみ、端末でダウンロード後に
 「異常なデータです」「異なる形式の為読み込みできません」という
 エラーメッセージを主力し、デコメテンプレートとして利用出来ない。

■解決策
 makeDecoTemplate() 前に、lineFeed("\r\n") として解決。

□詳細
 SB でも au でも、添付ファイルの base64 エンコード部分で、
 chunk している改行コードが CR + LF で、それ以外が LF になっており、
 改行コードの混在をチェックしていた au 端末で、異常なデータとして読み込まれていた。

 ローカルに保存されている、iモードデコメテンプレートの改行コードが、
 CR + LF で保存されており、変換前に lineFeed() として得られる自動判別の
 改行コードが "\n" だった。(おそらく qmail を利用している為?)
 なので、lineFeed("\r\n") とすると、問題なく動いた。

■Qdmail:1.2.6b
■PHP:5.2.8
■OS:CentOS release 5.2 (Final)
■MTA:qmail
■お使いのソースコード
--------
$content = file_get_contents(iモードデコメテンプレートファイル);
mb_language('ja');
mb_detect_order('SJIS-win,SJIS,JIS,UTF-8,EUC-JP');
mb_internal_encoding('SJIS-win');
include_once 'Qdmail/qdmail.php';
include_once 'Qdmail/qdmail_receiver.php';
$mail = new Qdmail();
#$mail->lineFeed("\r\n"); # この行をコメントインすることで解決
$content = $mail->makeDecoTemplate('TPL_AU', $content);
--------

こんな感じです。

ソースをあまり見ずに喋りますが、
base64 の chunk 改行コードには lineFeed() が使われていないのでしょうか?

同じ現象に遭遇される方もいるかと思い投稿しておきます。

今後とも利用させていただきます。よろしくお願いいたします。

# や。 2009年04月03日(金) 午後2時28分

こんにちは。3/18 の投稿と同じ人です。

前回の投稿と同じシステムで、SoftBank の T 端末で
ダウンロートしたデコメテンプレートが、
正しいファイルとして端末で認識されないという現象が起こりました。

調べていくと、1行目2行目のヘッダの
「HTMLMail-Template-Version」及び「HTMLMail-Template-Title」の
「:」のあとに半角スペースがないとこの現象が起こることが分かりました。

qdmail.php 内の 325, 326 行目でベタで書かれている該当箇所に
半角スペースを足したところ、正常に動くようになりました。
他社端末でもこれで認識しているので、これが正式なのかもしれませんね。

参考までに。

■Qdmail:1.2.6b
■PHP:5.2.8
■OS:CentOS release 5.2 (Final)
■MTA:qmail

# lc 2009年04月20日(月) 午後7時44分

とても素晴しいライブラリに感謝しています。

今つまづいてしまっていることが一点あるので、教えていただければ助かります。

【やりたい事】
携帯デコメをプログラムに渡して、携帯に同じデコメを送信する。

【つまづいている点】
デコメ画像が割れてしまう。
テキストはちゃんときます。


■Qdmail:1.2.6b
■PHP:5.1.6
■QdmailReciever:0.1.4.alpha
■qdsmtp:0.2.0a
■MTA:Postfix(Xサーバー)
■お使いのソースコード

//標準入力からメール内容の取り込み
//
$content = '';
$fp=fopen("php://stdin",'r') or die('File Open Error');
while( !feof($fp) ){
$content .= fgets( $fp );
}
//
//メールのデコード(Qdreceiver)
//
$DECODE = QdmailReceiver::start('direct',$content);
$subject_summary = mb_substr(
$DECODE -> header( array('subject','name') ) , 0 , 10
);

if(empty($subject_summary)){
$subject_summary = '無題';
}else{
$subject_summary .= '無題';
}

$body = $DECODE->bodyAutoSelect();
$to = $DECODE -> header(array('to','mail')); # toを追加
$from = $DECODE -> header(array('from','mail')); # fromを追加

//
//デコメテンプレートへの変換(3キャリア)
//
$kinds = array('TPL_DC','TPL_AU','TPL_SB');
$carrier = array(
'TPL_DC'=>'Docomo',
'TPL_AU'=>'au',
'TPL_SB'=>'SoftBankMobile'
);
$mime = array(
'TPL_DC'=>'application/x-decomail-template',
'TPL_AU'=>'application/x-kddi-htmlmail',
'TPL_SB'=>'application/x-htmlmail-template'
);
$kakuchou = array('TPL_DC'=>'dmt','TPL_AU'=>'khm','TPL_SB'=>'hmt');

$ct = 0;
$mail = Qdmail::getInstance();
foreach($kinds as $kind){
$attach[$ct]['DIRECT'] = $mail -> makeDecoTemplate($kind,$content);
$attach[$ct]['PATH'] = $subject_summary.'_'.$carrier[$kind].'.'.$kakuchou[$kind];
$attach[$ct]['MIME_TYPE'] = $mime[$kind];
$ct++;
}
// メール送信機能
$param = array(
'host'=>$host,
'port'=> $port,
'from'=>$error_from,
'protocol'=>$protocol,
'user'=>$user,
'pass' => $pass,
);
$option = array('type'=>'deco','smtp'=>$param);
$k = count($memo_address);
for($i=0 ; $i < $k ; $i++){
$tensou_to = array( $memo_address[$i] , $memo_name[$i] ) ;


$flag =qd_send_mail( $option , $tensou_to, $subject , $body , $add_header , $attach);
if( ($i % $num_at_once == $num_at_once-1) && ($i != $k-1) ) {
sleep($sleep_time);
}
}

?>

途中、送信先を読み込む機能などは省略させていただいてます。


なぜか、一番最初にテストしたときは、
デコメ画像もテキストもちゃんと、渡されて携帯に届きました。


でも、その後何度テストしても、割れて届いてしまいます。

typeをtextやhtmlにしたときに届く、
3キャリアそれぞれのテンプレファイルは問題なく変換されています。


初歩的な質問かもしれませんが
教えていただければ助かります。

# とおりすがり 2009年05月12日(火) 午後11時23分

http://hal456.net/qdmail/kana
>ただし、mb_convert_kanaは、濁点も一文字として数えますので、スペックは、「スペック」でなく「スヘ゜ック」となってしまいます。(この問題は、0.8.8aにて解消の予定です。)

mb_convert_kanaは、引数'KV'で'ペ'になるようになっています。
0.8.8aと古いバージョンになっているから更新漏れかと思います。

http://hal456.net/qdsmtp/init
>SMTP AUTHの設定
に'from'が複数あります。
あと全然どうでもいいんですが
Gmailだと'host'=>'tls://smtp.gmail.com'でした。
ここでちょっとだけ引っかかったので。

# まつお 2009年05月19日(火) 午後6時01分


非常に便利なライブラリを作成していただき
ありがとうございます。

デコメール送信について勉強しようと、
色々と試していたのですが1点問題が発生しました。

お忙しい中申し訳ありませんが、
何か原因等わかりますでしょうか。

----------------------------------------

■やりたいこと
Docomo, au, Softbank 携帯宛てに
絵文字入りのデコメールを送信したい。


■問題
au 携帯宛てに絵文字入りのデコメールを
送信。au 携帯で確認すると、デコメール絵文字部分のみが表示されない。
(絵文字が除去されている状態)


■au 携帯の機種名
・INFOBAR2


■補足
・Docomo, Softbank 携帯宛てには正常に絵文字入りの
デコメール送信・表示ができました。
※後述するソースコードの $body の絵文字コードは、
キャリア毎に変更して実行しています。

Docomo - 
Softbank - 


■Qdmailバージョン
・1.2.6b

■QdSmtpバージョン

■PHPのバージョン
・4.4.4

■OS名称 & バージョン
・RedHat9

■MTA
・sendmail

■お使いのソースコード


#!/usr/bin/php
<?php
require_once("/usr/local/src/qdmail/qdmail.php");
require_once("/usr/local/src/qdmail/qdmail_receiver.php");

// au 携帯のアドレス
$to_addr = "test@ezweb.ne.jp";
$to = array();
$to[]=array($to_addr);

$add_header['From']='test@test.jp';
$add_header['Reply-To']='test@test.jp';

$mail = Qdmail::getInstance();
$mail -> reset();


// デコメール本文
$body = '<html><body>
晴れの絵文字
</body></html>';

$fg=qd_send_mail(
'deco',
$to,
'デコメ試験',
$body,
$add_header,
$attach
);
?>


■ソースコードの文字コード、改行コード
SJIS、CRLF

----------------------------------------

お手数ですが、よろしくお願いいたします。

# tenkoma 2009年06月06日(土) 深夜0時12分

はじめまして。
バグかどうかわかりませんが、不可解な挙動を見つけましたのでご報告いたします。
その現象は「本文を空にして、添付ファイル付きで送信すると受信したメーラーの本文にヘッダやbase64エンコードされた添付ファイルの中身が表示される」です。

■Qdmailバージョン
1.2.6b
■QdSmtpバージョン
0.2.0a
■PHPのバージョン
5.2.9
■OS名称 & バージョン
Debian GNU/Linux
/etc/debian_version → squeeze/sid
ちなみに lenny/stableな環境でも再現しました。そのときはPDFを添付しました
■MTAの種類(sendmailかPostfixかqmailか)
Postfix(これはローカルのものなので無関係と思います。)
■お使いのソースコード(公開されて支障がある部分は適当に変更してください。)
CakePHPのコントローラのソースコードです。
<?php
class SampleController extends AppController
{
var $uses = array();
var $components = array("Qdmail");

function mail()
{
$this->Qdmail
$this->Qdmail->smtp(true);
$this->Qdmail->lineFeed("\n");
$this->Qdmail->bodyEmptyAllow(true);
// ホスト名などは書き換えてあります
$param = array(
'host' => 'smtp.example.com',
'port' => 587,
'from' => 'sample@example.com',
'protocol'=>'SMTP_AUTH',
'user' => 'sample@example.com',
'pass'=> 'pass',
);
$this->Qdmail->smtpServer($param);
$this->Qdmail->to('sample@example.com', 'test to');
$this->Qdmail->subject('test title');
$this->Qdmail->from('sample2@example.com', 'test from');
//$this->Qdmail->text('test');
$this->Qdmail->attach('/home/sample/projects/cakeblog/attachfile.txt');
$res = $this->Qdmail->send();
}
}
?>
■ソースコードの文字コード、改行コード
UTF-8 / LF
■デバッグモード http://hal456.net/qdmail/debug での出力内容
Qdmail Debug: OS Linux ; PHP Version 5.2.9-4 ; Qdmail version 1.2.6b
php.ini status: mb_language = Japanese ; mb_internal_encoding = UTF-8 ; mb_detect_order = ASCII,JIS,UTF-8,EUC-JP,SJIS
Qdmail Status debug: 2, log: 0, errorlog: 0

Qdmail Debug:
To: test to <sample@example.com>
Subject: test title
From: test from <sample2@example.com>
Message-Id: <Qdmail.1.2.6b_864df0374965ad09796938fbb14c6ddd5c73f18f@hal456.net>
MIME-Version: 1.0
X-QdmailDebug: T1MgTGludXggOyBQSFAgVmVyc2lvbiA1LjIuOS00IDsgUWRtYWlsIHZlcnNpb24gMS4yLjZiCnB
ocC5pbmkgc3RhdHVzOiBtYl9sYW5ndWFnZSA9IEphcGFuZXNlIDsgbWJfaW50ZXJuYWxfZW5jb2
RpbmcgPSBVVEYtOCA7IG1iX2RldGVjdF9vcmRlciA9IEFTQ0lJLEpJUyxVVEYtOCxFVUMtSlAsU
0pJUwpRZG1haWwgU3RhdHVzIGRlYnVnOiAyLCBsb2c6IDAsIGVycm9ybG9nOiAw
X-PHP-Qdmail: version-1.2.6b The_MIT_License http://hal456.net/qdmail PHPver 5.2.9-4
send-by SMTP

--__Next-1-VNUWRtYWlsIEFHUEx2Mw==Oms=__
Content-Type: text/plain; name="attachfile.txt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="attachfile.txt"

dGhpcyBpcyBhdHRhY2ggZmlsZQo=
■添付ファイルの中身(イコールの線を除く)
=================================
this is attach file
=================================

よろしくお願いします。

# tenkoma 2009年06月06日(土) 深夜0時16分

サンプルコードのmailメソッドの最初にゴミ($this->Qdmail)が入ってしまいました。済みません。

# y_yoshida 2009年07月14日(火) 午後4時09分

■Qdmailバージョン 1.2.6b
■PHPのバージョン 5.3
■OS名称 & バージョン CentOS (gcc version 4.1.2 20080704 (Red Hat 4.1.2-44))
■MTAの種類(sendmailかPostfixかqmailか) qdmail
■ソースコードの文字コード、改行コード UTF-8, LF

はじめまして。
すばらしいライブラリの提供に非常に感謝しております。

qdmail にて携帯電話のテンプレート変換を試してみました。
ソフトバンクの 920T でのみ、テンプレート変換に失敗していたのでソースコードを調べてみました。

どうやら、テンプレートのヘッダに 半角スペース が必要なようです。
また、PHP5.3 で オブジェクトの生成時に & が付いている点で警告が出ていたので、下記のように修正しました。

# diff qdmail.php qdmail_new.php

diff qdmail.php qdmail_new.php
325,326c325,326
< 'TOP' => array('HTMLMail-Template-Version:1.0',
< 'HTMLMail-Template-Title:HTMLMail-Template',
---
> 'TOP' => array('HTMLMail-Template-Version: 1.0',
> 'HTMLMail-Template-Title: HTMLMail-Template',
661c661
< $instance[0] = & new Qdmail();
---
> $instance[0] = new Qdmail();
3677c3677
< $this->smtp_object = & new Qdsmtp();
---
> $this->smtp_object = new Qdsmtp();
3771c3771
< $this->Qdsmtp = & new QdsmtpComponent();
---
> $this->Qdsmtp = new QdsmtpComponent();
3820c3820
< $view = & new $this->Controller->view( $this->Controller , false );
---
> $view = new $this->Controller->view( $this->Controller , false );


以上です。

# minami 2009年08月24日(月) 午後10時33分

はじめまして。
携帯3キャリアに対してデコメールを送るために
モジュールを利用させていただこうと思っているのですが
下記のエラーが発生しており送信できていない模様です。

どこを修正すればよいかヒントをいただけませんでしょうか。
宜しくお願いいたします。

QdSmtp error: No Responce line -> 603
QdSmtp error: getMessage error line -> 543
QdSmtp error: Error Data sending line -> 510
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 = UTF-8 ; mb_detect_order = SJIS-win,eucJP-win,JIS,UTF-8,ASCII
Qdmail Status debug: 0, log: 0, errorlog: 0
Qdmail error: No send . Because SMTP mail method replied error line -> 2190
Qdmail error: Error 'TO' Separate mode in Sendbase function , the Address is -> mp88194@docomo.ne.jp line -> 2096
Qdmail error: Send Error line -> 2115

■Qdmailバージョン 1.2.6b
■QdSmtpバージョン 0.2.0a
■PHPのバージョン 5.1.6
■OS名称 & バージョン CentOS5
■MTAの種類(sendmailかPostfixかqmailか)qmail
■お使いのソースコード(公開されて支障がある部分は適当に変更してください。)

<?php
mb_language("Japanese");
mb_internal_encoding('UTF-8');
mb_regex_encoding("UTF-8");
mb_detect_order("SJIS-win,eucJP-win,JIS,UTF-8,ASCII");

require_once('qdmail.php');
require_once('qdsmtp.php');

$param = array(
'host' => '(ホスト)',
'port' => 25,
'from' => '(Fromアドレス)',
'protocol' => 'POP_BEFORE',
'pop_host' => '(POPホスト)',
'pop_user' => '(POPユーザー名)',
'pop_pass' => '(POPパスワード)'
);

$body ='<html><head></head><body><div><font size="1">Weekly New Magazine</font><img src="cid:ico_book.gif"></div></body></html>';

$to[] = array( '(送り先アドレス)' , 'test' );
$from = array( '(送り元アドレス)' , 'test Inc' );
$subject = 'Weekly New Magazine';
$attach = array();
$attach[] = array( './images/ico_book.gif' , '' );
$option = array('type'=>'deco','smtp'=>$param);
$debug = '0';
$flag =qd_send_mail( $option , $to , $subject , $body , $from , $attach , $debug);

?>

■ソースコードの文字コード、改行コード
UTF-8、LF

■デバッグモード http://hal456.net/qdmail/debug での出力内容

Qdmail Debug: OS Linux ; PHP Version 5.1.6 ; Qdmail version 1.2.6b
php.ini status: mb_language = Japanese ; mb_internal_encoding = UTF-8 ; mb_detect_order = SJIS-win,eucJP-win,JIS,UTF-8,ASCII
Qdmail Status debug: 2, log: 0, errorlog: 0
Qdmail Debug:
Array
(
[0] => Array
(
[0] => (送り先アドレス)
[1] => test
[mail] => (送り先アドレス)
[name] => test
)

)
Qdmail Debug:
To: test <(送り先アドレス)>
Subject: Weekly New Magazine
From: Magz Inc <(送り元アドレス)>
Message-Id: <Qdmail.1.2.6b_647a15d62313d417b29db9ad45b33b90370eb2f9@hal456.net>
Content-Type: multipart/mixed;
boundary="__Next-1-YWUWRtYWlsIEFHUEx2Mw==d3s=__"
MIME-Version: 1.0
X-QdmailDebug: T1MgTGludXggOyBQSFAgVmVyc2lvbiA1LjEuNiA7IFFkbWFpbCB2ZXJzaW9uIDEuMi42YgpwaHA
uaW5pIHN0YXR1czogbWJfbGFuZ3VhZ2UgPSBKYXBhbmVzZSA7IG1iX2ludGVybmFsX2VuY29kaW
5nID0gVVRGLTggOyBtYl9kZXRlY3Rfb3JkZXIgPSBTSklTLXdpbixldWNKUC13aW4sSklTLFVUR
i04LEFTQ0lJClFkbWFpbCBTdGF0dXMgZGVidWc6IDIsIGxvZzogMCwgZXJyb3Jsb2c6IDA=
X-PHP-Qdmail: version-1.2.6b The_MIT_License http://hal456.net/qdmail PHPver 5.1.6
send-by SMTP

--__Next-1-YWUWRtYWlsIEFHUEx2Mw==d3s=__
Content-Type: multipart/related;
boundary="__Next-2-HSUWRtYWlsIEFHUEx2Mw==bno=__"

--__Next-2-HSUWRtYWlsIEFHUEx2Mw==bno=__
Content-Type: multipart/alternative;
boundary="__Next-3-ZCUWRtYWlsIEFHUEx2Mw==QmU=__"

--__Next-3-ZCUWRtYWlsIEFHUEx2Mw==QmU=__
Content-Type: text/plain; charset="iso-2022-jp"
Content-Transfer-Encoding: 7bit

Weekly New Magazine

--__Next-3-ZCUWRtYWlsIEFHUEx2Mw==QmU=__
Content-Type: text/html; charset="iso-2022-jp"
Content-Transfer-Encoding: quoted-printable

<html><head></head><body><div><font size=3D"1">Weekly New Magazine</font><i=
mg src=3D"cid:id_ico_bookgif_@_55989006_maglrmjp_PHPQdmail_126b"></div></bo=
dy></html>

--__Next-3-ZCUWRtYWlsIEFHUEx2Mw==QmU=__--

--__Next-2-HSUWRtYWlsIEFHUEx2Mw==bno=__
Content-Type: image/gif; name=".gif"
Content-Transfer-Encoding: base64
Content-Id: <id_ico_bookgif_@_55989006_maglrmjp_PHPQdmail_126b>

R0lGODlhEAAQALMPANzj62yMsXejyq/K32ubxEdpmZm71V18pjtdjoSpylqPwYCr0Iiw0pCxzio+
V////yH5BAEAAA8ALAAAAAAQABAAAAR98IEQir346VZIOGBoIdpDDUCqqk55DF94FHPRaq8x7Pxg
2K6BwGBoNBILxu/2OBiGK0Bi6Xo2GIyFQLDgMJ0E7EK7ZQBxjUCWTAifmw0Fu01IvA+Nw5aukCO+
DAd0BH0KAn8uCYKFhQQFJBoFCVhrWwIECAclCQidnp8BJREAOw==

--__Next-2-HSUWRtYWlsIEFHUEx2Mw==bno=__--

--__Next-1-YWUWRtYWlsIEFHUEx2Mw==d3s=__--



2009-08-24 22:31:51

# yukiko 2009年09月10日(木) 午後5時30分

はじめまして

Qdmailの評判が良くて私も使ってみたいと思いダウンロードして試してみたんですが、最初から躓いてしまっています。

お忙しいところ恐縮ですが、教えていただけないでしょうか?
お願いします。

【動作環境】
OS:CentOS release 5.3
PHP 5.1.6
Qdmail ver 1.2.6b

【やってみたこと】

①送信テストプログラムを作りました。

# cat mailtest.php
<?php
require('qdmail.php');

$mail = new Qdmail();
$mail -> text( 'ここに内容をいれます' );
$mail -> from( 'xxx@yahoo.co.jp' , '' );
$mail -> to( 'xxx@docomo.ne.jp' , '' );
$mail -> subject( 'タイトルも日本語で' );
$mail -> debug(2);

?>
#

②これを実行すると、

# php -f mailtest.php
sendmail: illegal option -- d
sendmail: usage: sendmail [ -t ] [ -fsender ] [ -Fname ] [ -bp ] [ -bs ] [arg ... ]
#

このように、sendmail のエラーが表示されてしまいます。

なにか間違っているんでしょうか?
お願いします、教えてください。

# yukiko 2009年09月10日(木) 午後11時42分

上のコメントに追伸です。

$mail -> debug(2);

じゃなくて、

$mail ->send();

としました、最初は。
でも、結果は同様です。

あと、

qdmail.0.9.4.002

では、sendmail のエラーはおこらず、正常にメール送信できました。
ver.1.0 系を使いたいのですが、何か情報はありませんか?

教えてください。お願いします。

# mgmg 2009年09月11日(金) 午前11時35分

設定の問題でしょうか。
メール送信が出来ません

Qdmail error: Qdmail Version 1.2.6b ,PHP Version 5.2.10
Qdmail error: OS WINNT ; PHP Version 5.2.10 ; Qdmail version 1.2.6b
php.ini status: mb_language = Japanese ; mb_internal_encoding = UTF-8 ; mb_detect_order = ASCII,JIS,UTF-8,EUC-JP,SJIS
Qdmail Status debug: 0, log: 0, errorlog: 0
Qdmail error: Plese load SMTP Program - Qdsmtp http://hal456.net/qdsmtp line -> 3675
Qdmail error: SMTP Object make 'new' error line -> 3615
Qdmail error: No send . Because SMTP mail method replied error line -> 2190
Qdmail error: Send Error line -> 2115

なんでしょう?

# naco 2009年09月13日(日) 午後8時00分

> mgmgさん

php.iniにプロバイダ等のSMTPサーバーを設定してありますか?
php.iniに設定する代わりに、エラーメッセージにある「Qdsmtp」を利用しても大丈夫なはずです。
http://hal456.net/qdsmtp

※php.iniに設定する場合は、ポートの指定しか出来ないはずですので、SMTP-AUTH(SMTP認証)が必要な場合は、「Qdsmtp」を使用してください。
※プロバイダでOP25を実施している場合は、SMTP-AUTHで接続する必要があります。(プロバイダのホームページ等で確認してください。)

※「Semdまね〜る」というソフトを使用してもSMTP-AUTHで接続できます。
http://xoops.hypweb.net/modules/forum/index.php?topic_id=4
※php.iniへの設定も必要です。(以下のページの説明が詳しいです。)
http://homepage1.nifty.com/yito/anhttpd/faq/sendmane.html

# spok 2009年09月13日(日) 午後11時22分

1.26bでの不具合
sendmailがエラーを出す時がある。
qmail判定ルーチンが悪さをしているようです。


1285行目あたりの下記のスクリプトが悪さをすることがあるようです。これらを
コメントで囲ってみてください。
>||
if(false !== @system($sendmail_path.' -d0.1 < /dev/null
> /dev/null',$ret)){
if(is_array($ret)){
$ret = reset($ret);
}
$code = (int) substr($ret,0,3);
if( 100 === $code || 111 === $code){
$this->is_qmail = true;
}
}
||<

# yana 2009年09月29日(火) 午後7時28分

$deco_judgeに"willcom.com"の追加マダー?(チンチン)

# kyoko 2009年10月07日(水) 午前11時44分

■Qdmailバージョン 1.2.6b
■PHPのバージョン 5.2
■MTAの種類(sendmailかPostfixかqmailか) qmail
■ソースコードの文字コード、改行コード Shift-JIS LF
■お使いのソースコード(公開されて支障がある部分は適当に変更してください。)
// 拡張子の取得
$extensionArray = mb_split("[\.]", $attachInfo['filename']);
$extension = array_pop($extensionArray);

はじめまして。
ライブラリ便利に使用させていただいております。

QdmailReceiverを利用して添付ファイルをメールを取得する処理を行っております。
その際に、添付ファイルのファイル名が取得できない場合がございます。
【Softbank 904T】にて画像を添付した場合に、この問題が発生します。

この携帯から、メールを送信した際のヘッダが他の携帯と異なるようです。

【Softbank 904T】:
--MMSPart_001_daceeb2c_7afe_4392_b9d3_ff775102935d
Content-Location:cbd0f21d.png
Content-Type:image/png;name=io.png
Content-Transfer-Encoding:base64

他の携帯:
-------=_NextPart_154316_102359_115938
Content-Type: image/png;name="io.png"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="io.png"


上記のとおり、【Softbank 904T】ではContent-Dispositionヘッダが存在しません。
そのため、添付ファイルの"attach_flag"がfalseとなってしまい、filenameを取得しないようです。
※他にもVodafoneのTOSHIBAの携帯で同様の問題が発生しています。

改修ポイントを教えていただけますでしょうか。

# SMTP一斉送信エラー 2009年12月15日(火) 午後5時12分

SMTPで一斉送信を行った際に、存在しないアドレスが含まれていると、
以降のアドレスへのメール配信がエラーとなります。
解決方法が分かりませんので、ご教授ください。

$data = array(
array("name" => "A", "mail" => "aaa@docomo.ne.jp"),
array("name" => "B", "mail" => "bbb@docomo.ne.jp"),
array("name" => "C", "mail" => "ccc@docomo.ne.jp"));

$mail -> to($data); //送信ユーザーアドレス一覧

Bのアドレスが存在しない場合、Cのアドレスが存在していても
BとCともに送信されない。


# ひで ==== 2009年12月27日(日) 深夜4時57分

はじめまして。
qdmailの事で質問です。

OOP式でデコメを送信しているのですが、本文内の75文字目に半角ピリオドがあると、半角ピリオドが消えます。
その後も75文字間隔で、その地点の半角ピリオドが消えます。半角ピリオド以外だと消えません。
関数方式ではこの現象は起こりませんでした。

解決方法があれば教えてもらえませんでしょうか?
よろしくお願いいたします。

# タマ 2010年01月13日(水) 午後9時14分

はじめまして。
下記エラーが表示されました。

QdSmtp error: SMTP can not fputs line -> 535
QdSmtp error: Error Data sending line -> 510
Qdmail error: Qdmail Version 1.2.6b ,PHP Version 5.2.0
Qdmail error: OS Linux ; PHP Version 5.2.0 ; Qdmail version 1.2.6b
php.ini status: mb_language = Japanese ; mb_internal_encoding = UTF-8 ; mb_detect_order = ASCII,JIS,UTF-8,EUC-JP,SJIS
Qdmail Status debug: 0, log: 0, errorlog: 0
Qdmail error: No send . Because SMTP mail method replied error line -> 2190
Qdmail error: Send Error line -> 2115

このエラーからすると、メール送信は行われなかったと判断してよいのでしょうか。
原因はメール送信先が異なっていたためで問題は解決しているのですが
システムを運用中のためメール送信が行われたかどうか知る必要があります。
判断ができないため教えていただけませんでしょうか。よろしくお願いします。

# 絵文字の受信 2010年02月04日(木) 午後0時41分

評判をお聞きし、QdmailReceiverを使って、写メ日記を作成しようとしています。
添付の写真やデコメは普通に取り出せたのですが、絵文字部分が、うまくいきません。

HTML_Emoji.phpと組み合わせて、
キャリア毎に絵文字をgif画像に置き換えようとしているのですが、

$body=$receiver->bodyAutoSelect();

で取り出した時点で、絵文字部分のみ文字化けしてしまっているので、
その後のキャリアごとの変換ができません。

何とか、絵文字部分のコードを取り出したいのですが、どのようにすれば
よいのでしょうか?

# みつ 2010年05月13日(木) 午後8時10分

はじめまして。

携帯にHTMLメールを送る際に、
$mail->autoDecoJudge(false);
の状態で、キャリアを明示的に指定して送信することは可能でしょうか?

TOにはPCメール、BCCに携帯メールのアドレスをセットして送信したいので、
TOで自動判定されるのを避けたいのですが・・・。

# みつ 2010年05月13日(木) 午後8時12分

すいません。一部抜けていたので再投稿します。

携帯にHTMLメールを送る際に、
$mail->toSeparate(false);
$mail->autoDecoJudge(false);
の状態で、キャリアを明示的に指定して送信することは可能でしょうか?

TOにはPCメール、BCCに携帯メールのアドレスをセットして送信したいので、
TOで自動判定されるのを避けたいのですが・・・。

# ふじさん 2010年06月16日(水) 午前11時05分

ふじさんです
qd_send_mailの関数型を使っています

クラス型の複数To,複数Cc,複数Bccは,

$address['to'][] = array('mailto1@example.com' , '表示名1(日本語OK)' );
$address['to'][] = array('mailto2@example.com' , '表示名2(日本語OK)' );

$other_heder['cc'][] = array('mailto3@example.com' , '表示名3(日本語OK)' );
$other_heder['cc'][] = array('mailto4@example.com' , '表示名4(日本語OK)' );

$other_heder['bcc'][] = array('mailto5@example.com' , '表示名5(日本語OK)' );
$other_heder['bcc'][] = array('mailto6@example.com' , '表示名6(日本語OK)' );

$other_heder['from'][] = array('from@example.com' , '配信元(日本語OK)' );

$mail -> easyText(
$address ,
'タイトル(日本語OK)' ,
'本文(日本語OK)',
$other_header
);
でいいのですが
関数型ではどうなりますか?
qd_send_mail( $option , $to_arr , $subject , $message , $from_arr , $qd_attach)
で $to_arrに配列をセットすればtoは複数いけそうな感じですが
Cc,Bccはどこのセットすればいいのでしょうか?

# dodong 2010年06月22日(火) 午後1時16分

初めましてdodongoです。

qdmailについての質問をしたいのですが、問題ないでしょうか?
ここ1年近く返信がないように見えますが・・・

# しん 2010年07月29日(木) 午後1時15分

Qdmailの件名のエンコードについて質問です。
現在説明を読み組み込み終わったのですが、件名のみ文字化けしてしまいます。
現在は件名を英文で固定して対応しているのですが、出来れば日本語の件名を使用したいと思っています。
現在の英語の件名でもThunderbirdで受信したメールをemlファイルに落としてテキストエディタで開くとUS-ASCIIでエンコードされているように見えます。
どこか設定を変える必要があるのでしょうか?

# kou 2010年11月26日(金) 午前11時19分

qdmail 1.2.6bをCakePHP1.3.6でコンポーネント として利用すると renderElement実行部分でメソッドが無い旨エラーメッセージが表示されます。
elementにメソッド名を変えると動作したので、CakePHP1.3.6にてrenderElementの実装が削除された模様です。

# センディ 2011年03月17日(木) 深夜0時59分

Qdmail ver 1.2.6b
Qdsmtp ver 0.2.0a

お世話になります。
メルマガみたいな物を作っております。

Qdmailで「$mail -> smtpData();」で(ヘッダ+本文+添付エンコード済み)データを取り出してDBへ保存
CRONで指定時間になったらDBから取り出し、qdsmtpで送信するような形で作成しています。

現状Qdmailで作成しDBに保存してあるSMTPデータを取り出し、Qdsmtpの「$smtp -> data(SMTPデータ);」で代入してSMTMPで送信する形でメールを送信できるのは確認しています。
(自アドレスにメール(デコメなんですが)、インラインの画像も表示されるのを確認しています)


ですがqdsmtpでのBCCのやり方がわからないのとqdsmtpではQDMAILの「toSeparate( true );」が使用できないようで、メアドを見えないようにする処理が思いつかないのです・・・
(件数が1000件以上あるので、一通ずつ送信するわけにいかないので)

今度はHPに載ってるようにQmailから自動でqdsmtpをインクルードする様にして、「$mail -> toSeparate( true );」などをセットした後$smtpのインスタンス?を作る形で
$smtp=& $mail->smtpObject();
ってやった後に、
$smtp -> data(SMTPデータ)
ってやればできるかな?と思ったらできない・・・・


要するにQdsmtpでのBCCのやり方、
もしくはQdmailで作った「$mail -> smtpData();」のデータを今度はQdmail側にセットしたいのです。

一週間以上あれこれやりましたがどうもいいやり方が思い浮かびません。
サポートが動いてない?ようですが、これを見てヒントを下さる方でも結構です。どうかよろしくお願いいたします。

# センディ 2011年03月25日(金) 午前10時41分

上記の件に関しては結局解決しなかったので、SMTPデータを取り出して添付等を一括保存するのをやめて、
インラインHTML(デコメ)、インラインで使える画像の数を決めて、BASE64変換して保存、
送信時にQdmailでにセットしなおして送信することにしました。

# nana 2011年06月04日(土) 深夜2時24分

●一部のサーバでメールが送れない

qd_send_mail ではメールが送れて、easyText や OOP では送れないという不思議な現象に出会いました。
試していってみたところ、To部分に宛名を仕込むと送れないメーラーがあるみたいです。
※ A:「To: hoge@example.com」はOK、B:「To: hogehoge <hoge@example.com>」はNG。

宛先を入力するときに、$mail->to('hoge@example.com', 'hogehoge'); とやるとB(NG)の書式に、
$mail->to('hogehoge <hoge@example.com>'); とやるとA(OK)の書式になるようですね。
報告までに。

# mocako 2012年03月19日(月) 午後3時47分

OOP方式で利用させていただいております。
HTMLメールを送信したいのですが、iPhoneでの受信の際、テキストメールになってしまいます。
iPhoneにもHTMLメールを送信することはできないのでしょうか?
どなたかご教授いただけませんでしょうか。


require_once("./qdmail/qdmail.php");
require_once("./qdmail/qdsmtp.php");


$to = "****@****.ne.jp";
$from = "test@test.ne.jp";
$fromName = "テスト";
$messageId = "**********";

$mailTitle = "テストテスト";
$mailBody = '<html><body bgcolor="#aabbff">
<h1>HTMLメールテスト</h1>
<b>太字</b>
<font color="red">文字色を変えてみます。</font>
<div>画像はこのように</div>
<img src="cid:sample.jpg">
<div>文章中に置くことができます。</div>
<p>Send by Qdmail</p>
<div>携帯端末、キャリアによって使えるHTMLタグが違いますので注意してください。</div>
<div><a href="mailto:address@example.com">メールはこちらへ</a></div>
<div><a href="tel:00-0000-0000">電話はこちらへ</a></div>
</body></html>';

$param = array(
'host' =>'$host',
'port' => 25,
'from' =>$from,
'protocol'=>'SMTP',
);

$mail = new Qdmail();
$mail -> smtp(true);
$mail -> smtpServer($param);
$mail -> to( $to ,'');
$mail -> from($from , $fromName);

$mail -> replyto($from , $fromName);

// メールヘッダー Message-ID
$mail -> addHeader('Message-ID',$messageId);

$mail -> subject($mailTitle);

$mail ->html($mailBody);

$mail -> inlineMode(true);
$mail -> autoDecoJudge(true);
$mail -> toSeparate(true);

$mail -> attach( 'sample.jpg' );

$mail ->send();



# さらりーまん 2013年04月24日(水) 午後3時14分

お世話になってます。

$mail->sendmail(true);

としてメール送信をした際、重複送信(2通送信される)てしまう現象が発生しました。

原因として、
ini_get('sendmail_path');
の戻り値が、
『/path/to/sendmail -t』
といったように、-tオプションがついている場合、
Qdmailが成形したメールヘッダ部分の「To:」先と、
sendmailコマンドラインの引数のTo先の2回送信しているのが原因のようです。

対処方法として、
ini_set('sendmail_path', '/path/to/sendmail'); //-tオプションを付けないものを上書きする

としてみましたが、レンタルサーバ等でini_setがきかない場合があるので、
Qdmailの、『sendBySendmail』メソッドの、
$recipient = implode(' ',$this->recipient);
の下に、
if(preg_match('/ -t(?:$| )/', $this->sendmail_path, $match)){
$recipient = "";
}
を追記してみました。

参考になりましたら幸いです。

# biwa 2014年05月24日(土) 午後6時04分

以下の環境で正常smtp経由のメール送信が出来ている者です。
・Qdmail1.2.5b
・QdSmtp
・PHP5.3
・Linux(ubunts)
・MTA(qmail)

今回phpを5.4にあげることとなり、影響がないか確認したのですが、どこかのブログで
qdmailでE_STRICTエラーが出たという記事を発見しました。その為5.4にあげるのを止めようか
どうか悩んでいるのですが、本当にエラーがでるのか分からない状況です。どなたか詳細をご存知の方いませんか?

# shamoshamo 2014年06月09日(月) 午後7時32分

■Qdmailバージョン 1.2.6b
■QdSmtpバージョン 0.2.0a
■PHPのバージョン 5.3.10
■OS名称 & バージョン linux, ubuntu
■MTAの種類(sendmailかPostfixかqmailか)n/a
■ソースコードの文字コード、改行コード utf-8

こんにちは。

QdsmtpBaseクラスのtryUntilSuccess($items)メソッドは、
$items内の要素を順に試して、成功したら、そこで処理を打ち切る、
というようなものかと思うのですが、errorGather()の実装の問題で、
$items内に複数要素があっても1つ目しかtryせず、かつ、失敗したとしてもtrueを返すようです。

ご確認いただけますか?

以下、処理の順にコメントに番号をいれてあります。

function tryUntilSuccess( $items ){
$try = false;
$err_mes = array();
foreach( $items as $item ){
$err_mes[] = $item[0];
$this->error_ignore = true; // [1] error_ignoreを一時的にtrueにする
list( $st , $mes , $com ) = $this->communicate( array( $item ) );
$this->error_ignore = false;
if( true === $st ){ // [5] $stは常にtrueとなる
$try = true; // [6] 成功したという印
$this->error = array();
break;
}
}
if( !$try ){
return $this->errorGather( 'Tyr Error ->' . implode( ' ' , $err_mes ) ,__LINE__);
}
return $this->errorGather(); //[7] 成功
}

function communicate($items , $fp = null) {
// 略
// [2] エラー時は最終的にこんな感じでreturnする
return array($this->errorGather('Error message', __LINE__), $message, $st);
}

function errorGather( $message = null , $line = null){
if( !is_null( $message ) && !$this->error_ignore){ // [3] messageは非NULLだが、error_ignore==trueなので、ここは偽
if( !is_null( $line ) ){
$message .= ' line -> '.$line;
}
$this->error[] = $message ;
}elseif( 0 === count( $this->error ) ){ // [4] これまでにエラーが起きていないとすると、ここは真
return true;
}elseif( $this->error_ignore ){
return false;
}
// 略
}

# n 2015年01月09日(金) 午後4時55分

q

# やました 2015年01月14日(水) 午後4時42分

--------------------------------------------------------------------------------
【使用目的】
PHPでHTMLメール送信の目的でqdmailを使用しています。

【環境、バージョン】
PHPバージョン 5.2.17
Qdmail ver 1.2.6b
Qdsmtp ver 0.2.0a
WEBサーバOS CentOS 5系
MTA 現在のところ未確認
PHPからのメール送信時のエンコード EUC-JP

【困っていること】
HTML送信時に、画像を複数メール本文に表示するようにしています。メールが不達の場合にMailer-DEAMONからのメールが送信元に配信されますが、そのメールには送信した
メール本文が表示されません。
画像がひとつのHTMLを送信した場合は、不達メールの本文に送信した本文(画像ひとつ)が正しく表示されます。

【送信したときのプログラム】
$mail = & new Qdmail();
$mail -> smtp(true);
$param = array(
'host'=>'smtp.xxxx.net',
'port'=> 587 ,
'from'=>$return_mail_to,
'protocol'=>'SMTP_AUTH',
'user'=>'user_name',
'pass' => '******'
);
$mail -> smtpServer($param);
$return_flag = $mail ->easyDeco(
array( $to ,'' ),
$subject ,
$body_html,
array( 'info@my-site.jp' ,'送信元氏名'), array(array('image1.jpg'),array('image2.jpg'));

--------------------------------------------------------------------------------

送信したHTMLメール本文の画像が複数になっても、不達の場合は、送信したメール本文が
そのまま'from'に却ってほしいのですが、どのようにしたらいいですか?

--------------------------------------------------------------------------------

# やました 2015年01月14日(水) 午後4時47分

さきほどの投稿の追記です。
不達ではなく、送信メールが正常に配信された場合は、本文にただしく画像が複数表示されています。
問題は不達メールのときです。

# niwa 2016年06月10日(金) 午前9時38分

お世話になります。
PHP5.5.30へ移行したところ以下の警告が表示されました。
メール自体は問題なく送信できています。

Deprecated: Assigning the return value of new by reference is deprecated in /home/srsrv/srsrv.xsrv.jp/public_html/qdmail/qdmail.php on line 661
$instance[0] = & new Qdmail();
$instance[0] = new Qdmail();
でエラーは消せるのですが・・・・
Deprecated: Assigning the return value of new by reference is deprecated in /home/srsrv/srsrv.xsrv.jp/public_html/qdmail/qdmail.php on line 3677

Deprecated: Assigning the return value of new by reference is deprecated in /home/srsrv/srsrv.xsrv.jp/public_html/qdmail/qdmail.php on line 3771

Deprecated: Assigning the return value of new by reference is deprecated in /home/srsrv/srsrv.xsrv.jp/public_html/qdmail/qdmail.php on line 3820

↓ここの対応がよくわかりません。
Strict Standards: Declaration of QdmailComponent::smtpObject() should be compatible with & QdmailBase::smtpObject($null = false) in /home/srsrv/srsrv.xsrv.jp/public_html/qdmail/qdmail.php on line 3734

# Smitha106 2016年09月25日(日) 午後8時58分

omg! cant picture how quick time pass, after August, ber months time already and Setempber may be the 1st Christmas season in my location, I genuinely really like it! gdaceecddfcegeec

# Pharmf927 2016年09月26日(月) 午後7時15分

Hello!<a href="http://www.cia9online.com/#1.html">cialis online pharmacy</a>

# Pharma497 2016年09月26日(月) 深夜1時19分

Hello!<a href="http://www.cia9online.com/#1.html">cialis online pharmacy</a>

# Pharmc611 2016年09月26日(月) 深夜1時22分

Hello! [url=http://www.cia9online.com/#2.html]cialis online pharmacy[/url]

# Pharmd212 2016年09月28日(水) 午前7時26分

Hello!<a href="http://www.cia9online.com/#1.html">online pharmacy cialis</a>

# Pharmc26 2016年09月28日(水) 午前7時26分

Hello! [url=http://www.cia9online.com/#2.html]online pharmacy cialis[/url]

# Pharmk355 2016年09月28日(水) 午前7時26分

Hello! online pharmacy cialis http://www.cia9online.com/#4.html

# Pharmc199 2016年09月28日(水) 午前7時27分

Hello!

# Pharmd243 2016年09月29日(木) 午後2時07分

Hello!<a href="http://www.cia9online.com/#1.html">online pharmacy cialis</a>

# Pharmk408 2016年09月29日(木) 午後2時08分

Hello! [url=http://www.cia9online.com/#2.html]online pharmacy cialis[/url]

# Pharmb483 2016年09月29日(木) 午後2時08分

Hello! online pharmacy cialis http://www.cia9online.com/#4.html

# Pharmk940 2016年09月29日(木) 午後2時09分

Hello!

# Pharme702 2016年09月30日(金) 午後8時26分

Hello!<a href="http://www.cia9online.com/#1.html">cialis online pharmacy</a>

# Pharmg603 2016年09月30日(金) 午後8時27分

Hello! [url=http://www.cia9online.com/#2.html]cialis online pharmacy[/url]

# Pharmg546 2016年09月30日(金) 午後8時27分

Hello! cialis online pharmacy http://www.cia9online.com/#4.html

# Pharma829 2016年09月30日(金) 午後8時28分

Hello!

# Pharmd580 2016年10月01日(土) 深夜2時55分

Hello!<a href="http://www.cia9online.com/#1.html">cialis online pharmacy</a>

# Pharmd173 2016年10月01日(土) 深夜2時56分

Hello! [url=http://www.cia9online.com/#2.html]cialis online pharmacy[/url]

# Pharma684 2016年10月01日(土) 深夜2時56分

Hello! cialis online pharmacy http://www.cia9online.com/#4.html

# Pharmg364 2016年10月01日(土) 深夜2時57分

Hello!

# Pharmb374 2016年10月03日(月) 午前9時07分

Hello!<a href="http://www.cia9online.com/#1.html">online pharmacy cialis</a>

# Pharme550 2016年10月03日(月) 午前9時11分

Hello! [url=http://www.cia9online.com/#2.html]online pharmacy cialis[/url]

# Pharmf99 2016年10月03日(月) 午前9時12分

Hello! online pharmacy cialis http://www.cia9online.com/#4.html

# Pharmd925 2016年10月03日(月) 午前9時17分

Hello!

# Pharmg721 2016年10月03日(月) 午後4時00分

Hello!<a href="http://www.cia9online.com/#1.html">cialis online pharmacy</a>

# Pharme18 2016年10月03日(月) 午後4時03分

Hello! [url=http://www.cia9online.com/#2.html]cialis online pharmacy[/url]

# Pharmd699 2016年10月03日(月) 午後4時05分

Hello! cialis online pharmacy http://www.cia9online.com/#4.html

# Pharmd703 2016年10月03日(月) 午後4時05分

Hello!

# Pharmc71 2016年10月04日(火) 午後9時48分

Hello!<a href="http://www.cia9online.com/#1.html">online pharmacy cialis</a>

# Pharme89 2016年10月04日(火) 午後9時51分

Hello! [url=http://www.cia9online.com/#2.html]online pharmacy cialis[/url]

# Pharmc340 2016年10月04日(火) 午後9時54分

Hello! online pharmacy cialis http://www.cia9online.com/#4.html

# Pharma980 2016年10月04日(火) 午後9時56分

Hello!

# Pharmb74 2016年10月04日(火) 深夜4時09分

Hello!<a href="http://www.cia9online.com/#1.html">online pharmacy cialis</a>

# Pharmg611 2016年10月04日(火) 深夜4時11分

Hello! [url=http://www.cia9online.com/#2.html]online pharmacy cialis[/url]

# Pharmd379 2016年10月04日(火) 深夜4時13分

Hello! online pharmacy cialis http://www.cia9online.com/#4.html

# Pharmb335 2016年10月04日(火) 深夜4時16分

Hello!

# Pharmc748 2016年10月05日(水) 午前9時36分

Hello!<a href="http://www.cia9online.com/#1.html">cialis online pharmacy</a>

# Pharmf341 2016年10月05日(水) 午前9時38分

Hello! [url=http://www.cia9online.com/#2.html]cialis online pharmacy[/url]

# Pharmc367 2016年10月05日(水) 午前9時41分

Hello! cialis online pharmacy http://www.cia9online.com/#4.html

# Pharmd871 2016年10月05日(水) 午前9時43分

Hello!

# Pharmd420 2016年10月05日(水) 午後3時23分

Hello! [url=http://www.cia9online.com/#2.html]online pharmacy cialis[/url]

# Pharme826 2016年10月05日(水) 午後9時10分

Hello!<a href="http://www.cia9online.com/#1.html">cialis online pharmacy</a>

# Pharmb92 2016年10月05日(水) 午後9時12分

Hello! [url=http://www.cia9online.com/#2.html]cialis online pharmacy[/url]

# Pharmf445 2016年10月05日(水) 午後9時14分

Hello! cialis online pharmacy http://www.cia9online.com/#4.html

# Pharmf362 2016年10月05日(水) 午後9時16分

Hello!


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