错误403谷歌API电子邮件设置.net获得签名

本文关键字:net 设置 谷歌 API 电子邮件 错误 | 更新日期: 2023-09-27 18:01:25

我真的在研究一个让我失眠的问题。

基本上,我们有一个应用程序,获取HTML电子邮件签名在GMail ('domaincompany.com')为公司的每个用户,并设置更新的个人数据在一个新的HTML签名。

是这样实现的:

public static string getGMailFirma(string mail) {
  GoogleMailSettingsService service = null;
  string[] domainUserGMail;
  string result;
  try {
    /* Recuperamos los datos del usuario de GMail:  *
     *    - Pos 0: usuario                          *
     *    - Pos 1: dominio                          */
    domainUserGMail = Util.getUserDomainGMail(mail);
    /* Iniciamos el servicio de GApps */
    service = new GoogleMailSettingsService(domainUserGMail[1], "company.FirmaCorporativa");
    service.setUserCredentials(PropertiesManager.getUserGApps(), PropertiesManager.getPassGApps());
    result = service.RetrieveSignature(domainUserGMail[0]).getPropertyValueByName("signature").ToString();
    return result;
  } catch (Exception ex) {
    throw ex;
  }
}

所以,几周前这不再工作了,显示错误消息:"执行身份验证请求返回意外结果:404"后执行:

result = service.RetrieveSignature(domainUserGMail[0]).getPropertyValueByName("signature").ToString();

通过搜索web文档和不同的资源,我们意识到它应该实现OAuth2,所以我们尝试了这个代码修改:

public static string getGMailFirma(string mail) {
  GoogleMailSettingsService service = null;
  string[] domainUserGMail;
  string result;
  try {
    const string ServiceAccountEmail = "xxxxxxxxxxxxxxxxxxxxxxx@developer.gserviceaccount.com";
    var certificate = new X509Certificate2("Key_admin.p12", "notasecret", X509KeyStorageFlags.Exportable);

    ServiceAccountCredential credential = new ServiceAccountCredential(
        new ServiceAccountCredential.Initializer(ServiceAccountEmail) {
          Scopes = new[] { "https://apps-apis.google.com/a/feeds/emailsettings/2.0/" }
        }.FromCertificate(certificate));
    if (!credential.RequestAccessTokenAsync(System.Threading.CancellationToken.None).Result)
      throw new InvalidOperationException("Access token request failed.");
    var requestFactory = new GDataRequestFactory(null);
    requestFactory.CustomHeaders.Add("Authorization: Bearer " + credential.Token.AccessToken);

    /* Recuperamos los datos del usuario de GMail:  *
     *    - Pos 0: usuario                          *
     *    - Pos 1: dominio                          */
    domainUserGMail = Util.getUserDomainGMail(mail);
    /* Iniciamos el servicio de GApps */
    service = new GoogleMailSettingsService(domainUserGMail[1], "CompanyFirmaCorporativa");
    service.RequestFactory = requestFactory;
    service.setUserCredentials(PropertiesManager.getUserGApps(), PropertiesManager.getPassGApps());
    result = service.RetrieveSignature(domainUserGMail[0]).getPropertyValueByName("signature").ToString();
    return result;
  } catch (Exception ex) {
    throw ex;
  }
}

但是在同一行执行后,它仍然得到另一个错误,403(禁止)。

对于最后一个测试,我之前执行了以下步骤:

  1. 在主机开发者上生成客户端ID作为服务帐户
  2. 在Google Admin
  3. 上为https://apps-apis.google.com/a/feeds/emailsettings/2.0/提供正确的访问权限
请,如果有人可以帮助我,如果我做错了什么,我将非常感激。

提前感谢。

干杯!

错误403谷歌API电子邮件设置.net获得签名

我今天已经疯了同样的问题,但对于'RetrieveSendAs'这是在相同的API范围下,只是这一分钟解决了它!

'Initializer'需要一个'User'参数,其中包含站点管理员的主电子邮件地址:

ServiceAccountCredential credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(Globals.GaServiceEmail)
{
    User   = "gapps-admin-login@example.org",
    Scopes = new[] { "https://apps-apis.google.com/a/feeds/emailsettings/2.0/" }
}.FromCertificate(gaCertificate));

您还需要删除旧的"服务"。