Search code examples
google-apps-scriptgmailgmail-api

Google Apps Script Gmail getPlainBody Line Breaks


With the Google Apps Script Gmail library, when I use the function GmailMessage.getPlainBody(), the API seems to take what used to be one paragraph and break it up into multiple, potentially by using a character limit. For instance, a paragraph of my email reads:

From the link you sent me, I gleaned that Gmail refers to their secure email as confidential.

But when I call this function on the email, it becomes:

From the link you sent me, I gleaned that Gmail refers to their
secure email as confidential.

And, when I split the email text on a new line delimitor and do a bit of cleanup to create an array with my output, I end up with:

['From the link you sent me, I gleaned that Gmail refers to their', 'secure email as confidential.']

I viewed this Reddit post, which seemed to deal with the similar problem. But, I tried the resolution suggested by the person who posed the question:

body =  message.getPlainBody().replace(/\r\n\r\n/gm,'aaaLINEBREAKERaaa').replace(/\r\n/gm,' ').replace(/aaaLINEBREAKERaaa/gm, '\r\r').replace(/  /gm,' ')

And it didn't quite give me what I need. Has anyone else encountered this problem, and if so, do you have a suggested workaround? Thanks!


Solution

  • I had the same issue. In that case, I used a workaround.

    When I checked the email, I noticed that the HTML body is included in the message body and the HTML body has the original paragraph, and I used this situation. So, in this workaround, the original text is retrieved from the HTML body and the HTML is converted to a text. By this, the original paragraph is obtained. The sample script is as follows.

    Sample script:

    This script uses Drive API for converting HTML to text. So pelase enable Drive API at Advanced Google services.

    var message =  // Here, please use your "message".
    
    var html = message.getBody();
    var id = Drive.Files.insert({title: "temp", mimeType: MimeType.GOOGLE_DOCS}, Utilities.newBlob(html, MimeType.HTML)).id;
    var text = DocumentApp.openById(id).getBody().getText(); // or DocumentApp.openById(id).getBody().getText().trim();
    DriveApp.getFileById(id).setTrashed(true);
    console.log(text)
    

    References: