错误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(禁止)。
对于最后一个测试,我之前执行了以下步骤:
- 在主机开发者上生成客户端ID作为服务帐户
- 在Google Admin 上为https://apps-apis.google.com/a/feeds/emailsettings/2.0/提供正确的访问权限
提前感谢。
干杯!
我今天已经疯了同样的问题,但对于'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));
您还需要删除旧的"服务"。