无法使用PHP发送电子邮件

时间:2012-01-07 10:22:25

标签: php email

我的代码:

<?php
  session_start();
?>

<?php
  $username = $_SESSION['username'];
  $connect = mysql_connect("localhost", "root","") or die("Couldn't connect!");
  mysql_select_db("phplogin")or die("Couldn't find db");

  //$id = $_POST['studentList']; <--I'm suppose to pass this from my other page, but for           testing purpose I disable this and change it to B1101 below..

  $to = mysql_query("SELECT `parentEmail` FROM `parent` WHERE parent.studentID =  'B1101'");

  $subject = $_POST['subject'];
  $message = $_POST['message']; 

  $send_contact=mail($to,$subject,$message);

  if($send_contact){
  echo "E-Mail is sent!";
  }
  else {
    echo "ERROR";
  }
?>

<?php
    mysql_close();
?>

问题是,它不起作用并发送此错误消息:

Warning: mail() expects parameter 1 to be string, resource given in C:\xampp\htdocs\HTPP\send_contact.php on line 23 ERROR

我尝试使用我的电子邮件对$to进行硬编码,但它确实有效......现在问题是从数据库中检索电子邮件地址;电子邮件数据类型为varchar(65)

6 个答案:

答案 0 :(得分:2)

$result = mysql_query("SELECT `parentEmail` FROM `parent` WHERE parent.studentID =  'B1101'");

$row = mysql_fetch_array($result);

$to=return $row[0];

mysql_query返回资源而非string..thats为什么会出现错误..

答案 1 :(得分:1)

在此替换:

$to = mysql_query("SELECT `parentEmail` FROM `parent` WHERE parent.studentID =  'B1101'");

$subject = $_POST['subject'];
$message = $_POST['message']; 

$send_contact=mail($to,$subject,$message);

有了这个:

$res = mysql_query("SELECT `parentEmail` FROM `parent` WHERE parent.studentID =  'B1101'");
$to = mysql_result($res,0);

$subject = $_POST['subject'];
$message = $_POST['message']; 

$send_contact=mail($to,$subject,$message);

在处理从数据库返回的单数结果时,mysql_result是您应该调用以从查询中获取数据的函数。

请注意,您收到错误的原因是$to是一个mysql资源,而不是字符串。

mysql_result从mysql资源中获取字符串。

答案 2 :(得分:1)

为了清楚它为什么不能像这样工作,mysql_fetch_array返回一个数组对象,其属性以数据库中的列命名,所以在你的例子中,从这段代码开始:

$result = mysql_query("SELECT `parentEmail` FROM `parent` WHERE parent.studentID =  'B1101'");

$row = mysql_fetch_array($result);

$ row变量将包含此内容(如果您尝试使用print_r显示它):

$row => Array(
    [0] => [the address stored in the db],
    [parentEmail] => [the address stored in the db]
)

这就是为什么,当Rajat消化时,你需要将$to变量传递给$row[0]

我希望这很有帮助。 祝你有美好的一天。

答案 3 :(得分:0)

这一行

 $to = mysql_query("SELECT `parentEmail` FROM `parent` WHERE parent.studentID =  'B1101'");

将为您提供一个mysql资源,如错误所示,而不是字符串。这不是查询的工作方式。

快速查看the manual:你必须打电话给

mysql_fetch_assoc($result)

首先获取信息。

答案 4 :(得分:0)

$to = mysql_query("SELECT `parentEmail` FROM `parent` WHERE parent.studentID =  'B1101'");

因为它不是一个字符串 我想你忘记了获取数据

  

试试这个:

 $email = mysql_fetch_array(mysql_query("SELECT `parentEmail` FROM `parent` WHERE parent.studentID =  'B1101'"));

$to = $email['parentEmail'];

答案 5 :(得分:0)

$to = mysql_query("SELECT `parentEmail` FROM `parent` WHERE parent.studentID =  'B1101'");

$subject = $_POST['subject'];
$message = $_POST['message']; 

$send_contact=mail($to,$subject,$message);
  1. 在您的代码区域中,请正确检查。您提供资源,您必须使用mysql_fetch_assoc函数来获取您的电子邮件

  2. 您无法在没有智能主机的情况下在localhost上发送电子邮件。