質問 > フロント機能 > 商品購入完了時にメール配信されない(v2.0.1) |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
orign |
投稿日時: 2008/1/17 6:57
対応状況: −−−
|
常連 登録日: 2007/12/20 居住地: 投稿: 46 |
商品購入完了時にメール配信されない(v2.0.1) 似たような問題で先行してv1版での質問スレッドがありましたが、v2でのことなので別スレッドにしました。
現在v2.0.1で評価中なのですが、ご注文完了時の「控えメール」が届きません。 お客様宛は問題なく送信されます。 「お問い合わせ」側のプログラムではメール送信をお客様宛と管理者宛に別個送信しています。 それに対してご注文完了時の場合には、お客様宛メールの「bcc」として管理者にメール控えが送られるように組まれています。 ルーチン「setItem」を見たら、第10パラメータにccも使えるようだったので、試しにccもセットするようにしてみました。 しかし、bcc分もcc分も届きません。 勿論メールアドレスはプロバイダの異なる3種類を試してみましたが、そのアドレスをお客様とするメールは届きますが、管理者としてbcc/ccにしても届きません。 どこかチェックするべき事項等、なにか思い当たる方がいらっしゃいましたら、ご助言をお願い致します。 |
orign |
投稿日時: 2008/1/17 7:02
対応状況: −−−
|
常連 登録日: 2007/12/20 居住地: 投稿: 46 |
Re: 商品購入完了時にメール配信されない(v2.0.1) 追記です。
ccを追加した場合、お客様宛メールのメールヘッダ部分にはccとして管理者メールアドレス相当がちゃんと出てます。 従いまして、bccやccへのメールアドレス設定までは行えていて、実際のメール送信になにかあるのかと思えます。 |
orign |
投稿日時: 2008/1/18 2:40
対応状況: −−−
|
常連 登録日: 2007/12/20 居住地: 投稿: 46 |
Re: 商品購入完了時にメール配信されない(v2.0.1) 暫定的に自己解決しました。
ただし確信が無く、技術有る方々のフォローを頂ければ幸いです。 まず、管理者宛控えが届かない原因ですが、メール送信に利用している「send」へのパラメータに有るようです。 私が調べたところ、sendを利用してbcc宛にも送信する場合には、第一パラメータの構造を代える必要があるようです。 まだ詳細を調べてないので判りませんが、PHPバージョンにも影響されるのかも知れません。 そのあたりも、詳しい方の解説を頂けると幸いです。 私が改造内容は下記の通りです。 まず、\data\class\SC_SendMail.php内の // TXTメール送信を実行する function sendMail() { $header = $this->getTEXTHeader(); // メール送信 $result = $this->objMail->send($this->to, $header, $this->body); if (PEAR::isError($result)) { GC_Utils_Ex::gfPrintLog($result->getMessage()); GC_Utils_Ex::gfDebugLog($header); return false; } return true; } をコピーして暫定的に「2」を作り、パラメータ形式を変更したのが下記。 // TXTメール送信を実行する(bcc付き) function sendMail2() { $recipients = array('To' => $this->to, 'Bcc' => $this->bcc); $header = $this->getTEXTHeader(); // メール送信 $result = $this->objMail->send($recipients, $header, $this->body); if (PEAR::isError($result)) { GC_Utils_Ex::gfPrintLog($result->getMessage()); GC_Utils_Ex::gfDebugLog($header); return false; } return true; } 次に\data\class\helper\SC_Helper_Mail.php内の「受注完了メール送信ファンクション sfSendOrderMail」の終わりのあたりにある下記行を一部変更。 if ($objSendMail->sendMail()) { ↓ if ($objSendMail->sendMail2()) { 一応これで当方のテストでは問題ないようです。 (お客様宛も、管理者宛控えも届きます。) 変更したコード部分など、ソフト技術のない私が適当に書いた物のため、なにか問題があるかもしれません。 技術のある方々のフォローを頂けると幸いです。 |
tao |
投稿日時: 2008/1/18 3:02
対応状況: −−−
|
一人前 登録日: 2007/12/28 居住地: 東京 投稿: 82 |
Re: 商品購入完了時にメール配信されない(v2.0.1) 私も始めてPHPからメールを送るときに少し苦労しました。
EC-CUBEでメールを送る際はPEARのMail.phpを使用しているのですが、このMail.phpではメールの送信プロセスでmail関数でsendmailを使用してメールを送っています。 このmail()には制限がいくつかあります。 詳しくはここを参照下さい。 また、通常のメールにはヘッダーにはASCII文字しか格納できません。 日本語を利用するためにはISO-2022-JPでエンコードして送っています。凄く簡単に言うと「基本的にメールはJISエンコード」と覚えていました。 今回の様にメールのヘッダにBCCなどを含める場合はこのmailに追加のヘッダ情報を渡す必要があったのですが、これもちゃんと日本語がエンコードされていて改行コードが入っていて70文字以上無い事が条件になってくると思います。(少し違っているかもしれませんが) メールに関しての細かい解説は他のサイトにいっぱいあるので詳細はそちらを参照して下さい。 結論から言うと日本語が入ったメールを送る際はmail()ではなくmb_send_mail()を使用した方が良いという事です。 私の場合はメール関連のトラブルはほとんどコレで解決しました。 なのでmail()をmb_send_mail()に変えてはどうでしょうか? |
orign |
投稿日時: 2008/1/18 3:13
対応状況: −−−
|
常連 登録日: 2007/12/20 居住地: 投稿: 46 |
Re: 商品購入完了時にメール配信されない(v2.0.1) 早速のフォロー、ありがとうございます。
実は私も「sendでなく、mb_send_mailを使えば良いんじゃないのか?」と思ってました。 リファレンス解説本とかを読みまくった結果として。(^^) とにかく私はアセンブラ屋(組み込み屋)なので、PHPのPの字も判らず苦労しました。 0番地割り込みからのコード書く方が、間違いなく楽です。 パソコンアプリは各種リファレンス本がないと、なにがなにやら。 とにかく、あえて全箇所ともsendを使っているのはなにか理由が有ってのことか?が判断できず、とりあえずsendのままで暫定解決を目指しました。 (コードにはそれなりにそうした理由があると思われたので。) このあたりは開発陣の方々の判断を待ちましょう。 |
tao |
投稿日時: 2008/1/18 3:27
対応状況: −−−
|
一人前 登録日: 2007/12/28 居住地: 東京 投稿: 82 |
Re: 商品購入完了時にメール配信されない(v2.0.1) アセンブラ!
凄いですね、まったく未知の領域です。私から見るとアセンブラはもはや言語ではなく記号と計算式にしか見えません。 あれを読める人はちょっと尊敬してしまいます。 mail()に関してですが多分EC-CUBEは日本でしか使わないのでmb_send_mail()に変えちゃっても問題無いと思います。 ただ完成されたPEARなどのライブラリには手を加えないのが普通みたいです。 |
orign |
投稿日時: 2008/1/18 4:15
対応状況: −−−
|
常連 登録日: 2007/12/20 居住地: 投稿: 46 |
Re: 商品購入完了時にメール配信されない(v2.0.1) いや、単に私がソフト屋初めて制御ソフト部署に配属となった頃はアセンブラしかなかったんですよ・・・事実上。
CPUがZ80とか8085の時代ですから。 C言語が開発され制御で使われだしたので、その関係でC言語も使えます。 今回わけあってEC-CUBEのカスタマイズをすることになりましたが、途方に暮れました正直な話。 50歳近い私が、何故に?と。 PHPとはなんぞや?スタイルシート???ってなもので。 データベースも言葉だけ知っていて、マイSQL?ポスグレ?なにそれ?状態。 幸いPHPがC言語ライクであったために、ソースを見ているウチになんとなく判るようになったのが救いでした。 年末から4週間ほどかかりましたが、ようやく一通りのカスタマイズが完了しそうです。 (まさか、デバッグ作業することになるとは思いませんでしたが。) あとは知人のCG屋にボタン画像等のデザインをやって貰うだけかな? 新しい言語類へのチャレンジは大変に勉強になりました。 ただし、PHPの関数はゆうに1000件以上あるようで、とても私の頭じゃ覚えられません。 狭い「四畳半」みたいな組み込みの世界じゃないと無理です。(^^) パソコンアプリ組む方々のほうが、余程偉大に思えます。 ps:パールと呼ばれるものとPHPは別物ですよね? もう少し勉強しないと、その程度の状況なので。 HTMLとXMLもなにがどう違うのか理解できないし。 |
nanasess |
投稿日時: 2008/1/18 9:22
対応状況: −−−
|
神 登録日: 2006/9/9 居住地: 投稿: 2303 |
Re: 商品購入完了時にメール配信されない(v2.0.1) 大河内です.
引用:
EC-CUBE 1.x までは, mb_send_mail() 関数が使用されていたのですが, 2.0.0 になって, Pear::Mail を使用するようになりました. 2.0.1 の Pear::Mail では, デフォルトで SMTP バックエンドを使用するため, こちらが正常に動作すれば問題無いのですが, SMTP サーバーが使用できない場合のために, 他のメールバックエンドも使用できます. http://pear.php.net/manual/ja/package.mail.mail.intro.php ただ, この中の mail バックエンドは日本語など, マルチバイト文字列の使用を考慮されておらず, 文字化けなどの不具合が発生します. この, mail バックエンド内で使用している mail() 関数を mb_send_mail() に置きかえるのもひとつの手段なのですが, PHP のバージョンによっては不具合が発生する可能性があるので万能ではありません... http://bugs.php.net/bug.php?id=34565 そこで, 現状では(SMTPサーバーさえ使えれば問題の少ない) SMTP バックエンドの使用がデフォルトとなっています. tao 様や, orign 様の環境で問題無く動作するようでしたら良いと思いますがいかがでしょうか. # 根本解決できるようなパッチが作れれば良いのですが, まだ検討中だったりします... |
ramrun |
投稿日時: 2008/1/18 11:07
対応状況: −−−
|
仙人 登録日: 2006/11/3 居住地: 投稿: 789 |
Re: 商品購入完了時にメール配信されない(v2.0.1) あの、すみません。
よかったら教えてください。 この件、自分も時間があったら調べようと思っていたんですが、ようするにrecipientsにtoしか設定していなかった、ということでよいのでしょうか? 自分もネットで少々調べたときに、「headersしか設定していないからbccに届かないんだよ」みたいな記事をみつけたので... PEAR::Manual Mail::Send() |
tao |
投稿日時: 2008/1/18 19:29
対応状況: −−−
|
一人前 登録日: 2007/12/28 居住地: 東京 投稿: 82 |
Re: 商品購入完了時にメール配信されない(v2.0.1) ご指導ありがとうございます。
私はどちらかと言うと邪道な方なので、その環境での問題解決を最優先に作業してしまっています。 現状、EC-CUBEでメールの文字化けは私の環境では起こっていませんのでそのまま使用しています。 PHPのバージョンによって問題出るのであれば根本解決は難しそうですね。 何か解決策が見つかったらまた書き込みます。 余談ですが、明日発売の公式ガイドブック楽しみにしています。
|
(1) 2 3 » |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |