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
No.5ベストアンサー
- 回答日時:
連投失礼。
サーバへのpostにAjaxとか使ってるなら、Firefoxにfirebug入れてモニタリングするのもいいかもしれない?
(私はProxomitron使ってるけど・・・Vistaで使えるかわからない)
この回答への補足
全体お礼を書くところがないのでこちらから失礼します。
申し訳ありませんでした。大まかですが、原因が判明しました。
子ウィンドウを開いただけでNGとなってしまうようですので、javascriptは悪くないようです。
すべてのウィンドウのオープン時にセッションハイジャック対策用にセッションIDの再構築を行っているのですが、そのあたりが原因かなと推測できました。(send直前に値確認をして大丈夫なのになぜ?という問題は残りますが)
以降はphp側の問題(たぶんプログラムバグ)となりますので、こちらの質問はcloseさせていただきます。
皆様、ご助力いただき本当にありがとうございました。
ありがとうございます。現在、Ajaxは使用していません。
ただ単に子ウィンドウから
window.opener.document.form1.to.value = 値;
でセットしたtextboxの値を親ウインドウの決定ボタンを押したときにPOSTしているだけなんですが・・・
取得した値をtrim()に通しているので、もしnullコードなどのコードが入っていればサーバー側では取れていると思います。
No.4
- 回答日時:
送信データの確認方法ですが、
なるべく早い段階のデータを捕まえてOKの場合とNGの場合を比べたほうがいいような気がする。
ダンプとかじゃなく単純に送信formのmethodをpostからgetに変更してみれば、ブラウザが送信しているデータはURL欄で確認できますね。(multipartじゃなければ)
No.3
- 回答日時:
form1.to では無く別のパラメーターを、Mail の To: に入れてるとか、JavaScriptとは無関係な所でミスってた
りしませんか?回答が遅くなり申し訳ありません。
メール送信時(サーバー側)のsendへの引渡しToをvar_dump調べてみたところ、手入力と子ウィンドウでセットしたToの値(メールアドレス)に文字コードや値に違いがなかったので、じゃあ、JSのほうかなと推測しました。
No.2
- 回答日時:
> なにか見えない値がくっついて入ってしまうのでしょうか
それを確認できるのはあなただけよ。
私の手元にはそのプログラムはないもの。
ちなみに
>前後を[]で囲むとよりいいわ
はphpでやった方がいいわ。
htmlに出さずにファイルに出力するようにするとなおよし。
>はphpでやった方がいいわ。
>htmlに出さずにファイルに出力するようにするとなおよし。
バイナリ出力でファイル書き出しをしてみました。
OK時、NG時ともに同じバイト数が出力されています。
テキストエディタでは同じ内容でしたが、ダンプ比較できるようなフリーのソフトを探して比較してみます。
No.1
- 回答日時:
子ウィンドウから入力しようと
直接入力しようと
それはクライアント側の処理よね。
サーバには一切関係ないわ。
となると、
単純に送信データか
もしくは
子ウィンドウを表示する際に何かやっている
としか思えないわ。
メールアドレスのドメイン部がおかしいんじゃないかしらと
勝手に想像。
とりあえず、
・Toへの直接入力
・子ウィンドウからメールアドレス固定でToへ代入
の2つで
var_dumpじゃなく、
もっと直接的に受け取ったメールアドレスを出力して確認してみるのね。
前後を[]で囲むとよりいいわ。
たぶん余計な何かがついてたりするんじゃないかしら。
この回答への補足
住所録からメールアドレスを選択して親ウィンドウにメールアドレスが入る。
↓
Toのテキストボックスに入った値を削除して、手入力でメールアドレスを入力。
この手順でもNGになってしまいます。一度windows.openerでセットするとダメなようです。
なにか見えない値がくっついて入ってしまうのでしょうか。
ご回答ありがとうございます。
>もっと直接的に受け取ったメールアドレスを出力して確認してみるのね。
>前後を[]で囲むとよりいいわ。
以下の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つ試してみたことがありますので補足に投稿します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) laravel 本番環境でメールが送れません。 1 2023/02/17 17:57
- Gmail 【お助け!】サーバーからのメール送信でGmailに送信されない問題について 1 2023/06/20 22:03
- 英語 An evolution in surgical protocols has resulted in 4 2023/03/10 09:23
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript javascriptで入力フォームが空欄の時にアラートによるエラーを出すコードを書いています。 2 2023/06/13 17:58
- オープンソース AWSドメイン名でApacheテスト・ページを表示させる方法を教えて下さい。 1 2023/04/26 15:59
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- その他(Microsoft Office) outlookで宛先が異なるメールを一括送信する方法 outlookで200人それぞれをtoに指定し 2 2023/08/03 21:24
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- 英語 It will most likely be necessary to perform a spli 2 2023/03/26 09:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのシート上に別のシー...
-
VBAで任意のウインドウのサイズ...
-
Javascript_submit()完了後に処...
-
VBの画面で、全ウィンドウを一...
-
JavaScriptで指定Windowを最大...
-
親ウィンドウから子ウィンドウ...
-
ウィンドウ名からウィンドウオ...
-
GetAncestorのGA_ROOTとGA_ROOT...
-
window.close()で確認メッセー...
-
子→親ウインドウへデータを受け...
-
ウィンドウサイズを開いたとき...
-
JavaScriptでPDFを新規ウィンド...
-
window.openで新しいページを後...
-
VBScriptでリンクをクリックし...
-
ウィンドウの2重起動を防止したい
-
Access2007では、フォームのウ...
-
1クリックでモーダルを開いてか...
-
秀丸エディタでHTMLタグテキス...
-
<EXCEL/VBA> OUTLOOKのウインド...
-
デスクトップ画面を4分割するには
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのシート上に別のシー...
-
Javascript_submit()完了後に処...
-
VBAで任意のウインドウのサイズ...
-
ウィンドウの2重起動を防止したい
-
window.Openをモーダルにできま...
-
<EXCEL/VBA> OUTLOOKのウインド...
-
ウィンドウ名からウィンドウオ...
-
VBの画面で、全ウィンドウを一...
-
子ウィンドウの存在確認
-
初心者javascript グーグルクロ...
-
インタネットからPDFファイルだ...
-
親ウィンドウから開いた子ウィ...
-
子ウィンドウより親ウィンドウ...
-
1クリックでモーダルを開いてか...
-
子ウィンドウを常に手前表示、...
-
ポップアップと作業ウィンドウ...
-
IEでのみ発生するJavaScriptエラー
-
ブラウザ(IE)からエクスプロー...
-
JavaScriptで指定Windowを最大...
-
リンク時、親ウインドウを最前...
おすすめ情報