Update email preferences

  • This code provides examples in Java and Python for updating email preferences within the Google Merchant API.

  • The code demonstrates how to set the news_and_tips field to OPTED_IN , enabling a user to receive news and tips emails.

  • It uses the EmailPreferencesServiceClient to send a UpdateEmailPreferencesRequest to modify the specified user's preferences.

  • The samples showcase how to create an EmailPreferences object, define the FieldMask , and construct the necessary request to update the user's email preferences.

  • The code includes error handling to catch and print potential issues during the update process and supports using the "me" keyword to reference the current authenticated user's email.

Merchant API code sample to update email preferences.

Java

  // Copyright 2024 Google LLC 
 // 
 // Licensed under the Apache License, Version 2.0 (the "License"); 
 // you may not use this file except in compliance with the License. 
 // You may obtain a copy of the License at 
 // 
 //     https://www.apache.org/licenses/LICENSE-2.0 
 // 
 // Unless required by applicable law or agreed to in writing, software 
 // distributed under the License is distributed on an "AS IS" BASIS, 
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 // See the License for the specific language governing permissions and 
 // limitations under the License. 
 package 
  
 shopping.merchant.samples.accounts.emailpreferences.v1 
 ; 
 import 
  
 com.google.api.gax.core.FixedCredentialsProvider 
 ; 
 import 
  
 com.google.auth.oauth2.GoogleCredentials 
 ; 
 import 
  
 com.google.protobuf.FieldMask 
 ; 
 import 
  
 com.google.shopping.merchant.accounts.v1.EmailPreferences 
 ; 
 import 
  
 com.google.shopping.merchant.accounts.v1.EmailPreferences.OptInState 
 ; 
 import 
  
 com.google.shopping.merchant.accounts.v1.EmailPreferencesName 
 ; 
 import 
  
 com.google.shopping.merchant.accounts.v1.EmailPreferencesServiceClient 
 ; 
 import 
  
 com.google.shopping.merchant.accounts.v1.EmailPreferencesServiceSettings 
 ; 
 import 
  
 com.google.shopping.merchant.accounts.v1.UpdateEmailPreferencesRequest 
 ; 
 import 
  
 shopping.merchant.samples.utils.Authenticator 
 ; 
 import 
  
 shopping.merchant.samples.utils.Config 
 ; 
 /** 
 * This class demonstrates how to update a EmailPreferences to OPT_IN to News and Tips. This service 
 * only permits retrieving and updating email preferences for the authenticated user. 
 */ 
 public 
  
 class 
 UpdateEmailPreferencesSample 
  
 { 
  
 public 
  
 static 
  
 void 
  
 updateEmailPreferences 
 ( 
 Config 
  
 config 
 , 
  
 String 
  
 email 
 ) 
  
 throws 
  
 Exception 
  
 { 
  
 GoogleCredentials 
  
 credential 
  
 = 
  
 new 
  
 Authenticator 
 (). 
 authenticate 
 (); 
  
 EmailPreferencesServiceSettings 
  
 emailPreferencesServiceSettings 
  
 = 
  
 EmailPreferencesServiceSettings 
 . 
 newBuilder 
 () 
  
 . 
 setCredentialsProvider 
 ( 
 FixedCredentialsProvider 
 . 
 create 
 ( 
 credential 
 )) 
  
 . 
 build 
 (); 
  
 // Creates EmailPreferences name to identify EmailPreferences. 
  
 String 
  
 name 
  
 = 
  
 EmailPreferencesName 
 . 
 newBuilder 
 () 
  
 . 
 setAccount 
 ( 
 config 
 . 
 getAccountId 
 (). 
 toString 
 ()) 
  
 . 
 setEmail 
 ( 
 email 
 ) 
  
 . 
 build 
 () 
  
 . 
 toString 
 (); 
  
 // Create a EmailPreferences with the updated fields. 
  
 EmailPreferences 
  
 emailPreferences 
  
 = 
  
 EmailPreferences 
 . 
 newBuilder 
 (). 
 setName 
 ( 
 name 
 ). 
 setNewsAndTips 
 ( 
 OptInState 
 . 
 OPTED_IN 
 ). 
 build 
 (); 
  
 FieldMask 
  
 fieldMask 
  
 = 
  
 FieldMask 
 . 
 newBuilder 
 (). 
 addPaths 
 ( 
 "news_and_tips" 
 ). 
 build 
 (); 
  
 try 
  
 ( 
 EmailPreferencesServiceClient 
  
 emailPreferencesServiceClient 
  
 = 
  
 EmailPreferencesServiceClient 
 . 
 create 
 ( 
 emailPreferencesServiceSettings 
 )) 
  
 { 
  
 UpdateEmailPreferencesRequest 
  
 request 
  
 = 
  
 UpdateEmailPreferencesRequest 
 . 
 newBuilder 
 () 
  
 . 
 setEmailPreferences 
 ( 
 emailPreferences 
 ) 
  
 . 
 setUpdateMask 
 ( 
 fieldMask 
 ) 
  
 . 
 build 
 (); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "Sending Update EmailPreferences request" 
 ); 
  
 EmailPreferences 
  
 response 
  
 = 
  
 emailPreferencesServiceClient 
 . 
 updateEmailPreferences 
 ( 
 request 
 ); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "Updated EmailPreferences Name below" 
 ); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 response 
 . 
 getName 
 ()); 
  
 } 
  
 catch 
  
 ( 
 Exception 
  
 e 
 ) 
  
 { 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 e 
 ); 
  
 } 
  
 } 
  
 public 
  
 static 
  
 void 
  
 main 
 ( 
 String 
 [] 
  
 args 
 ) 
  
 throws 
  
 Exception 
  
 { 
  
 Config 
  
 config 
  
 = 
  
 Config 
 . 
 load 
 (); 
  
 // The email address of this user. If you want to get the user information 
  
 // Of the user making the Content API request, you can also use "me" instead 
  
 // Of an email address. 
  
 // String email = "testUser@gmail.com"; 
  
 String 
  
 email 
  
 = 
  
 "me" 
 ; 
  
 updateEmailPreferences 
 ( 
 config 
 , 
  
 email 
 ); 
  
 } 
 } 
  
 

