gpt4 book ai didi

c# - 错误 403 Google API 电子邮件设置 .Net 正在获取签名

转载 作者:行者123 更新时间:2023-11-30 17:43:12 25 4
gpt4 key购买 nike

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

基本上,我们有一个应用程序可以在 GMail('domaincompany.com')上为公司的每个用户获取 HTML 电子邮件签名,并在新的 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();

搜索网络文档和不同的资源,我们意识到它应该实现 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. https://apps-apis.google.com/a/feeds/emailsettings/2.0/ 授予对客户端 ID 的访问权在 Google 管理员上

如果我做错了什么,如果有人能帮助我,我将不胜感激。

提前致谢。

干杯!

最佳答案

我今天一直在为同样的问题发疯,但是对于属于同一 API 范围的“RetrieveSendAs”,就在这一刻解决了它!

'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));

您还需要从代码中删除旧的“service.setUserCredentials”行。

关于c# - 错误 403 Google API 电子邮件设置 .Net 正在获取签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31250217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com