• ベストアンサー

正しいでしょうか?

tarkoの回答

  • tarko
  • ベストアンサー率20% (1/5)
回答No.1

こんにちは。 まず、SQLに含まれている$_POST['categ']ですが、ゴミデータが入っていないかチェックしていますか?管理者のみが使う物であっても、チェックした方が良いと思います。余計なお世話だったらすいません。 あと、メールの本文テンプレートファイルを開くところですが、一つのメールアドレスに配信するたびにファイルオープンするのではなく、はじめに一回だけ配列に読み込んで、その配列を使ってメールアドレス毎に名前の置き換え処理を行った方が良いと思います。 件名の変数も、whileの外に出した方が良いでしょう。 間違っていたらすいません。

ok86
質問者

お礼

早速のご回答有難うございます。サンプルを加工しながらのPHPの習得中ですので、基本的な事が良く判ってないもので・・

関連するQ&A

  • 自動返信メールへの画像添付

    お世話になります 以下の用にmail.txtというテキストメールを自動返信させていますが、これにGIFやJPEGの画像を添付させたいと思っているのですがやり方が判りません。どなたかご教授願います。 $fp = fopen("mail.txt", "r"); $msg = ""; while ($x = fgets($fp)) { $x = mb_ereg_replace("%%EMAIL%%", $_SESSION['abc'], $x); $x = mb_ereg_replace("%%NAME%%", $name, $x); $msg .= $x; } $subject ="自動返信メール"; $header = "Content-type: text/plain;charset=\"iso-2022-jp\""; mb_language("Japanese"); mb_send_mail(gpc_stripslashes($_POST['mail']), $subject, mb_convert_encoding( $msg, "JIS","EUC-JP") ,"From: abc@****.com",$header);

    • 締切済み
    • PHP
  • phpで携帯へのメルマガ配送について

    データベースから特定メアドを引き出しループで送信処理をしています。 ドメイン許可してもDocomoあてが届かない現象があり なにかうまい配送方法はないでしょうか? コードは以下です。 $sql = "select * from master where mailpermission = '$mp'"; $rs = mysql_query($sql,$con); while($row=mysql_fetch_array($rs)) { $toad =$row[7]; $name=$row[2]; $kanrino=$row[0]; //メール送信 $to .= $toad; $subject = $kenmei; $sendman = $postadjpn; $header .= 'From:'. mb_encode_mimeheader($sendman). " <".$postad.">\n"; $header .= "Return-Path:".$postad."\n"; $header .= "Date:"; $header .= date("D, d M Y H:i:s O"); $body .= "\n"; $body .= $name; $body .= "様"; $body .= "\n"; $body .= "\n"; $body .= $postnaiyou; $body .= "\n"; mb_internal_encoding("ISO-2022-JP"); ini_set("mbstring.internal_encoding","UTF-8"); mb_language("uni"); mb_send_mail($to,$subject,$body,$header); $to = ""; $subject = ""; $sendman = ""; $header = ""; $body = ""; } mysql_close($con);

    • 締切済み
    • PHP
  • smtpでメール送信

    いつもお世話になっております。 mail()、mb_send_mail() が使用できないため、smtp から 直接メール送信をしようと考えております。 (なぜ、mail()、mb_send_mail() が使用できないのかはわかりません。) // 件名 $subject = mb_convert_encoding($subject, "JIS", "EUC-JP"); $subject = '=?iso-2022-jp?B?' . base64_encode($subject) . '?='; // 本文 $msg = mb_convert_encoding($msg, "JIS", "EUC-JP"); // 送信 $fp = fsockopen('localhost', 25, $err_str, $err_no, 5); $header = "From: " . $from . "\r\n"; $header .= "To: " . $to . "\r\n"; $header .= "Reply-To: " . $from . "\r\n"; $header .= "Subject: " . $subject . "\r\n"; $header .= "Mime-Version: 1.0\r\n"; $header .= "Content-Type: Text/Plain; charset=iso-2022-jp\r\n"; $header .= "Content-Transfer-Encoding: 7bit\r\n"; fputs($fp, "HELO " . $smtp . "\r\n" ); fputs($fp, "MAIL FROM:" . $from . "\r\n"); fputs($fp, "RCPT TO:" . $to . "\r\n"); fputs($fp, "DATA \r\n"); fputs($fp, $header . $msg . "\r\n.\r\n"); fputs($fp, "QUIT \r\n"); 上記のように書きました。 一回目は送信できるのですが、二回目以降が送信できません。 サーバを再起動するとまた送信できるようになるのですが、 二回目以降はやはり送信できません。 何か原因が考えられますでしょうか。 ご教示よろしくお願いいたします。

    • 締切済み
    • PHP
  • 画像の添付ファイルをメールで送信する

    頑張って、作ったけど、うまくいかないよぉ・・・ だれか、たすけてくださぃにゃん。 //メールのヘッダ $header = "Cc:$cc\n"; $header .= "From:$from\n"; $header .= "X-Mailer: PHP/".phpversion()."\n"; $header .= "MIME-version: 1.0\n"; if(file_exists($upfile)){ //アップファイルがあれば $header .= "Content-Type: multipart/mixed;\n"; $header .= "\tboundary=\"$boundary\"\n"; $msg .= "This is a multi-part message in MIME format.\n\n"; $msg .= "--$boundary\n"; $msg .= "Content-Type: text/plain; charset=ISO-2022-JP\n"; $msg .= "Content-Transfer-Encoding: 7bit\n\n"; }else{ $header .= "Content-Type: text/plain; charset=ISO-2022-JP\n"; $header .= "Content-Transfer-Encoding: 7bit\n"; } $msg .= "本文だよ\n"; //ファイルの読み込み if(file_exists($photo1)){ $fp = fopen($photo1, "r") or die("error"); $contents = fread($fp, filesize($photo1)); fclose($fp); $f_encoded = chunk_split(base64_encode($contents)); //エンコードして分割 $msg .= "\n--$boundary\n"; $msg .= "Content-Type: " . $photo1_type . ";\n"; $msg .= "\tname=\"$photo1_name\"\n"; $msg .= "Content-Transfer-Encoding: base64\n"; $msg .= "Content-Disposition: attachment;\n"; $msg .= "\tfilename=\"$photo1_name\"\n\n"; $msg .= "$f_encoded\n"; } $msg .= "--$boundary--"; //メール送信を実行する mb_send_mail( $to, $subject, $msg, $header );

    • 締切済み
    • PHP
  • メールの件名のデコード

    お世話になります。 メールの件名が「登録」のもののみ、以降の処理をしようとしています。 $n_msg = $pop3->numMsg(); $header_list = $pop3->getParsedHeaders($n_msg); $subject = mb_decode_mimeheader($header_list['Subject']); print "$subject<br>"; としても「??」と表示され、 「登録」に戻りません。 if($subject <> "登録") なら、対象外とするという処理に したいのですが、どうすればいいでしょうか? ちなみに、、 $header_list['Subject']は、 =?iso-2022-jp?B?GyRCRVBPPxsoQg==?= です。 よろしくお願いします。

    • 締切済み
    • PHP
  • メールの文字化け

    define( 'CNST_MAIL_REPLY' , 'aaa@aaa.co.jp' ); define( 'CNST_MAIL_FROM_ADDR' , 'aaa@aaa.co.jp' ); define( 'CNST_MAIL_ERROR' , 'aaa@aaa.co.jp' ); define( 'CNST_MAIL_FROM_NAME' , 'ここが、差出人で、日本語表示したいんですが文字化け' ); define( 'CNST_MAIL_TO_ADDR' , 'aaa@aaa.co.jp' ); //* メールアドレス設定 *// $mail_header = ""; if ( CNST_MAIL_REPLY != "") { if ( $mail_header != "") { $mail_header .= "\n"; } $mail_header .= "Reply-To: ".CNST_MAIL_REPLY; } $from = "From: "; if ( CNST_MAIL_FROM_NAME != "") { $from .= "\"".CNST_MAIL_FROM_NAME."\""; } if ( CNST_MAIL_FROM_ADDR != "") { $from .= " <".CNST_MAIL_FROM_ADDR.">"; } if ( $mail_header != "") { $mail_header .= "\n"; } $mail_header .= $from; if( CNST_MAIL_ERROR != "") { $errors_to = "Errors-To: "; $errors_to .= CNST_MAIL_ERROR; if( $mail_header != "") { $mail_header .= "\n"; } $mail_header .= $errors_to; $sub_parm = "-f".CNST_MAIL_ERROR; $mail_subject = mb_convert_encoding($mail_subject, "ISO-2022-JP","SJIS"); $mail_text = mb_convert_encoding($mail_text, "ISO-2022-JP","SJIS"); $mail_header = mb_convert_encoding($mail_header,"ISO-2022-JP","SJIS"); // メール送信処理 mb_language("Japanese"); mb_send_mail($to, $mail_subject, $mail_text, $mail_header, $sub_parm); 上のメール送信プログラムなんですが、 差出人の名前が文字化けしてしまいます。 質問のしかたがよくわからなかったのでプログラムをのせました。 アドバイス宜しくお願いします。

    • ベストアンサー
    • PHP
  • 本人確認メールについて

    販売サイトや、SNSでよくある本人確認メール(呼び方は知りません)の書き方について ご質問です。 ちなみに、自分で勝手な想像で作成したスクリプトを書いておきます。 どこが間違っているのかご指摘お願い致します。 -------------------------------------------------------------------------------------------------- //////////////////////// // 本人確認メール送信 // //////////////////////// $mail = $_SESSION['mail']; $con = mysql_connect("~", "~", "~"); mysql_select_db("~-~"); mysql_set_charset('utf8'); $sql = "SET NAMES utf-8"; mysql_query($sql); $sql = "SELECT * FROM member_profile WHERE email='$mail';"; $result = mysql_query($sql) or die; $row = mysql_fetch_row($result); $name = $row[2]; mysql_close($con); $header = "From:raindrop.jp-5247423@~.jp Content-Type:text/html; charset=ISO-2022-JP Content-Transfer-Encoding:8bit "; $top = $name.' 様<br><br>'; $aisatsu .= "~への会員登録のお申し込みありがとうございます。<br> まだ登録は完了しておりません。下記URLから登録を完了してください。<br><br>"; $html_header = '<doctype html><html><head><meta charset="ISO-2022-JP"></head><body bgcolor="#FFFFCC">'; $html_footer = '</body></html>'; $uniqid = uniqid(); $anchor = '<a href="http://~/php/membership_kakutei.php?from=1">http://sirius5.link/register/confirm/'.$uniqid.'</a>'; $contents="<br><br> ==================================================<br> このメッセージは~より自動的に送信しております。<br> このメールにお心当たりのない場合は、このメールを破棄してください。<br> ==================================================<br> <br> <br> <br> -----------------------------------------------------------<br> ~<br> http://daiko-king.com <br> -----------------------------------------------------------<br> "; ////////////////////////// // 新規登録者宛にメール // ////////////////////////// $message = $html_header.$top.$aisatsu.$anchor.$contents.$html_footer; $to = $mail; $subject = "【~】 仮登録完了"; // 題名 $to = mb_convert_encoding($to, "UTF-8", "auto"); // $toは、自動的にエンコードされない。 $subject = mb_convert_encoding($subject, "UTF-8", "auto"); $message = mb_convert_encoding($message, "UTF-8", "auto"); $header = mb_convert_encoding($header, "UTF-8", "auto"); mb_send_mail($to, $subject, $message, $header); // メール送信 ---------------------------------------------------------------------------------------------------- <a>あいうえお</a> の、あいうえお の部分が実際には存在しないディレクトリに してるのですが、(上記の場合だと、/register/confirmの部分です)それではだめ なのでしょうか。 実際にあるディレクトリだとしたら、たとえば、 https://aaa.com/register/confirm/ASkuCxyxsKxJ08kojrn770Js_jNOCXoD6ZXE0fgKQyI の、A以下の正規表現的な文字列つけることで何がしたいのかわかりません。 説明していただきたいです。正しい方法とスクリプトの書き方をよろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPでフォームメール

    いつも適切なご回答誠にありがとうございます。PHP初心者で参考書やnetを頼りに制作している者です。現在フォームを作成していて確認メールでの質問です。送信者宛てには上手く送信されるのですが、管理者宛のメールの件名と送信者がうまく表示されません。どなたかお助けください。 //----------------ここから管理者宛にMAIL送信------------------------// $subject="資料請求がございました"; $subject=mb_convert_encoding("$subject","JIS","SJIS"); $subject=mb_encode_mimeheader($subject); $other = stripslashes($other); $from="${name01}"; $from=mb_convert_encoding("${from}","JIS","SJIS"); $from = base64_encode($from); $from = "=?ISO-2022-JP?B?" . $from . "?="; $from = "From: \"".$from. "\"" . "<" . "$e_mail" . ">"; $s_msg="以下の内容で資料請求がありました。資料発送の手配をお願いします。\n _/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄\n ■お名前:${name01} ■電話番号:${tel} ■E-メール:${e_mail} ■ご意見・ご要望:\n\n${other}\n _/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄\n ${d_site}|資料請求フォーム\n \n"; $s_msg = mb_convert_encoding($s_msg,"JIS","SJIS"); $sendto = "$d_recipient"; mb_send_mail($sendto,"$subject","$s_msg","$from"); //-------------------------------------------------------------------------------------//

    • ベストアンサー
    • PHP
  • MySQL5のデータを、SQL文を使いcsv形式でダウンロードさせると文字化けします

    環境:Apache2&PHP5&MySQL5 MySQL5のデータを、SQL文を使いcsv形式でダウンロードさせると文字化けします。 -- <?php header("Content-Type: application/octet-stream"); ?> <?php header("Content-Disposition: attachment; filename=output.csv"); ?> <?php $srv = "localhost"; // サーバー名 $id = "root"; // ユーザーID $passwd = "******"; // パスワード $dbn = "sample"; // データベース名 $sql = "SELECT * FROM result"; // SQL文 $db=mysql_connect($srv,$id,$passwd); mysql_select_db($dbn,$db); $rs=mysql_query($sql,$db); for($i=0; $i<mysql_num_fields($rs); $i++){ print(mb_convert_encoding(mysql_field_name($rs,$i),"SJIS","EUC-JP").","); } print("\n"); for($j=0 ;$j<mysql_num_rows($rs); $j++) { for($k=0; $k<mysql_num_fields($rs); $k++) { $str=mysql_result($rs,$j,$k); print(mb_convert_encoding($str,"SJIS","EUC-JP").","); } print("\n"); } mysql_close($db); ---ダウンロードしたCSVは半角英数文字はそのまま出ますが、 日本語(全角)が、?に化けます。(下記の参照してください) 24 2 1 444 4444 2008/7/3 15 ? 1E+18 ??? ????? ?????? 25 2 1 444 kojiide 2008/7/3 30 ? 1E+18 ??? ????? ?????? 26 2 1 444 kojiide 2008/7/3 30 ? 1E+18 ??? ????? ?????? --- print(mb_convert_encoding($str,"SJIS","EUC-JP").","); でSJISになっていると思うのですが、どなたかアドバイスいただけると幸いです。

    • ベストアンサー
    • 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