19

I am creating a workflow process in Apps Script where a Doc is generated from a template and shared with various users for approval. The Script sends a customised email notifying a user that the document requires their approval but they also receive a second email at each stage in the process from the user whose Drive the document is stored in saying "User has shared a document with you". Is there any way of disabling these alerts? When you share a document manually from your Drive, there is a checkbox option that allows you to choose whether or not the user receives a notification. However, I cannot find a way to disable this notification with Apps Script.

I am using doc.addEditors(users) to share the document.

Many Thanks

StuWatson
  • 541
  • 1
  • 4
  • 13
  • 3
    Check: [Issue 2829: Ability to disable notifications when using DriveApp addEditor() and addViewer() methods](http://code.google.com/p/google-apps-script-issues/issues/detail?id=2829) – wchiquito Jan 17 '14 at 16:53

3 Answers3

22

Another option would be to use the Drive advanced service (which you should enable in the Resources menu in the Script Editor).

The code used should be

Drive.Permissions.insert(
   {
     'role': 'writer',
     'type': 'user',
     'value': 'bob@example.com'
   },
   fileId,
   {
     'sendNotificationEmails': 'false'
   });
Rodrigo Chiong
  • 595
  • 6
  • 11
  • Any idea what `fileId` is supposed to be? I can find the file if I try `DriveApp.getFileById("fileID")` but if I try the above code it says `File not found`. – IMTheNachoMan Jun 17 '19 at 20:56
  • 1
    `fileId` is the 44 characters that appear as part of the URL when you open the file, but I don't think the `Drive.Permissions.insert` function is still available – alejandro Mar 02 '20 at 20:29
  • 2
    @alejandro `Drive.Permissions.insert()` is still available if you enable the [Advanced Drive Service](https://developers.google.com/apps-script/advanced/drive). It is not part of the standard `DriveApp` service. – Rodrigo Chiong Mar 03 '20 at 15:14
  • 1
    @IMTheNachoMan make sure you have a valid `fileId` string first. If you still have issues you can try getting the file first `var file = DriveApp.getFileById(fileId)` and then insert a permission replacing `fileId` in the code example with `file.getId()`. – Rodrigo Chiong Mar 03 '20 at 15:16
  • This is working very well, Thank you. I use this code to share folders which are full of PDFs on the drive. The keyword is the Drive ;) – Michael Mar 09 '20 at 20:50
  • @Michael I'm glad it's been helpful ;) – Rodrigo Chiong Mar 10 '20 at 12:18
13

There is a simple solution if you are working with Google Docs or Google SpreadSheets. You can use DocumentApp or SpreadSheetApp to share your Docs or SpreadSheets without email notification:

DocumentApp

var doc = DocumentApp.openById('124144')
doc.addEditor('example@mail.com').addViewer('example2@mail.com')

SpreadSheetApp

var spreadSheet = SpreadsheetApp.openById('124144')
spreadSheet.addEditor('example@mail.com').addViewer('example2@mail.com')

However, if you are working with documents that aren't Docs or SpreadSheets, you must share then using DriveApp and email notification will be send.

maeq
  • 1,073
  • 1
  • 12
  • 23
  • 1
    An excellent solution. Unfortunately, it's not possible to add a commenter via `DocumentApp` or `SpreadsheetApp`... only `DriveApp`. I guess there's no way to add a commenter to something in Drive without also sending them an email (excepting the Drive Advanced Service, of course). – xd1936 Aug 08 '18 at 20:24
  • 1
    This solution no longer works, and sharing via `DocumentApp` or `SpreadsheetApp` now sends emails. – xd1936 Mar 12 '21 at 18:05
1

This isn't possible at the moment. More information about this topic can be found here: https://code.google.com/p/google-apps-script-issues/issues/detail?id=2829

A workaround suggested in the comments of the above issue is to use DocsList instead:

DocsList, SpreadsheetApp and DocumentApp have addEditor and addViewer methods that do not result in notification emails.

TomTasche
  • 5,448
  • 7
  • 41
  • 67