GAS Help: Copying attachment from Gmail into Gdrive - doesn't copy attachments

Hey everyone.

I’m working on a script that will intercept emails, copy some details into a Gsheet, and copy the attachment into the Gdrive (while also putting a filepath into a cell for the row created per email).

I have two problems that I’m hoping someone can shed some light on


Problem 1: The copied attachment into the Gdrive isn’t the actual attachment

The problem I’m having is that the actual file created isn’t a copy of the attachment file, it’s a 15kb PDF with the following contents:


Here’s a closer look: image

Here’s the script accomplishing the file copy

image

Everything in here works, except for attachment.copyBlob() - that’s creating the small bit of text you see in the images above.

How can I make the copy an actual copy of the attachment?


Problem 2: I can’t get the attachment name to return out of the attachments loop

You can see from the script fragment above that the attachment stuff is inside a loop;

  • I need to get the name of the attachment (which is the name of the file created in the Gdrive) addended to the newFilePath.

But when I tried return newFilePath, it validated but it’s not actually returning a value; the filepath that’s reported is missing the file name.

The code is built for multiple attachments, but I really only need it for one. In this scenario, there will only always be one attachment - but I can’t find anything that shows how to code for a single thing, it’s all for multiple (which makes sense).

So how can I get the filename out of the attachment loop?


Thanks to you all! partyparrot (Appsheet)

2 Likes

I think you need to getMimeType() in your ForEach() loop and use that type for the new blob().

1 Like

Maybe this for Problem #2?

image

3 Likes

@GreenFlux I originally had that in there, pulling the PDF type from the attachment and setting that to the mime type - but it produced the same result. It was my thought that if I didn’t specify the mimeType it would figure it out itself.

Indeed you were correct @Marc_Dillon thanks!

1 Like

Still having a problem with actually copying the content of the pdf.

When I investigate what’s inside the attachment… I’m finding that it’s actually empty.

image

I have no idea what I’m doing wrong. attachment.copyBlob() is the only thing that people are putting out there in the internet, there’s no other methods or anything that I can find.

Yet in my case, it doesn’t actually pull the attachment.

I must be missing something.

I would try this solution Copying Gmail attachments to Google Drive using Apps Script - Stack Overflow

3 Likes

Thanks for the info, the problem I’m facing won’t be solved by the link you’ve suggested.

  • Everything I find online gives the same exact solution;
    • Eventually you get down to a loop through the attachments, and you then attachment.copyBlob()

My problem is that it’s not copying the blob - it’s actually causing some sort of error within the PDF file itself, some kind of error or something.

I’m pretty much abandoning this for now, as I’ve managed to extract the data from the attachment using attachment.getPlainBody() - and that’s good enough for now.

But sure would be nice, and my client is expecting, the file from the gmails to be entered into the Gdrive.