доступ на запись в gmail запрещен.
Означает, что у вас нет разрешения на запись в учетную запись пользователя.
API данных контактов предоставляет два типа каналов: канал контактов и канал групп контактов.
Фиды - это частные каналы для чтения / записи, которые можно использовать для просмотра и управления контактами / группами пользователя. Поскольку они являются частными, программист может получить к ним доступ только с помощью аутентифицированного запроса. То есть запрос должен содержать токен аутентификации для пользователя, чьи контакты вы хотите получить. Подробнее о проверке подлинности см. В руководстве разработчика .
Вы также можете рассмотреть следующее. Что может сделать вашу жизнь проще, чем использовать этот старый API.
- Вы должны использовать API Google People.
- Вы должны использовать клиентскую библиотеку google .net.
- Вам необходимо пройти аутентификацию для вставки данных в контакты пользователей.
Пример аутентификации
private static UserCredential GetUserCredential(string clientSecretJson, string userName, string[] scopes)
{
try
{
if (string.IsNullOrEmpty(userName))
throw new ArgumentNullException("userName");
if (string.IsNullOrEmpty(clientSecretJson))
throw new ArgumentNullException("clientSecretJson");
if (!File.Exists(clientSecretJson))
throw new Exception("clientSecretJson file does not exist.");
// These are the scopes of permissions you need. It is best to request only what you need and not all of them
using (var stream = new FileStream(clientSecretJson, FileMode.Open, FileAccess.Read))
{
string credPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
credPath = Path.Combine(credPath, ".credentials/", System.Reflection.Assembly.GetExecutingAssembly().GetName().Name);
// Requesting Authentication or loading previously stored authentication for userName
var credential = GoogleWebAuthorizationBroker.AuthorizeAsync(GoogleClientSecrets.Load(stream).Secrets,
scopes,
userName,
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
credential.GetAccessTokenForRequestAsync();
return credential;
}
}
catch (Exception ex)
{
throw new Exception("Get user credentials failed.", ex);
}
}
Oauth2Authentication.cs