将来の日時を設定して、メールを送信

このQ&Aのポイント
  • PHP5とMysql5を使用して、将来の日時を設定してメールを送信する方法について教えてください。
  • 現在は複数のメールアドレスにそれぞれにメールを出していますが、送信時間を設定できるように変更したいです。
  • 送信予定日時、タイトル、本文、送信先メールアドレスをmysqlに保存する方法と、cronとPHPを使用して送信する方法について教えてください。
回答を見る
  • ベストアンサー

将来の日時を設定して、メールを送信

PHP5 Mysql5 で、運用しています。 現在は複数のメールアドレスにそれぞれにメールを出していますが、 送信時間を設定できるように変更しています。 【現在】 $sql =" select * from member order by id" ; $rst = mysql_query($sql, $con); ココはテーブルで一覧で出して、[checkbox]で 選択できるようにしています。 while($rows = mysql_fetch_array($rst)) { ・ ・ <input name=\"mailid[{$i}]\" type=\"checkbox\" value=\"".$rows["id"]."\" checked> ・ ・ mb_send_mail($to, $title, $honbun, "From:$from"); } これを発信時間を設定して送りたく変更をしています。 【フォームから受信】 $mailid= $_POST["mailid"]; //チェックボックスにチェックを入れると送信 $title= $_POST["title"]; $honbun= $_POST["honbun"]; $mon= $_POST["mon"]; $day= $_POST["day"]; $time= $_POST["time"]; メールの送信フォームから上記データを送って、もう一度ココで 送信フォームページと同じように [while] で[mail] を取りだして 送信予定日時、タイトル、本文、送信先メールアドレス をmysql に保存したいのですが、送信先メールアドレスはどのように保存したらいいのでしょうか? 一つのフィールドに sample@sample.com,sample@sample.com,sample@sample.com,sample@sample.com, このように全部入れていいのでしょうか? **最大500件ほどになります その後、cron で php を動かして日時でマッチした列を送信するように しようと思っています。 *このような時にはPHPは使用しないと言うのは読みましたが、PHPしか  理解できそうに無いので、この方法で実現しようと思っています。 宜しくお願いいたします。

  • MySQL
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>一つのレコードに沢山のメールアドレス なるほど、そういうことですね。 mail関数は複数のメアドがカンマでつながっていれば一度に おくれたような記憶が・・・ ただしtoで送るのにメアドが羅列されているとユーザーとしては 個人情報的に嫌悪感を覚えるでしょうから、やはり1通1通 アドレスを書き込んで送る方がよいでしょうね カンマで区切られているならsplitなどで配列に落として、 foreachでまわせば1通ごとに分解できそうな気がします。 またそもそもがmysql側で正規化してデータを管理すれば 普通はメアドの数だけ1件1データで得られると思いますけど

kiyomidesuyo
質問者

お礼

>またそもそもがmysql側で正規化してデータを管理すれば >普通はメアドの数だけ1件1データで得られると思いますけど ココは理解できなかったのですが。。。 この作業が終わったら、勉強してみます。 アドバイスの通り、[split] で分解して配列に入れて うまく行くようになりました。 後は、web からアクセスできない所へ置いて cron で動かしてみます。 いつも色々とトライアンドエラーでやってみるのですが、 あまりにうまく行かないと、全く不可能なことをやろうとしているのではないかと思い。 心が折れそうに・・・ そんな時に、こちらにご相談させていただいています。。。 いつもアドバイスありがとうございましたm(__)m

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

cronを理解できている前提で2つやり方がありそうです。 一つはPHPのCLIモードでPHPのスクリプトをダイレクトに実行すること。 もう一つは、アクセスするとメールを送るようなページをPHPで組んで 公開しておきcronでwgetなどでそのページにアクセスすること。 前者は統合してやる分オーバーヘッドがすくない利点がありますが CLIの場合書式が通常と異なったり、実行ユーザーの設定に 意識しなくてはいけないなどなにげにめんどう。 後者はhttpベースでやる分、無駄が多いですが、タイマーと メール送信サーバーが異なる分、メンテナンス性がたかまります。

kiyomidesuyo
質問者

補足

いつも的確なアドバイスありがとうございます。 **PLCモードと言うものは知りませんでした。 >もう一つは、アクセスするとメールを送るようなページをPHPで組んで >公開しておきcronでwgetなどでそのページにアクセスすること。 この方法でやろうとしています。 今、時間、本文、あと メールアドレス(100個程)をそれぞれのフィールに入れて、 Mysql に保存しています。 今までは、一つのレコードに一つのメールアドレスしかないので [while]  でループして送信できていましたが、 一つのレコードに沢山のメールアドレスがあるのでどうしたらいいか悩んでいます。 メールアドレスの分だけレコードを作らないと出来ないでしょうか? $address = split(",", "$rows['address']"); これで分けたらいいのかな? とは思うのですが それから先が全く判りません。 よろしければ、その件を教えていただけませんか? 宜しくお願いいたします。

関連するQ&A

  • メンバー会員へメールの一斉送信にて、

    メンバー会員へメールの一斉送信にて、 メンバー会員(MySQL)のメールアドレス宛てにメールを一斉送信するPHPコードを作成しています。 ---menber--- ID |name |email 1 |田中 |aaa@bbb.jp 2 |山田 |bbb@ccc.jp 3 |山中 |ccc@ddd.jp ---meilform.html--- <form action="send.php" method="post"> <font size="2">メールタイトル</font><input type="text" name="title" /><br /> <font size="2">メール文書</font><textarea name="honbun" cols="60" rows="7"></textarea><br /> <input type="submit" value="メール送信" /> </form> ---send.php--- <?php mb_language("japanese"); mb_internal_encoding("UTF8"); //送信先アドレス抽出 $recordSet = mysql_query('SELECT * FROM menber ORDER BY email DESC'); while ($email = mysql_fetch_assoc($recordSet)) { $mailto = $_POST['email']; $title = $_POST['title']; $honbun = $_POST['honbun']; $mailfrom = "<zzz@yyy.jp>"; if (!mb_send_mail($title,$honbun,"From:".$mailfrom)) { echo '<br />メール送信失敗。'; } else { echo '<br />メール送信完了。'; } } ?> エラー表示では send.php の if (mb_send_mail($title,$honbun,"From:".$mailfrom)) のラインが表示されているのですが、送信先アドレスの抽出と while分の繰り返し処理のところも自信がありません。 所々変えて試しておりますが中々うまく行きません。 どなたかご指導お願いいたします。

    • ベストアンサー
    • PHP
  • メール送信されたurlを取得したい

    HTML_QuickFormを使ってフォームをつくる予定なのですが どこのページから送信されたのかを取得したいと思っているのですが どのような方法がありますでしょうか? 具体的には http://example.com/sample1.htmlと http://example.com/sample2.htmlと http://example.com/sample3.htmlに フォームがありどこのページから送信されたかを取得したいと いうことです。 また、postでメール送信するのですがメール送信時に取得した urlを表示させる場合どのようにすればいいのでしょうか?

    • 締切済み
    • PHP
  • WHERE文の中で、MYSQLにINSERTが出来ない。

    メールを指定した時間に送信しようとしています。 手順はMYSQLに送信したい時間とメールの色々を入れて、 CRONで現在時間を調べて、合致したものを送信する。 このような手順で実現しようとしていますが、 最初でつまずいています。 送信先メールアドレスを while で抽出しながら MYSQLへインサートするつもりですが 一度しかインサートしてくれません。 インサートのsqlを[print $sql;]で、表示したものをphpMyAdminで SQL を実行すると キチンと挿入できます。 **3回分まとめてSQL を実行してもうまく挿入できます。 前のページから送ったものは全て[print] で、思い通りの結果が表示します。 どなたか、ご教授お願いいたします。 $sql = "select count(*) as cnt from customer WHERE customerID IN (1,2,3,5,8)"; $rst = mysql_query($sql, $con); $col = mysql_fetch_array($rst); $tcnt = $col["cnt"]; mysql_free_result($rst); print $tcnt."通送信<br />"; $subject ="これはPOSTで送りました"; $honbun ="これはPOSTで送りました"; $from = '送信元メールアドレス'; $jikan = "これはPOSTで送りました"; $sql ="select * from customer WHERE customerID IN (1,2,3,5,8)"; $rst = mysql_query($sql, $con); while($col = mysql_fetch_array($rst)) { $customerID= $col['customerID']; $name = $col['name']; $mail = $col['mail']; i++ $sql = "INSERT INTO mail_queue_timer (timermailID,customerID, jikan ,sender , recipient ,headers, body ) VALUES ($timermailID, $customerID,$jikan , \"$from\" , \"$mail\" ,\"$subject\" , \"$honbun\" ) "; $rst = mysql_query($sql, $con); }

    • ベストアンサー
    • PHP
  • PHPのmail関数で送信者を設定できません

    // 表題 $subject = $_POST['news_title']; // 本文 $message = ' <html> <head> <title>'.$_POST['news_title'].'</title> </head> <body> '.$_POST['textarea_id'].' </body> </html> '; // HTML メールを送信するには Content-type ヘッダが必須 $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n"; // 追加のヘッダ $headers .= 'To: '.$user_name.'<'.$email.'>'. "\r\n"; //$headers .= $_POST['news_title'] . "\r\n"; $headers .= 'From: 姓名 <myname@mymail.com>' . "\r\n"; // 送信する if(mail($to, $subject, $message, $headers)){$mes .= $email.'にメールを送信しました。 ';}else{$mes .= $email.'にメールを送信する際にエラーが発生しました。 ';} (後略) のようなコードになっていますが。$headersでFrom:を設定したのに、受信するメールには、送信者として、なになに@box450.bluehost.comが表示されます。どうやって正しく送信者を設定できるのでしょうか 因みにapacheのhttpd.confやPHPのphp.iniを変更できません。 わかる方がいらっしゃいましたら、ご回答をよろしくお願いします。

    • ベストアンサー
    • PHP
  • phpでメール送信

    phpでメール送信を行ってもメールが来ません。 普通のメールアドレスです。使っているサーバーはちゃんとphpが つかえるようです。ソースは下記です。訂正するところなどありまし たらよろしくお願いします。 ソース:(ホーム)<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>sample</title> </head> <body> <form action="1.php" method="post"> ホームページの名前:<br> <input type="text" name="subject" size="30" value=""><br> ホームページのアドレス:<br> <input type="text" name="name" size="30" value=""><br> メールアドレス:<br> <input type="text" name="mail" size="30" value=""><br> ホームページの紹介文:<br> <textarea name="message" cols="30" rows="5"></textarea><br> <br> <input type="submit" value="送信する"> </form> </body> </html> 送信側:<?php mb_language("Japanese"); mb_internal_encoding("SHIFT-JIS"); $message = "ホームページのアドレス:" . $_POST["name"] . "\nホームページの紹介文:" . $_POST["message"]; if (!mb_send_mail("めーるアドレス@メールアドレス.jp", $_POST["subject"], $message, "From: " . $_POST["mail"])) { exit("メールの送信に失敗しました。"); } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>sample</title> </head> <body> <p>メールが送信されました。</p> </body> </html>

  • phpのメール送信

    ホームページにメールフォームを作りたいのですが、 送信できなくて困っています。 ソースは次の通りです。 <?php echo "<html>"; echo "<head>"; echo "<title>メールフォーム(送信処理)</title>"; echo "</head>"; echo "<body>"; mb_language("japanese"); mb_internal_encoding("UTF-8"); $to = "アドレスA"; $subject = "件名"; $from = "アドレスB"; $header = "From: ". $from; //本文格納 $mailbody = "■お名前:" . $_post["name"] ."\n"; $mailbody .= "■内容:" . $_post["sentaku"] ."\n"; if(mb_send_mail($to, $subject, $mailbody, $header)){ echo "送信しました。"; }else{ echo "送信できませんでした。"; } echo "</body>"; echo "</html>"; ?> またif文の日本語が文字化けしてしまいます。 メール送信できて、文字化けもないようにしたいです。 よろしくお願いします。

    • 締切済み
    • PHP
  • メール送信時の文字化けについて

    お世話になります。 PHPでメール送信のフォームを作っているのですが 何故か、「あ」や「ア」が入力されると 文字化けされてしまいます。 $address = $_POST['address']; //送信先 $name = $_POST['name']; $mail = $_POST['mail']; //相手先 $title = $_POST['title'];   //タイトル $message = $_POST['message']; //本文 mb_language("Japanese"); mb_internal_encoding("JIS"); mb_send_mail($address, $title, $message, "From:$mail", "-f$mail") ソースはこんな感じですが何か根本的な問題とかが あるのでしょうか? 初心者みたいな質問で申し訳ありません。

    • 締切済み
    • PHP
  • PHPメール送信画面(メールフォーム)

    こんにちは!PHPの勉強している学生です。 皆さん、お忙しいところ恐縮ですが、2つのファイル(下記のform.htmlとsend.php)でメール送信画面(メールフォーム)を作っています。大元はググって、無料ソースをコピーして、無料レンタルサーバーの@pageにFFFTP送信して確認致しました。 (1) 結果、送信ボタンを押した後、「メールが送信されました。」と表示はされるのですが、実際にはメールが送られてきません。ちなみに、test@mopera.netの部分に、NTTドコモで契約している自分のメールアドレスを入れました。お恥ずかしながら、A,無料サーバー側の問題なのか?、B,ドコモの設定の問題なのか?、C,メールフォームの問題なのか?分かりません。 ここに関しては、原因やソースコードをご教授頂ければ幸いです。 (2) またPHPのメールフォームでは、そもそもどの様な仕組みでメールが送られるのかが分かりません。 つまり、サーバーでメールを送っているにしても、受信のメールアドレスは何になるのでしょうか? メールフォームで入力した、メールアドレスから送られるのでしょうか? 素人なので検討がつきませんが、より良いソースコード等がありましたらお知らせ下さいませ。 どうぞ宜しくお願い致します。 ■form.html■ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>sample</title> </head> <body> <form action="send.php" method="post"> 件名(タイトル):<br /> <input type="text" name="subject" size="30" value="" /><br /> 送信者名:<br /> <input type="text" name="name" size="30" value="" /><br /> メールアドレス:<br /> <input type="text" name="mail" size="30" value="" /><br /> 本文:<br /> <textarea name="message" cols="30" rows="5"></textarea><br /> <br /> <input type="submit" value="送信する" /> </form> </body> </html> ■send.php■ <?php $message = "名前:" . $_POST["name"] . "\n本文:" . $_POST["message"]; if (!mb_send_mail("test@mopera.net", $_POST["subject"], $message, "From: " . $_POST["mail"])) { exit("error"); } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>sample</title> </head> <body> <p>メールが送信されました。</p> <p><a href="top.html">戻る</a></p> </body> </html>

    • ベストアンサー
    • PHP
  • メール送信のPHPの件で

    現在、 <?php //HTML内容出力 echo "<html>"; echo "<head>"; echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">"; echo "<title>メールフォーム(送信処理)</title>"; echo "</head>"; echo "<body>"; //文字コード設定 mb_language("ja"); mb_internal_encoding("utf-8"); //*環境設定************************************* //件名 $subject = "お問い合わせがありました"; //管理人メールアドレス(宛先) $to = "○○@gmail.com"; //********************************************** //**POSTデータ受け取り************************** //差出人メールアドレス格納 $header = "From: ". $_POST['email']; //本文格納 $body = "■お名前:" . $_POST['name'] ."\n"; $body .= "■内容:" . $_POST['message'] ."\n"; //************************************************ if(mb_send_mail($to,$subject,$body,$header)){ echo "メール送信しました。"; }else{ echo "メール送信失敗しました。"; } //HTML内容出力 echo "</body>"; echo "</html>"; ?> こういう感じでメール送信フォームのPHPを正常稼働させているのですが、 これに送信者への確認メールを送信するには、どのように追記すればよろしいでしょうか? よろしくご教授の方、お願いいたします。

    • 締切済み
    • PHP
  • メール送信フォーム

    mb_send_mail($to, $subject, $message, $from); でフォームのメール送信を作ったのですが、(エラーはでません)メールが送信されません。PHPのバージョンは4.23 HTMLでは <FORM METHOD="POST" ACTION="send.php" ENCTYPE="text/plain"> <input type="hidden" name="subject" value="質問"> </FORM> 省略 send.phpでは <?php mb_language("ja"); mb_send_mail($mail, $subject, $message, $from); ?> どこがおかしいのかわかりません? なにかヒントをいただけますか?

    • 締切済み
    • PHP