Разрешить AppleScript отправлять электронную почту, а затем перезагрузить компьютер с помощью сценария оболочки? - PullRequest
0 голосов
/ 22 января 2012

Я работаю над преобразованием MBP в медиацентр, и одно из настроенных мной приложений запустит скрипт, если компьютер перегреется.Если это произошло, он вызвал бы AppleScript, который отправил бы мне электронное письмо (сообщающее мне, что произошло), а затем перезагрузил компьютер.

Проблема, однако, заключается в том, что перезапуск не будет ждать, пока Почта отправит сообщение,Как я могу это исправить?

tell application "Mail"
   set theNewMessage to make new outgoing message with properties {subject:"Media Center Alert", content:"Media Center has encountered a problem. It is now restarting. ", visible:false}
   tell theNewMessage
       make new to recipient at end of to recipients with properties {address:"myemail"}
       send
   end tell
end tell
tell application "Finder"
   do shell script "reboot now" password "mypass" with administrator privileges
end tell

Кроме того, причина, по которой я использую сценарий оболочки для перезагрузки компьютера, заключается в том, что я не смог найти способ отменить «Вы хотите сохранить ...». "диалоги при использовании просто перезапустить.

Ответы [ 2 ]

0 голосов
/ 10 сентября 2012

Ответ погружения не сработал для меня, так как нет способа сопоставить «id» исходящих сообщений с «id» почтового ящика или «id сообщения», если в исходящем сообщении нет свойства «дата отправки»,Однако подсчет количества сообщений в отправленном почтовом ящике работает:

tell application "Mail"

    set numOutgoingMessages to 1
    set secondsToWait to 10

    set preSentCount to count messages in sent mailbox
    set secondsPassed to 0

    repeat while secondsPassed is less than secondsToWait

        set curSentCount to count messages in sent mailbox

        if curSentCount is greater than or equal to preSentCount + numOutgoingMessages then
            set secondsPassed to secondsToWait + 1
        end if

        if secondsPassed is less than secondsToWait then
            delay 1
        end if

        set secondsPassed to secondsPassed + 1

    end repeat

end tell

и, конечно же, этого не должно быть в разделе linux?

0 голосов
/ 22 января 2012

отметьте в свойствах цикла 'id' вашего сообщения в отправленном почтовом ящике и перезагрузите, если оно там, или перезагрузите, если письмо не может быть отправлено в течение 15 минут:

tell application "Mail"
    set my_id to id of theNewMessage

    set startDate to current date
    set rebootDate to (current date) + 15 * minutes
    rebootDate + 15 * minutes

    -- wait 15 minutes for Mail.app, then reboot if message cannot be sent
    repeat while startDate is not equal to rebootDate
        set last_msg to first message of sent mailbox
        set last_msg_id to id of last_msg

        if last_msg_id is equal to my_id then
            -- reboot
        end if
        delay 15
    end repeat
end tell

примечание: я не проверялмного кода, пожалуйста, проверьте его самостоятельно, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...