2016-12-22 1 views
2

enter image description here반송 된 이메일의 전신 내용을 추출하는 방법은 무엇입니까?

위의 스크린 샷은 수신 된 반송 메일의 샘플입니다.

다음 코드를 사용하여 메일 본문을 추출하고 있습니다.

function test() 
{ 
    var BouncedEmails = GmailApp.search("label:test The following message was undeliverable "); 

    for(var i=0;i<BouncedEmails.length;i++) 
    { 
    var Gmessage = GmailApp.getMessagesForThread(BouncedEmails[i]); 

    for(var j=0;j<Gmessage.length;j++) 
    { 
     var body = Gmessage[j].getPlainBody(); 
     Logger.log(body); 
    } 
    } 
} 

그러나이 작업을 수행 할 때 다음 출력이 표시됩니다. 당신이 몸의 마지막 부분이 누락 볼 수 있듯이

enter image description here , 즉 :

enter image description here

나는 또한 사용하여 시도 :

대신
var body = Gmessage[j].getBody(); 

"GetPlainBody()" 그러나 결과는 여전히 동일했습니다. 사용에

:

var body = Gmessage[j].getRawContent(); 

나는 인코딩의 일종으로 날 것으로 보인다 누락 된 부분에 대한 출력으로이있어. enter image description here

내 질문은, 어떻게 반송 된 메일의 전체 내용을 추출합니까?

감사합니다.

답변

2

나는 마침내 내 자신의 질문에 대한 답을 찾았습니다.

이것은 나를 위해 일했으며 우리 행성에있는 누구나 꽤 잘될 것입니다. 사용할 수있는 솔루션

function test() 
{ 
    var BouncedEmails = GmailApp.search("label:test The following message was undeliverable "); 

    for(var i=0;i<BouncedEmails.length;i++) 
    { 
    var threadId = BouncedEmails[i].getId(); 

    var id = Session.getEffectiveUser().getEmail(); 
    var body = Gmail.Users.Threads.get(id, threadId, {format : 'full'}); 

    var messages = body.messages; 

    var payLoad = messages[0].payload.parts[2]; 

    var string = JSON.stringify(payLoad); 
    Logger.log(string); 
    } 
} 

일부 경우에 작동합니다 @AmitAgarwal 및 @ShyamKansagra가 제공하는 솔루션,하지만 당신의 정확한 요구 사항이 무엇인지에 따라 달라집니다.

0

Logger.log는 특정 행 수 이후에 출력을 자르지 않으므로 Logger.log를 사용하지 마십시오. 결과를 스프레드 시트에 기록하면 getPlainBody() 또는 getBody()로 전체 본문을 추출합니다.

나는 최근에 모두 bounced emails in Gmail이되는 Google Script를 발행하여 Google 시트에 기록합니다. 오픈되어 있으므로 해당 스크립트를 빌드 할 수 있습니다.

+0

제안 해 주셔서 감사합니다.하지만 이미 질문을 게시하기 전에 스프레드 시트에 출력물 로깅을 시도했습니다. 출력은 여전히 ​​동일합니다. –

+0

나는 당신의 출판 된 스크립트를 보았다. 그러나 그 부분은 나 자신을 할 수 있었다. ** 내가 수행하려고하는 ** 추가 작업은 ** 배달되지 않은 원본 메일의 제목을 추출하는 것입니다. ** (또는 다시 반송되었습니다.). –

0

반송 된 이메일에 대해 getBody(), getPlainBody()getRawContent() 개의 방법을 사용해 보았습니다. 나는이 방법들이 전자 메일의 전체 본문을 제공하지 못한다는 것을 알아 냈습니다. 즉 기술적 세부 사항이있는 부분이 로그에서 완전히 건너 뛰었습니다.

그래서 저는 다음 코드 (@Amit Agarwal에 대한 모든 크레디트)를 사용했습니다.이 코드는 Amit이 답변에서 공유 한 링크에서 발견되었으며 반송 된 전체 이메일 본문을 받았습니다.

var t = "in:anywhere from:([email protected] OR [email protected])"; 
GmailApp.search(t,0,500).forEach(function(t) 
              { 
              t.getMessages().forEach(function(r) 
                    { 
                     if(r.getFrom().indexOf("mailer-daemon")!==-1) 
                     { 
                     var i=r.getPlainBody(); 
                     Logger.log(i); 
                     } 
                    } 
                    ) 
              } 

) 

그것은 나를 위해 일한 및 로그 자체에 전체 내용을 주었다 : 여기

는 코드입니다. 희망이 도움이됩니다.

+0

나는 내 경우에 이것을 시도했지만 결과는 불행히도 실망 스럽다. 시도해 줘서 고마워. –

+1

당신은 오신 것을 환영합니다. 가능한 경우 서버 측에서 반송 이메일 형식을 변경하십시오. 또한 문제를 다시 작성하고 문제가 동일한 것인지 또는 확인한 이메일의 경우에만 문제가 있는지 확인하십시오. –

+0

@ShyamKansagra 대답이 나를 위해 일했습니다. 피사체가 여전히 인코딩되고 있습니까? 위의 코드를 볼 때 얻을 수있는 로그를 게시 할 수 있습니까? – utphx

관련 문제