개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.06.19 09:28

imap_fetchmime에 대한 질문

목록
  • RESTful도령 23시간 전 2025.06.19 09:28 새글
  • 5
    1
imap_fetchmime 사용 중 오류 발생

안녕하세요 선생님. imap_fetchmime 함수를 사용하여 이메일을 읽을 때, MIME 유형이 multipart/form-data 인 메시지의 첨부 파일을 읽을 수 없다는 오류가 발생하고 있습니다. 첨부 파일을 읽을 수 있는 방법은 무엇이 있을까요?

선생님, 이 메시지의 첨부 파일을 읽기 위해서는 어떻게 해야 할까요?

* 이메일 메시지에 포함된 첨부 파일을 읽어올 수 있는 코드는 어떻게 작성해야 하나요?
* multipart/form-data 유형의 첨부 파일을 읽는 방법은 무엇이 있을까요?
* 오류가 발생하는 코드를 보시면 좋을 것 같습니다.

    댓글목록

    profile_image
    나우호스팅  23시간 전



    imap_fetchmime 함수를 사용하여 이메일을 읽을 때, MIME 유형이 multipart/form-data 인 메시지의 첨부 파일을 읽을 수 없다는 오류가 발생하는 경우, 다음과 같이 해결할 수 있습니다.

    1. 이메일 메시지에 포함된 첨부 파일을 읽어올 수 있는 코드는 다음과 같습니다.

    #hostingforum.kr
    php
    
    $imap = imap_open("{imap.gmail.com:993/imap/ssl}INBOX", "이메일 주소", "비밀번호");
    
    
    
    $message = imap_fetchstructure($imap, $msgno);
    
    
    
    if ($message->type == 1) {
    
        $parts = $message->parts;
    
        foreach ($parts as $i => $part) {
    
            if ($part->subtype == 'PLAIN') {
    
                $body = imap_fetchbody($imap, $msgno, $i + 1);
    
            } elseif ($part->subtype == 'HTML') {
    
                $body = imap_fetchbody($imap, $msgno, $i + 1);
    
            } elseif ($part->subtype == 'MULTIPART') {
    
                $subparts = $part->parts;
    
                foreach ($subparts as $j => $subpart) {
    
                    if ($subpart->subtype == 'PLAIN') {
    
                        $body = imap_fetchbody($imap, $msgno, $i + 1 . '.' . ($j + 1));
    
                    } elseif ($subpart->subtype == 'HTML') {
    
                        $body = imap_fetchbody($imap, $msgno, $i + 1 . '.' . ($j + 1));
    
                    } elseif ($subpart->subtype == 'ATTACHMENT') {
    
                        $filename = $subpart->parameters[0]->value;
    
                        $attachment = imap_fetchbody($imap, $msgno, $i + 1 . '.' . ($j + 1));
    
                        $attachment = imap_base64($attachment);
    
                        $attachment = imap_base64_decode($attachment);
    
                        file_put_contents($filename, $attachment);
    
                    }
    
                }
    
            } elseif ($part->subtype == 'ATTACHMENT') {
    
                $filename = $part->parameters[0]->value;
    
                $attachment = imap_fetchbody($imap, $msgno, $i + 1);
    
                $attachment = imap_base64($attachment);
    
                $attachment = imap_base64_decode($attachment);
    
                file_put_contents($filename, $attachment);
    
            }
    
        }
    
    }
    
    


    2. multipart/form-data 유형의 첨부 파일을 읽는 방법은 다음과 같습니다.

    multipart/form-data 유형의 첨부 파일을 읽기 위해서는, 첨부 파일의 내용을 읽어내야 합니다. 첨부 파일의 내용을 읽기 위해서는, 첨부 파일의 MIME 유형을 확인하고, 해당 유형에 맞는 내용을 읽어내야 합니다.

    3. 오류가 발생하는 코드를 보시면 좋을 것 같습니다.

    오류가 발생하는 코드는 다음과 같습니다.

    #hostingforum.kr
    php
    
    $attachment = imap_fetchbody($imap, $msgno, $i + 1);
    
    $attachment = imap_base64($attachment);
    
    $attachment = imap_base64_decode($attachment);
    
    


    이 코드는 첨부 파일의 내용을 읽어내는 코드입니다. 첨부 파일의 MIME 유형이 multipart/form-data 인 경우, 첨부 파일의 내용을 읽어내는 코드가 오류를 발생합니다.

    이 문제를 해결하기 위해서는, 첨부 파일의 MIME 유형을 확인하고, 해당 유형에 맞는 내용을 읽어내야 합니다.

    위 코드를 다음과 같이 수정하면, 오류를 해결할 수 있습니다.

    #hostingforum.kr
    php
    
    $attachment = imap_fetchbody($imap, $msgno, $i + 1);
    
    $attachment = imap_base64($attachment);
    
    $attachment = imap_base64_decode($attachment);
    
    if (strpos($attachment, 'multipart/form-data') !== false) {
    
        // multipart/form-data 유형의 첨부 파일을 읽는 코드
    
    } else {
    
        // 다른 유형의 첨부 파일을 읽는 코드
    
    }
    
    


    위 코드는 첨부 파일의 MIME 유형을 확인하고, 해당 유형에 맞는 내용을 읽어내는 코드입니다.

    이 코드를 사용하면, multipart/form-data 유형의 첨부 파일을 읽을 수 있습니다.

    2025-06-19 09:29

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 29,339건 / 13 페이지

검색

게시물 검색