code: func Notify(c context.Context, d *tq.Dispatcher, recipients []EmailNotify, templateParams *EmailTemplateInput) error {
  	c = datastore.WithoutTransaction(c)
  
  	// Remove unallowed recipients.
  	allRecipients := recipients
  	recipients = recipients[:0]
  	for _, r := range allRecipients {
  		if isRecipientAllowed(c, r.Email, templateParams.Build) {
  			recipients = append(recipients, r)
  		}
  	}
  
  	if len(recipients) == 0 {
  		logging.Infof(c, "Nobody to notify...")
  		return nil
  	}
  	tasks, err := createEmailTasks(c, recipients, templateParams)
  	if err != nil {
  		return errors.Annotate(err, "failed to create email tasks").Err()
  	}
  	return d.AddTask(c, tasks...)
  }
docs: // Notify discovers, consolidates and filters recipients from a Builder's notifications,
  // and 'email_notify' properties, then dispatches notifications if necessary.
  // Does not dispatch a notification for same email, template and build more than
  // once. Ignores current transaction in c, if any.