2014-11-17 3 views
0

Здравствуйте, мой клиент попросил меня сделать сайт с использованием PHP, с помощью которого он может читать/отвечать на все свои электронные письма со всех своих учетных записей. Теперь у него есть учетная запись компании на сервере Microsoft Exchange Server, я использую PHP imap_open для получения писем с почтовых серверов, я могу получить вложения электронной почты из учетной записи Gmail, но я не могу получить вложения из учетных записей сервера Microsoft Exchange. Ошибка не возникает, поэтому я не уверен, что не так. Нужно ли мне писать какой-то специальный код, чтобы извлекать вложения из учетных записей электронной почты сервера Microsoft Exchange?PHP IMAP Получить приложение от Microsoft Exchange Server

Также подобная проблема сохраняется при попытке отправить электронную почту, я могу отправить электронную почту от системы PHP с помощью Gmail SMTP детали, но не с сервером Microsoft Exchange

Я до сих пор исследования, но небольшая помощь будет очень ценится, может быть, если вы можете просто указать мне в правильном направлении, я смогу понять, что не так с моим кодом. Я мало знаю о том, что такое сервер Microsoft Exchange или как он отличается от других почтовых провайдеров, таких как Gmail, поэтому я был бы очень признателен, если бы вы могли просто указать мне в правильном направлении.

Прикрепленный код поиска работает отлично для Gmail счет

ответ

2

Что касается SMTP отправки почты проблемы внешнего вида сервера. У меня была та же проблема, проблема с номером PORT.

Используйте Port:587 вместо Port:25 или любые другие варианты ... Я отправлял из Outlook с этим портом, и каждый раз удался.

И для IMAP вопроса присоединения решения спрятано в чувствительности к регистру ...

Если мы рассмотрим функцию object imap_fetchstructure (resource $imap_stream , int $msg_number), которая, как правило, отвечает за выборку вложений.

Что мы получаем для Gmail и другие:

 
stdClass Object 
(
    [type] => 1 
    [encoding] => 0 
    [ifsubtype] => 1 
    [subtype] => MIXED 
    [ifdescription] => 0 
    [ifid] => 0 
    [ifdisposition] => 0 
    [ifdparameters] => 0 
    [ifparameters] => 1 
    [parameters] => Array 
     (
      [0] => stdClass Object 
       (
        [attribute] => BOUNDARY // Notice Here... 
        [value] => b1_04114a96a39b7789f88fdabc7feadc61 
       ) 

     ) 

    [parts] => Array 
     (
      [0] => stdClass Object 
       (
        [type] => 0 
        [encoding] => 1 
        [ifsubtype] => 1 
        [subtype] => HTML 
        [ifdescription] => 0 
        [ifid] => 0 
        [lines] => 20 
        [bytes] => 597 
        [ifdisposition] => 0 
        [ifdparameters] => 0 
        [ifparameters] => 1 
        [parameters] => Array 
         (
          [0] => stdClass Object 
           (
            [attribute] => CHARSET // Notice Here... 
            [value] => iso-8859-1 
           ) 

         ) 

       ) 

      [1] => stdClass Object 
       (
        [type] => 5 
        [encoding] => 3 
        [ifsubtype] => 1 
        [subtype] => JPEG 
        [ifdescription] => 0 
        [ifid] => 0 
        [bytes] => 266988 
        [ifdisposition] => 1 
        [disposition] => ATTACHMENT  // Notice Here... 
        [ifdparameters] => 1 
        [dparameters] => Array 
         (
          [0] => stdClass Object 
           (
            [attribute] => FILENAME // Notice Here... 
            [value] => oIROo0jJDb-15.jpg 
           ) 

         ) 

        [ifparameters] => 1 
        [parameters] => Array 
         (
          [0] => stdClass Object 
           (
            [attribute] => NAME // Notice Here... 
            [value] => oIROo0jJDb-15.jpg 
           ) 

         ) 

       ) 

     ) 

) 

