2

我正在使用 NSAppleScript 从我的 OSX 应用程序发送电子邮件。它以前运行良好,但现在当我将新的 XCode 9.0 与 Sierra 10.12.6 一起使用时,我遇到了一个问题。应用程序将创建电子邮件并打开包含电子邮件和消息内容的邮件窗口,但它不会执行发送。我可以点击发送按钮,一切都很好,邮件会发送,但我想避免手动点击发送按钮操作。

我正在使用权利:

<plist version="1.0">
<dict>
    <key>com.apple.security.scripting-targets</key>
    <dict>
        <key>com.apple.mail</key>
        <array>
            <string>com.apple.mail.compose</string>
        </array>
    </dict>
    <key>com.apple.security.app-sandbox</key>
    <true/>
    <key>com.apple.security.network.client</key>
    <true/>
</dict>
</plist>

这是代码:

    NSString *emailString = [NSString stringWithFormat:@"\
                                 tell application \"Mail\"\n\
                                 set newMessage to make new outgoing message with properties {subject:\"%@\", content:\"%@\" & return} \n\
                                 tell newMessage\n\
                                 set visible to false\n\
                                 set sender to \"%@\"\n\
                                 make new to recipient at end of to recipients with properties {name:\"%@\", address:\"%@\"}\n\
                                 tell content\n\
                                 ",subjectt, bodyText, @"Company", toAddress, toAddress];
emailString = [emailString stringByAppendingFormat:@"\
                   end tell\n\
                   set visible to false\n\
                   send newMessage\n\
                   end tell\n\
                   end tell"];


    NSLog(@"%@",emailString);
    NSAppleScript *emailScript = [[NSAppleScript alloc] initWithSource:emailString];
    [emailScript executeAndReturnError:nil];

所以一切就绪,但发送操作失败。再次,它与旧的 OSX 版本运行良好。我是否缺少权利或什么?

谢谢!

4

2 回答 2

0

看起来你tell是(双重参考newMessagesendnewMessage

在行newMessage中删除send

于 2017-10-13T17:57:01.903 回答
0

长话短说。这是错误的方式。在现代 OSX 中使用 NSSharingService。

NSArray * shareItems = [NSArray arrayWithObjects:bodyText, nil]; NSArray * recepiants = [NSArray arrayWithObjects:toAddress, nil];

NSSharingService *service = [NSSharingService sharingServiceNamed:NSSharingServiceNameComposeEmail];
[service setRecipients:recepiants];
[service setSubject:subjectt];

service.delegate = self;
[service performWithItems:shareItems];

当涉及到从应用程序发送带有某种结果的电子邮件时,NSAppleScript 不再是你的朋友了。如今,OSX 变得越来越像 iOS。

于 2017-10-13T22:08:58.963 回答