mb_send_mailの2重投稿を防止したい

このQ&Aのポイント
  • mb_send_mailの前後にecho分で文字を表示させたのですが、ループしている気配もありません。
  • メールが届くのは確認をしたのですがなぜか9割位の確立でメールが二通届きます。
  • どなたかこの現象を回避できる方法をお知りでしたらご教授下さい。
回答を見る
  • ベストアンサー

mb_send_mailの2重投稿を防止したい

初めて質問させていただきます。 動作環境はPHP4.3.0になります。 <? $to = "test@test.com"; $subject = "テスト"; $addheader = "From: $_POST[mail]\n"; $msg = "*************"; $to = mb_convert_encoding($to, "SJIS", "EUC-JP"); $subject = mb_convert_encoding($subject, "SJIS", "EUC-JP"); $msg = mb_convert_encoding($msg, "SJIS", "EUC-JP"); $addheader = mb_convert_encoding($addheader, "SJIS", "EUC-JP"); mb_language("Ja"); mb_internal_encoding("SJIS"); mb_send_mail($to, $subject, $msg, $addheader); setcookie("formdata", $posted , time()-1200); }; ?> 上記の用に記述をして、メールが届くのは確認をしたのですがなぜか9割位の確立でメールが二通届きます。 mb_send_mailの前後にecho分で文字を表示させたのですが、ループしている気配もありません。 どなたかこの現象を回避できる方法をお知りでしたらご教授下さい。 何卒、宜しくお願い致します。

  • PHP
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

できれば以下の事を試して頂きたいのですが メールの本文の中にリクエストを行ったIPアドレスが分かるように $_SERVER['REMOTE_ADDR'] を表示させるようにしてみてください。 2通とも同じIPならば2度押ししている可能性がありますし 何かしらのスパイソフトのせいかもしれません。 または、2通のメールのリモートIPが一致していないなら 私を以前苦しめた例がありますので参考にしてください。 スクリプトのURLですが起動する際にランダムな文字列などをつけて 起動されたりしてますか? http://xxx.xxx.xx/test.php?j5hj56dfjkfjasfw2vss というような感じです。 さらに、動作検証を行われたパソコンにウイルスバスター2006ははいっていませんか? 私も以前、会員登録システムに持ちいるメール認証システムの 開発をしていた際に似たようなシステムを作りまして ブラウザキャッシュを無効にするために スクリプトの引数にランダムな文字を引き当てて 毎回違うページを読み込んでいるような形にしたことがあります。 しかし同様に style_utaさんのような症状が発生し 悩んでいたんですが、ウェブサーバーのログを見たところ 動作検証に利用したPCからアクセスしたURLと まったく同じURLにアクセスしているクライアントがありました。 (この例ではGET メソッドを利用していましたが)) 調べてみるとウイルスバスター販売元のトレンドマイクロさんの URL収集ロボットのようで ウイルスバスター2006のURLフィルタを使用しているユーザーが サーバーに登録されていないアドレスにアクセスすると サーバーのクローラーがユーザーのクライアントより先にアクセスし アクセスし安全を確かめているようです。 この件はトレンドマイクロさんも認識済みのようで 対策を行いたい場合はクローラーのIPアドレスを 拒否するように設定してください。という回答が得られました。 もし、参考になればと思い書き込みさせて頂きました。 Webサーバーのログが確認できるならリクエスト状況を確認するとよいですよ。

style_uta
質問者

お礼

お恥ずかしい事にこれとは別で読み込んでいたjsファイルが二重の原因でした!色々とありがとうございましたm(__)m

style_uta
質問者

補足

返信が遅くなり恐縮です。 なるほど。。 現在はランダムな文字列などはつけていませんでした。 これは早速つけてみようと思います。 検証機にウイルスバスターが入っているかどうかも早急に確認してみます。 色々な可能性を教えて頂いてありがとうございます!

その他の回答 (1)

回答No.1

送信ボタンを知らない間に2回おしてたりとかではないでしょうか? メールフォームの送信ボタンを押した時にあるページを経由してスレにあるPHPに行けばいいのではないかと思います。 メールフォーム→(送信ボタン押下)→ただメール送信PHPに飛ばすだけのページ→メール送信PHP と言う感じかな?

style_uta
質問者

補足

説明が抜けており申し訳ありません。。 送信ボタンを2回押すと言うことはしてないです。 それと、現在も上記のような3枚で飛ばしているような状態です。。。

