PHP - 从mysql和电子邮件中提取数据

时间:2010-11-18 18:27:50

标签: php

在下面的代码中,我可以通过phpMyAdmin运行sql,它将返回一个结果。它不会在浏览器上抛出任何php错误。我似乎无法发送电子邮件。

<?php
ini_set('display_errors',1);
 error_reporting(E_ALL);
include('database.inc.php'); // Our database connectivity file
?>
<?php
$reminder_date = "t1.`reminder_date`";
$email = "t1.`reminder_email`";
$reminder_name = "t1.`reminder_name`";
$reminder_details = "t1.`reminder_desc`";
$server = "reminder@teamcrr.com";

$sql = "SELECT t1.`reminder_id` , t1.`reminder_name` , t1.`reminder_desc` , t1.`reminder_date` , t1.`reminder_email` , lp4.`email` AS `lp_reminder_email`
FROM `reminder_events` AS t1
LEFT OUTER JOIN `authorize` AS lp4 ON ( t1.`reminder_email` = lp4.`email` )
WHERE reminder_date <= NOW( )
ORDER BY `reminder_date` ASC";

$result = mysql_query($sql) or die(mysql_error());

while( $row = mysql_fetch_array( $result ) )
?>
<?php
 $to = "$email";
 $from = "$server";
 $headers = "$from";
 $subject = "$reminder_name";
 $body = "$reminder_details";


 {
 $send = mail($to, $subject, $body, $headers);
 }

 ?>

有人告诉我我做错了什么吗? 感谢。

1 个答案:

答案 0 :(得分:0)

您没有正确提取查询结果。 mysql_fetch_array()只是将结果行作为数组返回,其中$ row [0]是结果中的第一列,$ row 1是第二列,等等......

同样,你不正确地构造了获取循环,所以你永远不会正确地检索一行。实质上,您的电子邮件将发送到“t1`.reminder_email”。您的$标头也无效。你的代码应该看起来像这样:

<?php
    include('database.inc.php'); // Our database connectivity file
    $server = "reminder@teamcrr.com";

$sql = <<<EOL
SELECT t1.reminder_id AS reminder_id, t1.reminder_name AS reminder_name,
    t1.reminder_desc AS reminder_desc, t1.reminder_date AS reminder_date,
    t1.reminder_email AS reminder_email, lp4.email AS lp_reminder_email
FROM reminder_events AS t1
LEFT OUTER JOIN authorize AS lp4 ON ( t1.reminder_email = lp4.email )
WHERE reminder_date <= NOW()
ORDER BY reminder_date ASC;
EOL;

$result = mysql_query($sql) or die(mysql_error());

while( $row = mysql_fetch_assoc($result)) {
    $to = $row['reminder_email'];
    $subject = $row['reminder_name'];
    $body = $row['reminder_desc'];

    mail($to, $subject, $body);
}

如果您需要弄乱邮件标题,那么我建议您使用正确的邮件包,例如PHPMailerSwiftMailer,这些邮件包可以为您正确设置它们,而无需处理细节。

在您的代码中,您有:

while( $row = mysql_fetch_array( $result ) )
?>
<?php
 $to = "$email";

解析以下内容:

while($row = mysql_fetch_array($result)) {
   $to = $email;
}

由于错误的大括号({}),整个结果集在$to = $email的无用循环上消耗,并且在所有行被浪费之后才发送邮件。这使您的$ email保留在您上面设置的原始字段名称,因此您尝试将邮件发送给名为“t1.reminder_mail”的用户,毫无疑问,您的邮件服务器上不存在该邮件。