アプリ版:「スタンプのみでお礼する」機能のリリースについて

webメーラーをphpで作成中ですが、住所録を子ウィンドウで一覧表示、対象となるメールアドレスをクリックすると親ウィンドウのTo欄にメールアドレスがセットされるようなjavascriptを組んでいます。
To欄に直接メールアドレスを入力してのメール送信はOKなのですが,住所録から選択したメールアドレスでは送信時にエラーとなってしまいます。
お知恵を拝借させてください。

いろいろ試した結果、JS側の問題かなと推測したのでこちらのカテゴリに投稿します。カテゴリ違いであればご指摘ください。
文字数制限もある為、必要な情報は随時出します。

PHP側でのsend時のエラー:
Failed to connect to :25 [SMTP: Failed to connect socket: $addr cannot be empty (code: -1, response: )]
子ウィンドウのJS
function emailSet(val) {
window.opener.document.form1.to.value = val;
window.close();
}

環境等:
クライアント(WindowsVista)
ブラウザ(IE7/Firefox)
サーバー(Windows2003)PHP5/Smarty/PEAR
親、子ウィンドウ共にShift-JIS

現在まで調べたこと:
手入力したときも住所録からセットしたときもphpのvar_dumpで見た限りではまったく同じでした。
Toへの直接入力・・・OK
親ウィンドウにボタンを配置してjavascriptでToへメールアドレスを代入・・・OK
子ウィンドウからメールアドレス固定でToへ代入・・・NG

A 回答 (5件)

連投失礼。


サーバへのpostにAjaxとか使ってるなら、Firefoxにfirebug入れてモニタリングするのもいいかもしれない?
(私はProxomitron使ってるけど・・・Vistaで使えるかわからない)

この回答への補足

全体お礼を書くところがないのでこちらから失礼します。
申し訳ありませんでした。大まかですが、原因が判明しました。
子ウィンドウを開いただけでNGとなってしまうようですので、javascriptは悪くないようです。
すべてのウィンドウのオープン時にセッションハイジャック対策用にセッションIDの再構築を行っているのですが、そのあたりが原因かなと推測できました。(send直前に値確認をして大丈夫なのになぜ?という問題は残りますが)

以降はphp側の問題(たぶんプログラムバグ)となりますので、こちらの質問はcloseさせていただきます。
皆様、ご助力いただき本当にありがとうございました。

補足日時:2009/03/19 11:36
    • good
    • 0
この回答へのお礼

ありがとうございます。現在、Ajaxは使用していません。
ただ単に子ウィンドウから
window.opener.document.form1.to.value = 値;
でセットしたtextboxの値を親ウインドウの決定ボタンを押したときにPOSTしているだけなんですが・・・
取得した値をtrim()に通しているので、もしnullコードなどのコードが入っていればサーバー側では取れていると思います。

お礼日時:2009/03/19 10:20

送信データの確認方法ですが、


なるべく早い段階のデータを捕まえてOKの場合とNGの場合を比べたほうがいいような気がする。

ダンプとかじゃなく単純に送信formのmethodをpostからgetに変更してみれば、ブラウザが送信しているデータはURL欄で確認できますね。(multipartじゃなければ)
    • good
    • 0

form1.to では無く別のパラメーターを、Mail の To: に入れてるとか、JavaScriptとは無関係な所でミスってた

りしませんか?
    • good
    • 0
この回答へのお礼

回答が遅くなり申し訳ありません。
メール送信時(サーバー側)のsendへの引渡しToをvar_dump調べてみたところ、手入力と子ウィンドウでセットしたToの値(メールアドレス)に文字コードや値に違いがなかったので、じゃあ、JSのほうかなと推測しました。

お礼日時:2009/03/19 10:12

> なにか見えない値がくっついて入ってしまうのでしょうか


それを確認できるのはあなただけよ。
私の手元にはそのプログラムはないもの。

ちなみに
>前後を[]で囲むとよりいいわ
はphpでやった方がいいわ。
htmlに出さずにファイルに出力するようにするとなおよし。
    • good
    • 0
この回答へのお礼

>はphpでやった方がいいわ。
>htmlに出さずにファイルに出力するようにするとなおよし。
バイナリ出力でファイル書き出しをしてみました。
OK時、NG時ともに同じバイト数が出力されています。
テキストエディタでは同じ内容でしたが、ダンプ比較できるようなフリーのソフトを探して比較してみます。

お礼日時:2009/03/18 21:09

子ウィンドウから入力しようと


直接入力しようと
それはクライアント側の処理よね。
サーバには一切関係ないわ。
となると、
単純に送信データか
もしくは
子ウィンドウを表示する際に何かやっている
としか思えないわ。
メールアドレスのドメイン部がおかしいんじゃないかしらと
勝手に想像。

とりあえず、
・Toへの直接入力
・子ウィンドウからメールアドレス固定でToへ代入
の2つで
var_dumpじゃなく、
もっと直接的に受け取ったメールアドレスを出力して確認してみるのね。
前後を[]で囲むとよりいいわ。

たぶん余計な何かがついてたりするんじゃないかしら。

この回答への補足

住所録からメールアドレスを選択して親ウィンドウにメールアドレスが入る。

Toのテキストボックスに入った値を削除して、手入力でメールアドレスを入力。

この手順でもNGになってしまいます。一度windows.openerでセットするとダメなようです。
なにか見えない値がくっついて入ってしまうのでしょうか。

補足日時:2009/03/18 20:04
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
>もっと直接的に受け取ったメールアドレスを出力して確認してみるのね。
>前後を[]で囲むとよりいいわ。
以下のJSを書いて試してみました。
子ウィンドウ:
function emailSet(val) {
var owner = window.opener;
owner.add_to('test@example.com');
window.close();
}
親ウィンドウ:
function add_to(val) {
document.form1.to.value = "[" + val + "]";
}
これで試してみましたが,間に[]と引数の間になにも入っていないようです。(見た目)

1つ試してみたことがありますので補足に投稿します。

お礼日時:2009/03/18 20:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!