StuWatson
StuWatson

Reputation: 541

Share a Drive document without notifying user with Google Apps Script

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

Upvotes: 19

Views: 12881

Answers (5)

SneakyTurtle
SneakyTurtle

Reputation: 24

Another update, I found a way to stop notifications with Drive API V3.

Bellow is an example snippet:

  const permission = {
    'role': 'writer',  
    'type': 'group',    
    'emailAddress': email
  };


  // Insert permission using the Drive API v3
  const result = Drive.Permissions.create(permission, folderId, {
    'supportsAllDrives': true, // enable, if the folder is on a shared drive
    'sendNotificationEmail': false  // Suppress email notifications
  });

Upvotes: -1

Rodrigo Chiong
Rodrigo Chiong

Reputation: 585

Another option would be to use the Drive advanced service v2 (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': '[email protected]'
   },
   fileId,
   {
     'sendNotificationEmails': 'false'
   });

Upvotes: 21

Feu
Feu

Reputation: 5790

Just wanted to point that Rodrigo Chiong's answer is still correct in 2024 and it works as expected.

However, one MUST use Apps Scripts' Drive API Service v2.

When selecting the v3, you notice some changes and think it's going to work, however, after making the minor adjustments it just never works and keeps sending the email notifications.

So, go for the v2 and you're safe.

Upvotes: 1

maeq
maeq

Reputation: 1103

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('[email protected]').addViewer('[email protected]')

SpreadSheetApp

var spreadSheet = SpreadsheetApp.openById('124144')
spreadSheet.addEditor('[email protected]').addViewer('[email protected]')

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.

Upvotes: 13

TomTasche
TomTasche

Reputation: 5526

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.

Upvotes: 1

Related Questions