【发布时间】:2018-07-08 19:09:14
【问题描述】:
试图完成这项工作,我完全发疯了。我需要使用 gmail api 从我们的域发送邮件。每次我得到这个结果时:
Google.Apis.Requests.RequestError
Bad Request [400]
Errors [
Message[Bad Request] Location[ - ] Reason[failedPrecondition] Domain[global]
]
我快疯了!
我已经阅读了所有这些,但我仍然没有弄清楚:
- https://developers.google.com/admin-sdk/reports/v1/guides/delegation
- https://developers.google.com/api-client-library/dotnet/guide/aaa_oauth#service-account
- Can we access GMAIL API using Service Account?
- Gmail REST API : 400 Bad Request + Failed Precondition
如何让它发挥作用?
这些是我已经完成的步骤:
- 在 console.developers.google.com 中创建了一个新项目
- 启用 gmail api
- 创建了服务帐号
- 为服务帐号创建了 key.p12 文件
- 已配置域范围的权限
- 在 admin.google.com 中启用了 gmail api
- 在 security->advanced->Api accesses 中添加了 api 范围
- 添加并验证了我的域名
屏幕:
这是我的代码:
public class TestMailController : Controller
{
static string ApplicationName = "IdiciumGmail";
private static String serviceAccountEmail = "idiciumgmail@turing-thought-193608.iam.gserviceaccount.com";
public IActionResult Index()
{
string debugMessage = "";
var certificate = new X509Certificate2(@"key.p12", "notasecret", X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable);
ServiceAccountCredential credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(serviceAccountEmail)
{
Scopes = new[] { GmailService.Scope.MailGoogleCom }
}.FromCertificate(certificate));
if (credential.RequestAccessTokenAsync(CancellationToken.None).Result)
{
// Create Gmail API service.
var service = new GmailService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
/*
var message = new MimeMessage();
message.From.Add(new MailboxAddress("Bestuur", "bestuur@indicium.hu"));
message.To.Add(new MailboxAddress("Tester", "william.wl@live.nl"));
message.Subject = "Is this working";
message.Body = new TextPart(TextFormat.Html)
{
Text = "Ja ja als je dit krijgt werkt het.... EINDELIJK. <br><br> <b>ook html werkt</b>"
};
*/
Message m = new Message();
m.Raw = "RnJvbTogQmVzdHV1ciA8YmVzdHV1ckBpbmRpY2l1bS5odT4gClRvOiBXaWxsaWFtIExvb3NtYW4g\nPHdpbGxpYW0ud2xAbGl2ZS5ubD4gClN1YmplY3Q6IERpdCBpcyBlZW4gdGVzdAoKVGhpcyBpcyBh\nIG1lc3NhZ2UganVzdCB0byBzYXkgaGVsbG8uIFNvLCAiSGVsbG8iLg==";
try
{
//var result = service.Users.Messages.Send(m, "bestuur@indicium.hu").Execute();
var result = service.Users.Messages.List("bestuur@indicium.hu").Execute();
debugMessage += "Send email: " + result;
}
catch (Exception e)
{
debugMessage += e.Message;
//throw;
}
debugMessage += "The END!";
}
return Content(debugMessage);
}
我在 api explorer 中测试了 base 64 原始字符串,它在那里工作!所以我想这不是问题。有人可以帮我解决这个问题,我越来越绝望。顺便说一句,我们为非营利组织使用免费版本的 G 套件(这会造成问题吗?)。
【问题讨论】:
标签: c# google-api asp.net-core-mvc google-oauth gmail-api