PHP

 < ?php 
 /** 
 * Copyright 2025 Google LLC 
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * you may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at 
 * 
 *     https://www.apache.org/licenses/LICENSE-2.0 
 * 
 * Unless required by applicable law or agreed to in writing, software 
 * distributed under the License is distributed on an "AS IS" BASIS, 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 * See the License for the specific language governing permissions and 
 * limitations under the License. 
 */ 
 require_once __DIR__ . '/../../../../vendor/autoload.php'; 
 require_once __DIR__ . '/../../../Authentication/Authentication.php'; 
 require_once __DIR__ . '/../../../Authentication/Config.php'; 
 use Google\ApiCore\ApiException; 
 use Google\Protobuf\FieldMask; 
 use Google\Shopping\Merchant\Accounts\V1\Client\EmailPreferencesServiceClient; 
 use Google\Shopping\Merchant\Accounts\V1\EmailPreferences; 
 use Google\Shopping\Merchant\Accounts\V1\EmailPreferences\OptInState; 
 use Google\Shopping\Merchant\Accounts\V1\UpdateEmailPreferencesRequest; 
 /** 
 * This class demonstrates how to update a EmailPreferences to OPT_IN to News and Tips. This service 
 * only permits retrieving and updating email preferences for the authenticated user. 
 */ 
 class UpdateEmailPreferences 
 { 
 /** 
 * Updates email preferences to OPT_IN to News and Tips. 
 * 
 * @param array $config 
 *      The configuration data used for authentication and getting the acccount ID. 
 * @param string $email The email address of this user. If you want to get the user information 
 *      of the user making the Merchant API request, you can also use "me" instead 
 *      of an email address. 
 * 
 * @return void 
 */ 
 public static function updateEmailPreferencesSample($config, $email): void 
 { 
 // Gets the OAuth credentials to make the request. 
 $credentials = Authentication::useServiceAccountOrTokenFile(); 
 // Creates options config containing credentials for the client to use. 
 $options = ['credentials' => $credentials]; 
 // Creates a client. 
 $emailPreferencesServiceClient = new EmailPreferencesServiceClient($options); 
 // Creates EmailPreferences name to identify the EmailPreferences. 
 // The name has the format: accounts/{account}/users/{user}/emailPreferences 
 $name = "accounts/" . $config['accountId'] . "/users/" . $email . "/emailPreferences"; 
 // Create a EmailPreferences with the updated fields. 
 $emailPreferences = (new EmailPreferences()) 
 ->setName($name) 
 ->setNewsAndTips(OptInState::OPTED_OUT); 
 $fieldMask = (new FieldMask()) 
 ->setPaths(['news_and_tips']); 
 try { 
 $request = (new UpdateEmailPreferencesRequest()) 
 ->setEmailPreferences($emailPreferences) 
 ->setUpdateMask($fieldMask); 
 print "Sending Update EmailPreferences request\n"; 
 $response = $emailPreferencesServiceClient->updateEmailPreferences($request); 
 print "Updated EmailPreferences Name below\n"; 
 print $response->getName() . "\n"; 
 } catch (ApiException $e) { 
 print $e->getMessage(); 
 } 
 } 
 /** 
 * Helper to execute the sample. 
 * 
 * @return void 
 */ 
 public function callSample(): void 
 { 
 $config = Config::generateConfig(); 
 // The email address of this user. If you want to get the user information 
 // Of the user making the Merchant API request, you can also use "me" instead 
 // Of an email address. 
 // $email = "testUser@gmail.com"; 
 $email = "me"; 
 self::updateEmailPreferencesSample($config, $email); 
 } 
 } 
 // Run the script 
 $sample = new UpdateEmailPreferences(); 
 $sample->callSample(); 
  
 

