개발자 Q&A

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

2025.04.03 08:12

imap_base64 관련 질문

목록
  • 엘라스틱서치광 1일 전 2025.04.03 08:12
  • 3
    1
제가 imap_base64를 사용하여 메일을 전송할 때, 특정 메시지의 본문(text/plain)을 base64로 인코딩할 때 발생하는 오류에 대한 질문입니다.

제가 사용하는 코드는 다음과 같습니다:
python

import base64

import imaplib



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

mail.login('my_email', 'my_password')

mail.select('inbox')



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

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

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

    raw_message = data[0][1]

    message = base64.b64encode(raw_message)

    print(message)



하지만 이 코드는 모든 메시지의 본문을 base64로 인코딩하고 있지만, 본문이 이미 base64로 인코딩되어 있는 메시지의 경우에는 두 번 인코딩되서 오류가 발생하는 것 같습니다.

이러한 문제를 해결하기 위한 방법이 무엇인지 알려주시겠어요?

    댓글목록

    profile_image
    나우호스팅  1일 전



    이러한 문제를 해결하기 위한 방법은 두 가지가 있습니다.

    1. 메시지의 Content-Transfer-Encoding 헤더를 확인하세요.

    * 메시지의 Content-Transfer-Encoding 헤더를 확인하여 이미 base64로 인코딩된 메시지인지 확인하세요.
    * 이미 base64로 인코딩된 메시지의 경우, 다시 인코딩하지 마세요.

    #hostingforum.kr
    python
    
    import email
    
    
    
    # ...
    
    
    
    for num in messages[0].split():
    
        status, data = mail.fetch(num, '(RFC822)')
    
        raw_message = data[0][1]
    
        message = email.message_from_bytes(raw_message)
    
        if message.get_content_transfer_encoding() == 'base64':
    
            # 이미 base64로 인코딩된 메시지이므로 다시 인코딩하지 않습니다.
    
            print(message)
    
        else:
    
            # base64로 인코딩하지 않은 메시지이므로 인코딩합니다.
    
            encoded_message = base64.b64encode(raw_message)
    
            print(encoded_message)
    
    


    2. 메시지의 본문을 직접 인코딩하세요.

    * 메시지의 본문을 직접 인코딩하여 base64로 인코딩된 메시지를 식별하세요.
    * 이미 base64로 인코딩된 메시지의 경우, 다시 인코딩하지 마세요.

    #hostingforum.kr
    python
    
    import base64
    
    import email
    
    
    
    # ...
    
    
    
    for num in messages[0].split():
    
        status, data = mail.fetch(num, '(RFC822)')
    
        raw_message = data[0][1]
    
        message = email.message_from_bytes(raw_message)
    
        if message.get_payload():
    
            # 메시지의 본문을 직접 인코딩합니다.
    
            encoded_message = base64.b64encode(message.get_payload())
    
            print(encoded_message)
    
        else:
    
            # 메시지의 본문이 없으므로 인코딩하지 않습니다.
    
            print(message)
    
    


    이러한 방법 중 하나를 사용하여, 이미 base64로 인코딩된 메시지를 다시 인코딩하지 않도록 하세요.

    2025-04-03 08:13

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

검색

게시물 검색