関連するQ&A

  • mb_send_mailで文字化け

    Windows環境でmb_send_mailを使い、メール送信のテスト を行っています。 文字コードの変換周りで、いろいろ試しているのですが、 うまくいきません。 Apache + PHP (Window)  ↓ メールサーバー(RedHat)  ↓ メール受信(Window) 上記の環境で、文字化けしないで、 メール送信するには、どうしたら良いのでしょうか? (コーディング例) mb_send_mail( $address, mb_convert_encoding($subject,"EUC-JP"), mb_convert_encoding($message,"SJIS"))

    • 締切済み
    • PHP
  • PHPでmb_send_mail()関数を使っときの件名について

    PHPでmb_send_mail()関数を使っときの件名について mb_send_mail()でメールの送信はできるのですが、件名(Subject)を日本語にすると8文字以上送信すると送信エラーが起こります。同じプログラムをLinuxでやるとうまくいきます。プログラムは以下のようにしています。(mail()関数を使うとこのような問題は起こりませんでした。) mb_language('Japanese'); $subject='メールテスト'; $subject=mb_convert_encoding($subject,'ISO-2022-JP','UTF-8'); $message='Webメールのテストです。'; $message=mb_convert_encoding($message,'ISO-2022-JP','UTF-8'); $head='私から送信されました。<****@****.net>'; $head=mb_convert_encoding($head, 'ISO-2022-JP', 'UTF-8'); $head=mb_encode_mimeHeader($head,'ISO-2022-JP','B'); if(mb_send_mail('****@****.com',$subject,$message,'From:'.$head)){ echo 'おくったよ。<br>'; } else{ echo 'おくれない。'; }  件名の全角での文字数を増やす方法があったら教えてください。  よろしくお願いいたします。 <システム環境>  Windows7(64Bit)  Apache2.2  PHP5.3.2

    • ベストアンサー
    • PHP
  • mb_send_mail で一部文字化けします

    mb_send_mail で一部文字化けします。 URLやキーワードとかそういった文字をいれた変数です。 基本UTF8で作ってます。 mb_language("Japanese"); mb_internal_encoding("UTF-8"); mb_regex_encoding("UTF-8"); mb_detect_order("ASCII, JIS, UTF-8, EUC-JP, SJIS"); $subject = "てすと"; $to =$email; $header .= "From:admin@example.jp\n"; $header .= "Return-Path:admin@example.jp\n"; $header .= "Date:"; $header .= date("D, d M Y H:i:s O"); $body .= "\n"; $body .= "◆URL:"; $body .= $url[$count]; mb_send_mail($to,$subject,$body,$header);

    • 締切済み
    • PHP
  • mb_send_mailで送られたメールに改行コードが入る。

    PHPのメールについてお伺いします。 php version 5.0.4 以下のようなメールを作成して、$mail1(送信先)と webmaster@hoge.comからの転送を受信しています。 ところが、$mail1の内容は改行コードは入った1行おきの表示になってしまいます。webmaster@hoge.comからの転送の方は改行されていません。 例) こんにちは。 お元気ですか。 と こんにちは。 お元気ですか。 の違いです。 改行しないようにしたいのですがどう直したらよいのでしょうか。ご教授ください。 メールソフトはqmailを使用しています。サーバーはFedora Core4です。 プログラムの1部 function sendMail($mail1,$subject,$textarea1) { $frmail = "From: xxxx@hoge.com \r\nbcc: webmaster@hoge.com"; $subject1 = mb_convert_encoding("問い合わせ","EUC-JP","auto"); $message = mb_convert_encoding(" 題目:{$subject} \n 内容: \n {$textarea1}","EUC-JP","auto"); mb_send_mail($mail1,$subject1,$message,$frmail); $mail(送信先)は関数の外部で設定しています。

    • ベストアンサー
    • PHP
  • mb_send_mail()関数のタイトルで特定の文字が入ると送信できません。

    環境:WinXP+Apache2+PHP5 mb_send_mail()でタイトルに ”時間は何時でもokです。” を入力すると、送信に失敗します。 コードは以下の通りです。よろしくお願いします。 <?php $address=$_POST['address']; $subject=$_POST['subject']; $message=$_POST['message']; $header="Content-Type: text/plain;charset=iso-2022-jp"; mb_language("Japanese"); if(mb_send_mail($address,$subject,mb_convert_encoding($message,"JIS","EUC-JP"),$header)){ print("送信完了しました"); }else{ print("エラー:送信に失敗しました"); } ?> ($subject="時間は何時でもokです。"にするとエラーになります。)

    • 締切済み
    • PHP
  • 日本語が使いたいのですが[mbstring]設定がわかりません

    環境は winxp sp2 apache 2.0.54 php 5.0.4 argosoftmailserver php.iniの設定は [mbstring] mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = Off mbstring.detect_order = auto mbstring.substitute_character = none です。足らない事があればお願いします。 下はphpの文です。 <?php $subject = "テスト"; $message = "あいうえお"; $test="日本語エンコーディングテスト"; print "$test (" . mb_detect_encoding($test) . ")<br>"; print ("mbstring.http_input=". mb_http_input() ."<br>"); print ("mbstring.http_output=". mb_http_output() ."<br>"); print ("mbstring.internal_encoding= ".mb_internal_encoding()."<br>"); $subject = mb_convert_encoding($subject, "SJIS", "EUC-JP"); $message = mb_convert_encoding($message , "SJIS", "EUC-JP"); mb_language("Japanese"); $chk = mb_send_mail('******@*******',$subject,$message,'From:***@******.dyndns.org'); if($chk==FALSE) { print "送信失敗"; } else { print "送信完了"; } ?> エンコードテストの結果は以下です。 日本語エンコーディングテスト (SJIS) mbstring.http_input= mbstring.http_output=SJIS mbstring.internal_encoding= EUC-JP よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP関数mb_send_mailで送信すると件名が文字化けしてしまいます。

    PHP関数mb_send_mailでメールの送信しているのですが、件名だけが文字化けしてしまいます。 Windows2000Server+IIS ■PHPソース mb_send_mail($strMail,mb_convert_encoding("あいうえお","JIS","auto"),mb_convert_encoding("かきくけこ","JIS","auto"),$header); ■PHP.INI設定 extension=php_mbstring.dll SMTP = localhost smtp_port = 25 sendmail_from = sample@sample.jp mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none; ■文字化けするSubject Subject: =?US-ASCII?B?GyRCJCIkJCQmJCgkKhsoQg==?= このPHPソースを別のレンタルサーバにいれ、送信すると文字化けせずに届きます。 なぜか、受信メールの文字コードがUS-ASCIIになっています。どうすればいいのでしょう? 誰かたすけてくださいーー

  • mb_send_mailでメール送信すると文字化けします

    mb_send_mailを使って、 mb_send_mail($_POST[cmail], $subject, $mailmsg, $header); で送信すると文字化けします。 お願い申し上げますが、お願い垂?上げます。になってしまいます。 一応、 mb_language('Japanese'); mb_internal_encoding("SJIS"); をmb_send_mailの前に指定してあるのですが。 原因が分からないので、何方か分かる方は、ご教授お願いします。

    • ベストアンサー
    • PHP
  • メールフォームの差出人を任意のアドレス表示に

    PHPでメールフォーム作ったのですが、差出人のアドレスを任意のものにしたいのです。 PHPは先月から始めた超初心者です。 いろいろな質問掲示板を参照にやっては見るのですが、出来ません。 //メール送信部分 mb_language("ja"); mb_internal_encoding("Shift-JIS"); $mailfr = "From:xxxx@oooo.oo"; $to = "aaa@dd.bn"; $subject = "タイトル"; $thanks = "コメント"; $headers = mb_convert_encoding($thanks, "SJIS","EUC-JP"); $message .= mb_convert_encoding($chuumonnaiyou, "SJIS","EUC-JP"); $message .= "\n\n"; $subject2 = "タイトル"; $thanks2 = "お礼メッセージ"; $headers2 = mb_convert_encoding($thanks2, "SJIS","EUC-JP"); $message .= "\n\n"; $message .= $copyright; mail($to, $subject, $message, $headers, $mailfr); ←上記に設定したメールアドレスに届く内容。 mail($email1, $subject2, $message, $headers2, $mailfr); ←フォームを利用して送ってくれた方への内容。 これも合っているのかわからないのですが、メールを送信も出来るし、受信も出来ています。 文字化けを起こしていたので、現在の型になりました。 (文字化けは、こちらの掲示板を利用して何とか解決しました。) もしかして、すごく簡単な質問なのかも知れませんが、調べては試しての繰り返しをしているのですがなかなか出来なくて困っています。 ぜひ、ご教授お願いします。

    • ベストアンサー
    • PHP
  • mb_send_mail()に関しまして

    初めて投稿させて頂きます。 PHPを触り始めて間もない者ですが、よろしくお願い致します。 現在、PHPの勉強を兼ねまして空メールを送るプログラムを作成しております。 フォームにボタンを1つ設け、そのボタンを押下すると指定のあて先に空メールを送るという簡単なものです。 【html内のボタンの設定】 <form name="top" method="post" action="a.php"> <input type="submit" value="空メールを送る"/> </form> 【a.php(正しく送れたかを知るためにメッセージを表示するようにしてあります)】 <html> <head> PHPメールテスト送信 </head> <body> <? $address = '送信先メールアドレス'; $subject = ''; $message = 'PHPからのテストメール'; $header = "Content-Type: text/plain;charset=iso-2022-jp"; mb_language("Japanese"); if(mb_send_mail($address,$subject, mb_convert_encoding($message,"JIS","EUC-JP"),$header))←エラー行 { print("送信成功!!"); } else { print("エラー:送信失敗!!"); } ?> </body> </html> このプログラムを実行すると以下のエラーが発生します。 Warning: mb_send_mail() [function.mb-send-mail]: "sendmail_from" not set in php.ini or custom "From:" header missing in C:\Program Files\xampp\htdocs\top.php on line 15 参考書を見ながらプログラムを作成したのですが、記述、もしくは設定が関係しているのでしょうか。 分かる方には非常にくだらないことかもしれませんが、ご教授お願い致します。

    • 締切済み
    • PHP

専門家に質問してみよう