Page Summary
-
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_tipsfield toOPTED_IN, enabling a user to receive news and tips emails. -
It uses the
EmailPreferencesServiceClientto send aUpdateEmailPreferencesRequestto modify the specified user's preferences. -
The samples showcase how to create an
EmailPreferencesobject, define theFieldMask, 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
)

