如何解决Gmail API Java中{user@mycompany.com>的授权被拒绝
我正在使用Gmail API Java从a specific account of my company
向用户发送邮件。还为该帐户存储了StoredCredential
文件/令牌。但是如here所述,使用“我”对我不起作用。
代码:
//set the Mimemessage
MimeMessage email = new MimeMessage(session);
email.setFrom(new InternetAddress("me")); //from
email.addRecipient(javax.mail.Message.RecipientType.TO,new InternetAddress(to)); //to
//sending mail
Message message = createMessage(email);
message = service.users().messages().send(userId,message).execute();
这说:
message: Delegation denied for user@mycompany.com
据我了解,如果我拥有上述令牌和所需权限,我应该能够发送邮件,对吗?
此外,当我将“从”设置为公司帐户的邮件地址而不是“我”时,错误仍然存在。
我该如何克服?任何解决方法? 谢谢。
编辑
实际上,我使用4个Google API(Google表格,云端硬盘,Gmail和Script API),并且使用了一次oAuth检查。
代码:
凭据
final String TOKENS_DIRECTORY_PATH = "mydirectory\\tokens";
final List<String> SCOPES = Arrays.asList(SheetsScopes.SPREADSHEETS,DriveScopes.DRIVE,DriveScopes.DRIVE_FILE,DriveScopes.DRIVE_METADATA,GmailScopes.GMAIL_COMPOSE,GmailScopes.GMAIL_SEND,GmailScopes.GMAIL_LABELS,ScriptScopes.MAIL_GOOGLE_COM);
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
// build GoogleClientSecrets from JSON file
final String CREDENTIALS_FILE_PATH = "/credentials.json";
// Load client secrets.
InputStream in = GoogleAuthorizeUtil.class.getResourceAsStream(CREDENTIALS_FILE_PATH);
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY,new InputStreamReader(in));
// Build flow and trigger user authorization request.
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
HTTP_TRANSPORT,JSON_FACTORY,clientSecrets,SCOPES)
.setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH)))
.setAccessType("offline")
.build();
LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build();
// build Credential object
Credential credential = new AuthorizationCodeInstalledApp(flow,receiver).authorize("user");
return credential;
上述代码返回了Google凭据对象。 下一步是分别为每个API创建服务:
创建服务
public static Gmail getGMailService() throws IOException,GeneralSecurityException {
Credential credential = GoogleAuthorizeUtil.authorize();
return new Gmail.Builder(
GoogleNetHttpTransport.newTrustedTransport(),JacksonFactory.getDefaultInstance(),credential)
.setApplicationName(APPLICATION_NAME)
.build();
}
public static Gmail setup() throws GeneralSecurityException,IOException {
Gmail gmailService;
gmailService = getGMailService();
return gmailService;
}
以上返回Gmail服务(所有四个API的服务都执行了类似的代码)。
现在使用此服务发送邮件:
使用服务对象发送邮件
Gmail gservice = setup(); //returns Gmail service
// finally using the mail service---------------------
Properties props = new Properties();
Session session = Session.getDefaultInstance(props,null);
String user = "me";
MimeMessage email = new MimeMessage(session);
email.setFrom(new InternetAddress(user));
email.addRecipient(javax.mail.Message.RecipientType.TO,new InternetAddress(to));
email.setSubject(subject);
MimeBodyPart mimeBodyPart = new MimeBodyPart();
mimeBodyPart.setContent(bodyText,"text/html");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(mimeBodyPart);
email.setContent(multipart);
Message message = createMessage(email);
message = service.users().messages().send(userId,message).execute();
当我单击submit
按钮时,所有这些都在servlet中调用。
这应该给出有关此问题的想法,但是请务必告知是否需要更多信息/代码。
谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。