PEAR邮件,使用web表单获取$to


PEAR mail, using web form to get $to

我正在尝试将网页从常规PHP邮件切换到PEAR邮件。在这个页面上,我希望将电子邮件发送给正在将电子邮件输入网络表单的收件人。根据下面的代码,我试图将$设置为$pickeremail,但遗憾的是,PEAR试图将电子邮件发送到"$pickeremeil",而不是用户实际在网络表单中输入的电子邮件。

$con = mysql_connect("localhost","BLAHBLAH","BLAHBLAH");
mysql_select_db("schoolh_SHS", $con);
if (!$con)
{
  die('Could not connect: ' . mysql_error());
}
$sql      = "UPDATE Donations SET `PICKER_NAME`='$_POST[pickername]',`PICKER_EMAIL`='$_POST[pickeremail]',`PICKER_PHONE`='$_POST[pickerphone]',`STATUS`='CLAIMED' WHERE DONATIONID = $_POST[id]";
$q        = "SELECT * FROM Donations WHERE DONATIONID = $_POST[id]";
$result   = mysql_query($q);
$Donation = mysql_fetch_array($result);
$orgname     = mysql_result($result,$i,"orgname");
$address     = mysql_result($result,$i,"address");
$city        = mysql_result($result,$i,"city");
$state       = mysql_result($result,$i,"state");
$pickeremail = mysql_result($result,$i,"picker_email");
if (!mysql_query($sql,$con))
{
  die('Error: ' . mysql_error());
}
function send_email($recipients, $from, $subject, $body)
{
  require_once "Mail.php";
  require_once "Mail/mime.php";
  $to         = '$pickeremail';
  $cc         = 'whynoceros@gmail.com';
  $recipients = $to.", ".$cc;
  $subject    = 'Pickup Confirmation';
  $from       = 'blah';
  $host       = 'blah';
  $username   = 'donations';
  $password   = 'blahblah';
  $headers = array (
    'From'    => $from,
    'To'      => $to,
    'Subject' => $subject
  );
  $mime = new Mail_mime();
  $mime->setHTMLBody($body);
  $body = $mime->get();
  $headers = $mime->headers($headers);
  $smtp = Mail::factory('smtp', array(
    'host'     => $host, 
    'auth'     => true,
    'username' => $username, 
    'password' => $password
  ));
  $mail = $smtp->send($recipients, $headers, $body);
  if (PEAR::isError($mail))
  {
    //return false;
    echo ($mail->getMessage());
  } 
  else 
  {
    return true; 
  }
}

根据下面的建议,我添加了一个var_dump,输出为:

array(6){["MIME版本"]=>string(3)"1.0"["内容类型"]=>string(29)"text.html;charset=ISO-8859-1"["内容传输编码"]=>string(16)"带引号可打印"["From"]=>字符串(33)"donations@schoolhousesupplies.org"["To"]=>string(0)"["Subject"]=>字符串(19)"取货确认"}无法添加收件人:@localhost[SMTP:从服务器收到的无效响应代码(代码:501,响应:5.5.4无效地址)]NULL

我注意到,在头数组中,我将"To"=>$To改为"To"=>$receives。我还更改了行:$pickeremail=mysql_result($result,$I,"picker_email");收件人:$pickeremail=$_POST['pickermail'];现在,我得到了这个var_dump:array(6){["MIME版本"]=>string(3)"1.0"["内容类型"]=>string(29)"text.html;charset=ISO-8859-1"["Content Transfer Encoding"]=>string(16)"带引号的可打印"["From"]=>字符串(33)"donations@schoolhousesupplies.org"["To"]=>字符串(20)"whynoceros@gmail.com"["Subject"]=>string(19)"取货确认"}无法添加收件人:@localhost[SMTP:从服务器收到的无效响应代码(代码:501,响应:5.5.4无效地址)]NULL

您错了:

$to         = '$pickeremail';

因为当使用简单引号时,里面的php变量不会被解释。将此行替换为:

$to = $pickeremail;

编辑:

看看垃圾场:

["To"]=>字符串(0)"

您在$to中放入了一个空字符串。因此,数据库中的picker_email字段似乎为空。你应该检查一下。