【问题标题】:PHP Mailing data from SQL Tables来自 SQL 表的 PHP 邮件数据
【发布时间】:2013-02-12 17:01:49
【问题描述】:

我不是 php/mysql 专家,但我通常可以通过一些研究和试验来解决问题,但是我似乎无法按照我的意愿开始工作......

我经营一个分类广告网站,我计划设置一个 cron 作业(我可以做 cron 作业)并向已发布 30 天广告的用户发送一封提醒电子邮件。我使用 date_sub 和 curdate 使日期运行良好。我的查询从广告已存在 30 天的数据库中提取了我想在电子邮件中使用的所有表格。

我可以发送带有海报名称、电子邮件和 html 消息的电子邮件,但它只发送到它查询的第一个电子邮件地址。我假设这是一个循环问题?但我似乎无法弄清楚。

我的脚本发布在下面 - 我对混乱表示歉意,因为我说我不是这方面的专家,但我主要是按照我想要的方式运行它,除了它只会发送到出现的第一个广告。

sql 查询中的大多数表名都包含我计划在 html 消息中使用的数据。

    <?php
        header("Content-type: text/plain");

    // OPEN DATABASE
        define('DB_HOST','localhost');
        define('DB_USER','');
        define('DB_PASS','');
        define('DB_NAME','');

        mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("Connetion to database failed!");
        mysql_select_db(DB_NAME); 

        joinDateFilter();

    // WHOSE AD IS 30 DAYS OLD
        function joinDateFilter(){
            $query = mysql_query("SELECT name,title,email,idPost,password FROM oc_posts WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) = CAST(insertDate AS date)");
            $mail_to = "$email";
            while ($row = mysql_fetch_array($result)){
                echo $row['name']." - ".$row['title']." - ".$row['email']."\n";
                echo $mail_to = $row['email'].", ";
                echo $title=$row["title"];
                echo $name=$row["name"];
                echo $idPost=$row["idPost"];
                echo $password=$row["password"];
            }
            if (!empty($mail_to)){
                sendEmail($mail_to,$email,$name,$title,$idPost,$password);
            }
        }

    // SEND EMAIL
        function sendEmail($mail_to,$email,$name,$title,$idPost,$password) {
            $mail_to ="$mail_to";
            $email ="$email";
            $name = "$name";
            $title = "$title";
            $idPost = "$idPost";
            $password = "$password";
            $from    = "no-reply@2tradeit.com";
                //begin of HTML message
        $message = "<html>
      <body bgcolor=\"#FFFFFF\">
            Hello, $name, your ad $title is 30 days old etc...
      </body>
    </html>";
       //end of message 
            $headers = 'From: '.$from."\r\n" .
            'Reply-To:'.$_POST['email']."\r\n" .
            "Content-Type: text/html; charset=iso-8859-1\n".
            'X-Mailer: PHP/' . phpversion();
            mail($mail_to, "Your ad is 30 days old", $message, $headers);
        }
    ?> 

任何帮助将不胜感激!

谢谢!

【问题讨论】:

    标签: php mysql email cron


    【解决方案1】:

    你需要在 while 中执行你的 sendEmail 函数。现在发生的事情是它遍历所有返回的行,设置变量,覆盖变量,然后发送一次电子邮件。尝试这样的事情。请注意 if 语句现在位于您的 while 块中。

    while ($row = mysql_fetch_array($result)){
                echo $row['name']." - ".$row['title']." - ".$row['email']."\n";
                echo $mail_to = $row['email'].", ";
                echo $title=$row["title"];
                echo $name=$row["name"];
                echo $idPost=$row["idPost"];
                echo $password=$row["password"];
                if (!empty($mail_to)){
                    sendEmail($mail_to,$email,$name,$title,$idPost,$password);
                }
    }
    

    现在它将发送电子邮件,然后处理下一行。这意味着它将立即为每一行发送电子邮件。

    【讨论】:

    • 此外,您应该停止使用 mysql 函数,因为这些函数现在已被弃用。研究使用 PDO 或 mysqli。
    猜你喜欢
    • 1970-01-01
    • 2015-11-11
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    相关资源
    最近更新 更多