2011-05-05 20 views
1

난 내 IMAP 계정에서 일부 메일을 읽으려고하는 이메일 중 일반 내용 :변환 텍스트/일반 텍스트

imap.search(['NOT','SEEN']).each do |message_id| 
    mail = imap.fetch(message_id, "BODY[1]") 
end 

내가 아스키의 모든 종류의 수? = 20 = 93 = 94 등 내 문자열에 코드가 있습니다. 이미 변환하거나 해독 할 것이 많은 시도가 있지만 성공하지는 않았습니다. 이 코드를 제거하려면 어떻게해야합니까?

답변

3

quoted-printable, base-64 등과 같이 메시지 본문을 인코딩하는 데는 여러 가지 옵션이 있습니다. Ruby에서 가장 쉬운 방법은 메일 전체에 메시지를 전달하고 구문 분석을 수행 한 다음 일반 텍스트 콘텐츠를 출력하는 것입니다. 경험에

message = Mail.new(raw_source) 
puts message.body.decoded 

실제로 다음과 같이해야 할 사실을 발견 : 우리가 만들기 위해 CloudMailin에서 응용 프로그램에 메시지를 보낼 때

message.multipart? ? (message.text_part ? message.text_part.body.decoded : nil) : message.body.decoded 

우리는 이와 유사한 것을 사용을 평범한 부분이 몸에 있고 MIME이 인코딩되지 않는다는 것이 항상 보장되는 것은 아니기 때문에 일반 부분을 찾습니다.

+0

고마워요! 그 일을 :) –

0

본체가 Quoted-printable 인 것 같습니다. 몸체에 대한 인코딩이 무엇인지 찾아보고 그에 따라 파싱해야합니다. Net::IMAP::BodyTypeBasic처럼 당신에게이 정보를 줄 수는 있겠지만, 나는 더 이상 당신을 얻기에 충분한 루비를 모른다.

1

전자 메일을 구문 분석하려면 다음과 같이 사용해야합니다.

text = message.multipart? ? (message.text_part ? message.text_part.body.decoded : message.html_part.body.decoded) : message.body.decoded 

구문 분석 한 메시지 중 text_part가 전혀 포함되지 않았으므로 거기에 nil을 넣지 않아도 작동하지 않습니다.

관련 문제