带有Gmail和OAuth2的MailCore2仅发送具有完全访问权限的范围,即https://mail.google.com

时间:2019-07-08 17:46:17

标签: objective-c gmail-api mailcore2

我的应用使用Mailcore2通过Gmail发送电子邮件。我也使用OAuth2身份验证。如果选择了完全访问范围,则效果很好:https://mail.google.com

但是,Google建议使用其他范围(发送)。我正在尝试https://www.googleapis.com/auth/gmail.send和/或https://www.googleapis.com/auth/gmail.compose

Mailcore2不发送以下范围:

MCOSMTPResponseCodeKey=535, NSLocalizedDescription=Unable to authenticate with the current session's credentials., MCOSMTPResponseKey=5.7.8 Username and Password not accepted.

MailCore2是否需要完整的访问范围? 有任何解决方法吗?

这是我的MailCore2发送代码,仅适用于FULL范围:

MCOSMTPSession *smtpSession = [[MCOSMTPSession alloc] init];
smtpSession.hostname = @"smtp.gmail.com";
smtpSession.port = 465;

[smtpSession setAuthType:MCOAuthTypeXOAuth2];
[smtpSession setOAuth2Token:delAuthAccessToken];//from oauth2
[smtpSession setUsername:delAuthUserEmail];

smtpSession.authType =MCOAuthTypeXOAuth2;
smtpSession.connectionType=MCOConnectionTypeTLS;

MCOMessageBuilder *builder = [[MCOMessageBuilder alloc] init];
NSMutableArray *to = [[NSMutableArray alloc] init];
[to addObject:[MCOAddress addressWithDisplayName:delSendName mailbox:delSendEmail]];
MCOAddress *from = [MCOAddress addressWithDisplayName:delAuthUserEmail mailbox:delAuthUserEmail];

[[builder header] setFrom:from];
[[builder header] setTo:to];
[[builder header] setSubject:@"Sent By MyApp"];
[builder setTextBody:delMessage];
NSData * rfc822Data = [builder data];

MCOSMTPSendOperation *sendOperation =[smtpSession sendOperationWithData:rfc822Data];

[sendOperation start:^(NSError *error) {
    if(error) {
        NSLog(@"Error sending email: %@", error);

    } else {
        NSLog(@"Message sent sucessfully.");
    }
}];

2 个答案:

答案 0 :(得分:0)

Gmail范围https://www.googleapis.com/auth/gmail.send非常适合通过Gmail API从您自己的电子邮件地址发送电子邮件。但是,如果您打算通过别名发送电子邮件,则需要在项目中添加受限范围。

https://www.googleapis.com/auth/gmail.settings.basic

通过gmail.settings.basic作用域,您可以通过已认证用户的Gmail帐户所关联的别名发送电子邮件。

答案 1 :(得分:0)

好吧,回答我自己的问题将导致无法解决,即MailCore要求完全访问GMail帐户,而Google不允许这样做。

我最终切换到HTTP POST / GET请求,而不是使用Mailcore。 这是指向其他答案的链接,该链接显示了如何发送电子邮件send email with http post in ObjC

的示例