что мы получаем для OUTLOOK:

 
1 
    [encoding] => 0 
    [ifsubtype] => 1 
    [subtype] => MIXED 
    [ifdescription] => 0 
    [ifid] => 0 
    [ifdisposition] => 0 
    [ifdparameters] => 0 
    [ifparameters] => 1 
    [parameters] => Array 
     (
      [0] => stdClass Object 
       (
        [attribute] => boundary 
        [value] => b1_df2cd0669f50efc788d5aecfdded4957 
       ) 

     ) 

    [parts] => Array 
     (
      [0] => stdClass Object 
       (
        [type] => 0 
        [encoding] => 1 
        [ifsubtype] => 1 
        [subtype] => HTML 
        [ifdescription] => 0 
        [ifid] => 0 
        [lines] => 23 
        [bytes] => 729 
        [ifdisposition] => 0 
        [ifdparameters] => 0 
        [ifparameters] => 1 
        [parameters] => Array 
         (
          [0] => stdClass Object 
           (
            [attribute] => charset // Notice Here... 
            [value] => iso-8859-1 
           ) 

         ) 

       ) 

      [1] => stdClass Object 
       (
        [type] => 5 
        [encoding] => 3 
        [ifsubtype] => 1 
        [subtype] => JPEG 
        [ifdescription] => 0 
        [ifid] => 0 
        [bytes] => 266988 
        [ifdisposition] => 1 
        [disposition] => attachment // Notice Here... 
        [ifdparameters] => 1 
        [dparameters] => Array 
         (
          [0] => stdClass Object 
           (
            [attribute] => filename // Notice Here... 
            [value] => cqLaQAZSei-15.jpg 
           ) 

         ) 

        [ifparameters] => 1 
        [parameters] => Array 
         (
          [0] => stdClass Object 
           (
            [attribute] => name // Notice Here... 
            [value] => cqLaQAZSei-15.jpg 
           ) 

         ) 

       ) 

     ) 

) 
?> 

Так что теперь, как правило, для извлечения вложений где-то мы используем, если заявление для проверки, если есть любые вложения в эту часть письма. Для этого контекста я бы назвал PHP IMAP Library Part 1 И PHP IMAP Library Part 2 ... Функция Fetching Attachment находится в части 2 учебника.

Get Приложение Функция:

function getAttachments($imap, $mailNum, $part, $partNum) { 
    $attachments = array(); 

    if (isset($part->parts)) { 
     foreach ($part->parts as $key => $subpart) { 
      if($partNum != "") { 
       $newPartNum = $partNum . "." . ($key + 1); 
      } 
      else { 
       $newPartNum = ($key+1); 
      } 
      $result = getAttachments($imap, $mailNum, $subpart, 
       $newPartNum); 
      if (count($result) != 0) { 
       array_push($attachments, $result); 
      } 
     } 
    } 
    else if (isset($part->disposition)) { 
     if ($part->disposition == "ATTACHMENT") { // Notice here... 
      $partStruct = imap_bodystruct($imap, $mailNum, 
       $partNum); 
      $attachmentDetails = array(
       "name" => $part->dparameters[0]->value, 
       "partNum" => $partNum, 
       "enc"  => $partStruct->encoding 
      ); 
      return $attachmentDetails; 
     } 
    } 

    return $attachments; 
}

Обратите внимание на if заявление внутри else if заявления Вы можете видеть, что это сравнение с капиталом ATTACHMENT, но результат перспективы не имеет капитала ATTACHMENT они имеют attachment. Таким образом, вместо этой строки я рекомендую использовать: strtoupper($part->disposition) == 'ATTACHMENT' ...

Таким образом, мы имеем фекальные ...

Так последняя функция должна быть:

function getAttachments($imap, $mailNum, $part, $partNum) { 
    $attachments = array(); 

    if (isset($part->parts)) { 
     foreach ($part->parts as $key => $subpart) { 
      if($partNum != "") { 
       $newPartNum = $partNum . "." . ($key + 1); 
      } 
      else { 
       $newPartNum = ($key+1); 
      } 
      $result = getAttachments($imap, $mailNum, $subpart, 
       $newPartNum); 
      if (count($result) != 0) { 
       array_push($attachments, $result); 
      } 
     } 
    } 
    else if (isset($part->disposition)) { 
     if (strtoupper($part->disposition) == "ATTACHMENT") { 
      $partStruct = imap_bodystruct($imap, $mailNum, 
       $partNum); 
      $attachmentDetails = array(
       "name" => $part->dparameters[0]->value, 
       "partNum" => $partNum, 
       "enc"  => $partStruct->encoding 
      ); 
      return $attachmentDetails; 
     } 
    } 

    return $attachments; 
}

Я надеюсь, это исправит проблему ... Потому что это было для меня ...

Спасибо ...

+0

Большое спасибо за ваше решение, оно решило мою проблему, спасибо большое – Aditya