2012-10-05 60 views
2

我正在使用腳本來轉發電子郵件地址並收到錯誤的消息編號錯誤。消息號被解析爲函數的參數,我不知道如何獲取消息號並將其作爲參數插入。請幫忙。我是新來的PHP。錯誤指出$structure = imap_fetchstructure($connection, $id, FT_UID);$result['text'] = imap_body($connection, $id, FT_UID);部件。請幫幫我。錯誤消息編號錯誤

<?php 
require_once '../swift/lib/swift_required.php'; 
$hostname = '{imap.xyz.com:993/imap/ssl}INBOX'; 
$username = 'email'; 
$password = 'password'; 

/* try to connect */ 
$connection = imap_open($hostname,$username,$password) or die('Cannot connect to Tiriyo: ' . imap_last_error()); 

ini_set('memory_limit', '256M'); 

function Message_Parse($id) 
{ 
global $connection; 
    if (is_resource($connection)) 
    { 
     $result = array 
     (
      'text' => null, 
      'html' => null, 
      'attachments' => array(), 
     ); 

       $structure = imap_fetchstructure($connection, $id, FT_UID); 
     //print_r($structure); 
//array_key_exists — Checks if the given key or index exists in the array 
     if (is_array($structure) && array_key_exists('parts', $structure)) 
     { 
      foreach ($structure->parts as $key => $part) 
      { 
       if (($part->type >= 2) || (($part->ifdisposition == 1) && ($part->disposition == 'ATTACHMENT'))) 
       { 
        $filename = null; 
        if ($part->ifparameters == 1) 
        { 
         $total_parameters = count($part->parameters); 
         for ($i = 0; $i < $total_parameters; $i++) 
         { 
          if (($part->parameters[$i]->attribute == 'NAME') || ($part->parameters[$i]->attribute == 'FILENAME')) 
          { 
           $filename = $part->parameters[$i]->value; 
           break; 
          } 
         } 
         if (is_null($filename)) 
         { 
          if ($part->ifdparameters == 1) 
          { 
           $total_dparameters = count($part->dparameters); 

           for ($i = 0; $i < $total_dparameters; $i++) 
           { 
            if (($part->dparameters[$i]->attribute == 'NAME') || ($part->dparameters[$i]->attribute == 'FILENAME')) 
            { 
             $filename = $part->dparameters[$i]->value; 

             break; 
            } 
           } 
          } 
         } 
        } 
        $result['attachments'][] = array 
        (
         'filename' => $filename, 
         'content' => str_replace(array("\r", "\n"), '', trim(imap_fetchbody($connection, $id, ($key + 1), FT_UID))), 
        ); 
       } 

       else 
       { 
        if ($part->subtype == 'PLAIN') 
        { 
         $result['text'] = imap_fetchbody($connection, $id, ($key + 1), FT_UID); 
        } 

        else if ($part->subtype == 'HTML') 
        { 
         $result['html'] = imap_fetchbody($connection, $id, ($key + 1), FT_UID); 
        } 

        else 
        { 
         foreach ($part->parts as $alternative_key => $alternative_part) 
         { 
          if ($alternative_part->subtype == 'PLAIN') 
          { 
           echo '<h2>' . $alternative_part->subtype . ' ' . $alternative_part->encoding . '</h2>'; 

           $result['text'] = imap_fetchbody($connection, $id, ($key + 1) . '.' . ($alternative_key + 1), FT_UID); 
          } 

          else if ($alternative_part->subtype == 'HTML') 
          { 
           echo '<h2>' . $alternative_part->subtype . ' ' . $alternative_part->encoding . '</h2>'; 

           $result['html'] = imap_fetchbody($connection, $id, ($key + 1) . '.' . ($alternative_key + 1), FT_UID); 
          } 
         } 
        } 
       } 
      } 
     } 

     else 
     { 
      $result['text'] = imap_body($connection, $id, FT_UID); 
     } 

     $result['text'] = imap_qprint($result['text']); 
     $result['html'] = imap_qprint(imap_8bit($result['html'])); 

     return $result; 

    } 

    return false; 
} 

$emails = imap_search($connection,'ALL'); 
// rsort($emails); 

    /* for every email... */ 
foreach($emails as $email_number) { 
    echo $email_number; 
$result = Message_Parse($email_number); 
//$data = $result['attachments']; 
$transport = Swift_MailTransport::newInstance(); 
$mailer = Swift_Mailer::newInstance($transport); 
//$attachment = Swift_Attachment::newInstance($result['attachments'], $filename, 'audio/mp3'); 
$message = Swift_Message::newInstance('test message1 ') 
    ->setFrom(array('from address' => 'name')) 
    ->setTo(array('to address.com')) 
    ->setBody($result['text']); 
// ->attach($attachment); 

    $result1 = $mailer->send($message); 
} 

?> 
+1

哪裏這片神奇的'$ mailer'對象來自? – Rudu

+0

我正在使用swiftmailer發送郵件,這是從那裏。一些魔法代碼進入 – ashajf

回答

9

FT_UID標誌表示您使用的是消息uid,而不是消息序列標識。爲了獲得給定消息的uid,您必須使用msg_uid()函數。

既然你是初學者,我幾乎認爲這是你的問題,所以這裏是完整的例子如何讓頭和一個給定的消息的內容:

<?php 

$emailAddress = '[email protected]'; 
$password = 'someSecretPassword'; 
$server = 'localhost'; 
$folder = 'Inbox'; 

$dsn = sprintf('{%s}%s', $server, $folder); 
$mbox = imap_open($dsn, $emailAddress, $password); 

if (!$mbox) { 
    die ('Unable to connect'); 
} 

$status = imap_status($mbox, $dsn, SA_ALL); 
$msgs = imap_sort($mbox, SORTDATE, 1, SE_UID); 

foreach ($msgs as $msguid) { 
    $msgno = imap_msgno($mbox, $msguid); 
    $headers = imap_headerinfo($mbox, $msgno); 
    $structure = imap_fetchstructure($mbox, $msguid, FT_UID); 

    var_dump($headers); 
    var_dump($structure); 
}