AutoSend NSSharingService:电子邮件

时间:2014-10-18 03:44:23

标签: objective-c macos email appkit scripting-bridge

我正在尝试使用NSSharingService来撰写邮件。我可以添加收件人,正文,主题和附件,但我似乎无法添加发件人并自动发送电子邮件。 有没有办法添加发件人并使用NSSharingService自动发送电子邮件? 如果有的话,你能告诉我怎么样吗? 如果没有,你能提出另一种方法吗?我试过ScriptingBridge。我得到了它的工作,但当我使用调度程序自动运行我的应用程序时,它有-[SBProxyByClass setSender:]: object has not been added to a container yet; selector not recognized崩溃。这就是我正在尝试使用NSSharingService的新方法的原因。 感谢。

1 个答案:

答案 0 :(得分:0)

Apple非常严格地要求您在未经用户同意的情况下执行操作。由于您希望能够自动执行此操作,而不是使用NSSharingService或ScriptingBridge,因此我建议您在应用程序中使用SMTP库。

看起来像Objective-C的流行库是libmailcore,虽然我之前没有使用它,所以我不能告诉你很多。他们发送消息的示例看起来很简单:

MCOSMTPSession *smtpSession = [[MCOSMTPSession alloc] init];
smtpSession.hostname = @"smtp.gmail.com";
smtpSession.port = 465;
smtpSession.username = @"matt@gmail.com";
smtpSession.password = @"password";
smtpSession.authType = MCOAuthTypeSASLPlain;
smtpSession.connectionType = MCOConnectionTypeTLS;

MCOMessageBuilder *builder = [[MCOMessageBuilder alloc] init];
MCOAddress *from = [MCOAddress addressWithDisplayName:@"Matt R"
                                              mailbox:@"matt@gmail.com"];
MCOAddress *to = [MCOAddress addressWithDisplayName:nil 
                                            mailbox:@"hoa@gmail.com"];
[[builder header] setFrom:from];
[[builder header] setTo:@[to]];
[[builder header] setSubject:@"My message"];
[builder setHTMLBody:@"This is a test message!"];
NSData * rfc822Data = [builder data];

MCOSMTPSendOperation *sendOperation = 
   [smtpSession sendOperationWithData:rfc822Data];
[sendOperation start:^(NSError *error) {
    if(error) {
        NSLog(@"Error sending email: %@", error);
    } else {
        NSLog(@"Successfully sent email!");
    }
}];