2016-12-22 7 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

私はついに自分の質問に対する答えを見つけました。

これは私のために働いており、私たちの惑星にいる人にとってはかなり役に立ちます。 @AmitAgarwalと@ShyamKansagraによって提供さ

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); 
    } 
} 

ソリューションはまた、いくつかのケースのために働くが、その解決策を使用するには、あなたの正確な要件であるかに依存します。

0

Logger.logは、特定の行数の後に出力を切り捨てるので、使用しないでください。出力をスプレッドシートに記録すると、全身がgetPlainBody()またはgetBody()で抽出されていることがわかります。

私は最近、すべてbounced emails in GmailというGoogleスクリプトを公開し、Googleのシートに記録しています。オープンしているので、そのスクリプトを構築することができます。

+0

提案していただきありがとうございますが、ここで質問を投稿する前にスプレッドシートに出力を記録しようとしました。出力は同じままです。 –

+0

私はあなたの出版されたスクリプトを見ました。しかし、私は自分自身ができるようになりました。**私が達成しようとしている**追加タスク**は、**配信されなかった元のメールの件名を抽出することです**(または、 )。 –

0

また、返信されたメールの方法でgetBody(),getPlainBody()およびgetRawContent()の方法を試しました。私は、これらの方法が電子メールの全身を与えていない、すなわち技術的な詳細を持つ部分がログ内で完全にスキップされたことに気付きました。

私はAmitが彼の答えで共有したリンクで見つけたこの次のコード(@Amit Agarwalのすべてのクレジット)を使用して、私にバウンスされたメールを送ってくれました。ここで

はコードです:

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

関連する問題