Python

  # -*- coding: utf-8 -*- 
 # Copyright 2024 Google LLC 
 # 
 # Licensed under the Apache License, Version 2.0 (the "License"); 
 # you may not use this file except in compliance with the License. 
 # You may obtain a copy of the License at 
 # 
 #     http://www.apache.org/licenses/LICENSE-2.0 
 # 
 # Unless required by applicable law or agreed to in writing, software 
 # distributed under the License is distributed on an "AS IS" BASIS, 
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 # See the License for the specific language governing permissions and 
 # limitations under the License. 
 """A module to update the email preferences of specific user.""" 
 from 
  
 examples.authentication 
  
 import 
 configuration 
 from 
  
 examples.authentication 
  
 import 
 generate_user_credentials 
 from 
  
 google.protobuf 
  
 import 
 field_mask_pb2 
 from 
  
 google.shopping.merchant_accounts_v1 
  
 import 
 EmailPreferences 
 from 
  
 google.shopping.merchant_accounts_v1 
  
 import 
 EmailPreferencesServiceClient 
 from 
  
 google.shopping.merchant_accounts_v1 
  
 import 
 UpdateEmailPreferencesRequest 
 FieldMask 
 = 
 field_mask_pb2 
 . 
 FieldMask 
 _ACCOUNT 
 = 
 configuration 
 . 
 Configuration 
 () 
 . 
 read_merchant_info 
 () 
 def 
  
 update_email_preferences 
 ( 
 email_address 
 ): 
  
 """Updates a EmailPreferences to OPT_IN to News and Tips.""" 
 # Gets OAuth Credentials. 
 credentials 
 = 
 generate_user_credentials 
 . 
 main 
 () 
 # Creates a client. 
 client 
 = 
 EmailPreferencesServiceClient 
 ( 
 credentials 
 = 
 credentials 
 ) 
 # Creates EmailPreferences name to identify EmailPreferences. 
 name 
 = 
 ( 
 "accounts/" 
 + 
 _ACCOUNT 
 + 
 "/users/" 
 + 
 email_address 
 + 
 "/emailPreferences" 
 ) 
 # Create a EmailPreferences with the updated fields. 
 email_preferences 
 = 
 EmailPreferences 
 ( 
 name 
 = 
 name 
 , 
 news_and_tips 
 = 
 EmailPreferences 
 . 
 OptInState 
 . 
 OPTED_IN 
 ) 
 # Create field mask 
 field_mask 
 = 
 FieldMask 
 ( 
 paths 
 = 
 [ 
 "news_and_tips" 
 ]) 
 # Creates the request. 
 request 
 = 
 UpdateEmailPreferencesRequest 
 ( 
 email_preferences 
 = 
 email_preferences 
 , 
 update_mask 
 = 
 field_mask 
 ) 
 # Makes the request and catches and prints any error messages. 
 try 
 : 
 response 
 = 
 client 
 . 
 update_email_preferences 
 ( 
 request 
 = 
 request 
 ) 
 print 
 ( 
 "Updated EmailPreferences Name below" 
 ) 
 print 
 ( 
 response 
 . 
 name 
 ) 
 except 
 RuntimeError 
 as 
 e 
 : 
 print 
 ( 
 e 
 ) 
 if 
 __name__ 
 == 
 "__main__" 
 : 
 # The email address of this user. If you want to get the user information 
 # of the user making the Content API request, you can also use "me" instead 
 # of an email address. 
 # email = "testUser@gmail.com" 
 email 
 = 
 "me" 
 update_email_preferences 
 ( 
 email 
 ) 
  
 
Design a Mobile Site
View Site in Mobile | Classic
Share by: