1

私はすべてを正しく行っていると思いますが、コードでt_stringエラーが発生し続けます。どの行を表示します。誰かがこれを理解できれば、私はとても素晴らしいでしょう。私は引用符について調査しましたが、データベース内のデータには@記号とピリオドが含まれているため、エラーと関係があるのではないかと考えています。

エラーは76行目にあります。if(empty($row['email']))

コード全体は

ini_set("include_path", ".:/public_html/phpmailer"); //Used for simplicity
include("mysql_connect.php"); //The database name, login, etc..
set_error_handler("customError"); //I created a custom error

$login = 'username@domain.com';
$password = 'password';
$server = '{imap.gmail.com:993/ssl/novalidate-cert}';
$connection = imap_open($server, $login, $password);

$mailboxinfo = imap_mailboxmsginfo($connection);
$messageCount = $mailboxinfo->Nmsgs; //Number of emails in the inbox
for ($MID = 1; $MID <= $messageCount; $MID++)
  {
  $EmailHeaders = imap_headerinfo($connection, $MID); //Save all of the header information
  $Body = imap_qprint(imap_fetchbody($connection, $MID, 1)); //The body of the email to be forwarded
  $MessageSentToAllArray = $EmailHeaders->to; //Grab the “TO” header
  $MessageSentToAllObject = $MessageSentToAllArray[0];
  $MessageSentToMailbox = $MessageSentToAllObject->mailbox; //Everything before the “@” of the recipient
  $MessageSentToHost = $MessageSentToAllObject->host; //Everything after the “@” of the recipient
  $MessageSentFromAllArray = $EmailHeaders->from; //Grab the “FROM” header
  $MessageSentFromAllObject = $MessageSentFromAllArray[0];
  $MessageSentFromMailbox = $MessageSentFromAllObject->mailbox; //Everything before the “@” of the sender
  $MessageSentFromHost = $MessageSentFromAllObject->host; //Everything after the “@” of the sender
  $MessageSentFromName = $MessageSentFromAllObject->personal; //The name of the person who sent the email
  $toArray = searchRecipient($MessageSentToMailbox); //Find the correct person to send the email to
  if($toArray == FALSE) //If the alias they entered doesn’t exist…
    {
    $bounceback = 'Sorry the email in your message does not appear to be correct';
    /* Send a bounceback email */
    $mail = new PHPMailer(); // defaults to using php “mail()”
    $mail -> ContentType = ‘text/plain’; //Plain email
    $mail -> IsHTML(false); //No HTML
    $the_body = wordWrap($bounceback, 70); //Word wrap to 70 characters for formatting
    $from_email_address = 'Support@domain.com';
    $mail->AddReplyTo($from_email_address, "Domain.Com");
    $mail->SetFrom($from_email_address, "Domain.Com");
    $address = "$MessageSentFromMailbox@$MessageSentFromHost"; //Who we’re sending the email to
    $mail->AddAddress($address, $MessageSentFromName);
    $mail->Subject = 'WAHM Link Request'; //Subject of the email
    $mail->Body = $the_body;
    if(!$mail->Send()) //If the mail fails, send to customError
      {
      customError(1, $mail->ErrorInfo, "anon-email.php", "sending the email");
      }
    }
  else //If the candidate address exists, forward on the email
    {
    $mail = new PHPMailer(); // defaults to using php “mail()”
    $mail -> ContentType = ‘text/plain’; //Plain E-mail
    $mail -> IsHTML(FALSE); //No HTML
    $the_body = wordwrap($Body, 70); //Wordwrap for proper email formatting
    $from_email_address = "$MessageSentFromMailbox@$MessageSentFromHost";
    $mail->AddReplyTo($from_email_address, $MessageSentFromName);
    $mail->SetFrom($from_email_address, $MessageSentFromName);
    $address = $toArray[1]; //Who we’re sending the email to
    $mail->AddAddress($address, $toArray[0]); //The name of the person we’re sending to
    $mail->Subject = $EmailHeaders->subject; //Subject of the email
    $mail->Body = ($the_body);
    if(!$mail->Send()) //If mail fails, go to the custom error
      {
      customError(1, $mail->ErrorInfo, "anon-email.php", "sending the email");
      }
    }
  /* Mark the email for deletion after processing */
  imap_delete($connection, $MID);
  }
  imap_expunge($connection); // Expunge processes all of the emails marked to be deleted
  imap_close($connection);

  function searchRecipient() // function to search the database for the real email
{
    global $MessageSentToMailbox; // bring in the alias email
    $email_addr = mysql_query("SELECT email FROM tbl WHERE source='$MessageSentToMailbox'"); // temp store of the real email
    $row = mysql_fetch_assoc($email_addr); //making temp store of data for use in program
    if(empty($row['email']))
    {
        return FALSE;
    }
    else  /* Else, return find the person's name and return both in an array */
    {
        $query = "SELECT * FROM tbl WHERE email = '$email_addr'"; // pulling in the row where the emails match
        $results = mysql_query($query, $email_addr); // temp store of both queries from this function
        $row = mysql_fetch_assoc($results); //making temp store of data for use in program
        $name = $row['author'];  // taking the author data and naming its variable
        return array($name, $email_addr);  // this is the name and the real email address to be used in function call
    }
}

function customError($errno, $errstr, $file, $line)
{
    error_log("Error: [$errno] $errstr in $file at line number: $line",1, "name@domain.com","From: name@domain.com");   
    die();
}
4

2 に答える 2

3

特にstackoverflowが問題を修正したように見えるため、これを理解するのにかなり長い時間がかかりました. 0xA0ソース コード (私のエディターは 33 を数えます) の空白ブロックの真ん中にランダムに散らばっている文字がいくつかあります。PHP パーサーは明らかにこれらをあまり好まず、エラーをスローします。

エディターで検索/置換を実行して、すべてをスペース ( 0x20) に変換したところ、解析されました。

SOが問題を修正したため、元のバージョンにロールバックしたにもかかわらず、現在表示されているコードをコピーして繰り返すことができないため、質問の最初の編集ですべての人にそれを台無しにしたようです-申し訳ありません.

上記のコードをコピーしてエディターに貼り付けると、問題は解消されました。StackOverflow は積極的に問題を修正しました。

于 2012-05-15T20:47:03.103 に答える
2

これがエラーかどうかはわかりませんが、ここに一重引用符があります。

$mail -> ContentType = ‘text/plain’; //Plain email

実際には、コードに2回表示されています。

于 2012-05-15T20:33:56.220 に答える