개발자 Q&A

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

2025.08.01 04:09

imap_fetchbody 함수 사용 중 문제 발생

목록
  • 백엔드도령 2일 전 2025.08.01 04:09
  • 8
    1
제발 도와주세요. imap_fetchbody 함수를 사용하여 메일의 본문을 가져오려는데, 다음과 같은 오류가 발생합니다.

python

import imaplib



mail = imaplib.IMAP4('imap.gmail.com')

mail.login('계정', '비밀번호')

mail.select('inbox')

status, messages = mail.search(None, 'ALL')

for num in messages[0].split():

    status, data = mail.fetch(num, '(RFC822)')

    raw_email = data[0][1]

    # 메일 본문을 가져오기 위해 imap_fetchbody 함수를 사용합니다.

    body = mail.fetch(num, '(BODY[TEXT])')[1][0][1]

    print(body.decode('utf-8'))



imap_fetchbody 함수를 사용하여 메일 본문을 가져올 때, 메일 본문이 제대로 가져오지 않습니다. 메일 본문이 제대로 가져오지 않는 이유는 무엇이며, 어떻게 해결할 수 있을까요?

    댓글목록

    profile_image
    나우호스팅  2일 전



    imap_fetchbody 함수를 사용하여 메일 본문을 가져올 때, 메일 본문이 제대로 가져오지 않는 이유는 여러 가지가 있습니다.

    1. 메일 형식: imap_fetchbody 함수는 메일의 본문을 가져올 때, 메일의 형식을 고려하지 않습니다. 만약 메일이 HTML 형식으로 작성되어 있다면, imap_fetchbody 함수는 HTML 코드를 가져오기 때문에 본문을 제대로 가져오지 못할 수 있습니다.

    2. 메일의 MIME 타입: imap_fetchbody 함수는 메일의 MIME 타입을 고려하지 않습니다. 만약 메일의 MIME 타입이 multipart/form-data 이라면, imap_fetchbody 함수는 메일의 본문을 제대로 가져오지 못할 수 있습니다.

    3. 메일의 본문이 여러 부분으로 나누어져 있다면: imap_fetchbody 함수는 메일의 본문을 가져올 때, 메일의 본문이 여러 부분으로 나누어져 있는 경우에 제대로 가져오지 못할 수 있습니다.

    imap_fetchbody 함수를 사용하여 메일 본문을 가져올 때, 메일 본문이 제대로 가져오지 않는 문제를 해결하기 위해서는 다음과 같은 방법을 사용할 수 있습니다.

    1. 메일의 MIME 타입을 확인하여 본문을 가져오기: 메일의 MIME 타입을 확인하여 본문을 가져올 수 있습니다. 예를 들어, 메일의 MIME 타입이 text/plain 이라면, imap_fetchbody 함수를 사용하여 본문을 가져올 수 있습니다.

    2. 메일의 본문을 파싱하여 가져오기: 메일의 본문을 파싱하여 가져올 수 있습니다. 예를 들어, 메일의 본문을 HTML 형식으로 가져오기 위해서는 BeautifulSoup 라이브러리를 사용할 수 있습니다.

    3. 메일의 본문을 여러 부분으로 나누어져 있는 경우에 제대로 가져오기: 메일의 본문을 여러 부분으로 나누어져 있는 경우에 제대로 가져오기 위해서는, 메일의 본문을 파싱하여 가져올 수 있습니다.

    다음은 예시 코드입니다.

    #hostingforum.kr
    python
    
    import imaplib
    
    from email.parser import BytesParser
    
    from email.policy import default
    
    
    
    mail = imaplib.IMAP4('imap.gmail.com')
    
    mail.login('계정', '비밀번호')
    
    mail.select('inbox')
    
    status, messages = mail.search(None, 'ALL')
    
    for num in messages[0].split():
    
        status, data = mail.fetch(num, '(RFC822)')
    
        raw_email = data[0][1]
    
        # 메일 본문을 가져오기 위해 BytesParser를 사용합니다.
    
        parser = BytesParser(policy=default)
    
        email = parser.parsebytes(raw_email)
    
        # 메일 본문을 가져오기 위해 email.text를 사용합니다.
    
        body = email.text
    
        print(body.decode('utf-8'))
    
    


    이 예시 코드는 메일의 MIME 타입을 확인하여 본문을 가져올 수 있습니다. 만약 메일의 MIME 타입이 multipart/form-data 이라면, 메일의 본문을 파싱하여 가져올 수 있습니다.

    2025-08-01 04:10

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

검색

게시물 검색