2014-11-17 4 views
0

안녕하십니까, 제 고객은 PHP를 사용하여 웹 사이트를 만들어 모든 계정의 모든 이메일을 읽고 답장 해달라고 요청했습니다. 이제 그는 Microsoft Exchange Server에 회사 계정이 있으며 PHP imap_open을 사용하여 메일 서버에서 이메일을 가져오고 Gmail 계정에서 이메일 첨부 파일을 가져올 수 있지만 Microsoft Exchange 서버 계정에서 첨부 파일을 검색 할 수는 없습니다. 오류가 생성되지 않아서 무엇이 잘못되었는지 확신 할 수 없습니다. Microsoft Exchange 서버 전자 메일 계정에서 첨부 파일을 검색하기 위해 특별한 코드를 작성해야합니까?PHP IMAP Microsoft Exchange Server에서 첨부 파일 받기

또한 비슷한 문제가 이메일을 보내려고 할 때 내가 Gmail의 SMTP 정보를 사용하여 PHP 시스템에서 이메일을 보낼 수 있어요, 지속 아니라 Microsoft Exchange 서버와

나는 아직도 연구하고 있지만 약간의 도움이 될 것이다 많이 감사합니다. 아마도 올바른 방향으로 나를 가리킬 수 있다면 코드에 무엇이 잘못된 것인지 이해할 수있을 것입니다. Microsoft Exchange 서버가 무엇인지 또는 Gmail과 같은 다른 이메일 제공 업체와 다른 점에 대해 많이 알지 못하므로 올바른 방향으로 나를 안내 할 수 있다면 정말 고맙겠습니다.

첨부 파일 검색 코드

Gmail에 잘 작동하는 것은 전망 서버에 대한 문제를 보내는 SMTP 메일에 대해서는

답변

2

차지한다. 나는 같은 문제를 가지고 있었는데 문제는 포트 번호와 관련이있다.

Port:25 또는 다른 옵션 대신 Port:587을 사용하십시오 ...이 포트로 Outlook에서 보내고 있으며 매번 성공했습니다.

그리고 솔루션은 대소 문자 구분에 숨겨져 IMAP 첨부 파일 문제에 대한

... 우리는 첨부 파일을 가져 오는에 대한 일반적 담당하는 기능 object imap_fetchstructure (resource $imap_stream , int $msg_number) 보면

.

우리는 Gmail 및 기타 무엇을 얻을 : 우리가있을 경우 확인하기 위해 if 문을 사용

 
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 
           ) 

         ) 

       ) 

     ) 

) 
?> 

그래서 지금, 일반적으로 어딘가에 첨부 파일을 가져 오는 경우 : 우리는 무엇 전망 얻을

 
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 
           ) 

         ) 

       ) 

     ) 

) 

이메일의 해당 부분에있는 첨부 파일. 이 컨텍스트에서는 PHP IMAP Library Part 1PHP IMAP Library Part 2 ... Fetching Attachment 기능은 자습서 2 부에 있습니다.

가져 오기 첨부 기능 :

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; 
}

공지 사항 당신은 그것을 자본 ATTACHMENT과 비교되지만 아웃룩 결과가 더 자본 ATTACHMENTattachment이이 없습니다 볼 수 else if 문 내부의 if 문.

그래서 최종 기능이 있어야한다 ... 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

관련 문제