Получить сообщение в окне составления из Mail.app - PullRequest
4 голосов
/ 23 марта 2011

Я пытаюсь создать сценарий, который будет получать содержимое сообщения электронной почты, которое я создаю в Mail, что-то делать с данными, а затем отправлять сообщение. Я знаю, как создать и отправить новое сообщение с нуля с помощью AppleScript, но не могу найти способ получить сообщение, которое я уже пишу. Мне все равно, какой язык используется, и я был бы открыт, чтобы попробовать другой почтовый клиент. Спасибо за вашу помощь!

Ответы [ 4 ]

2 голосов
/ 23 марта 2011

Почта имеет огромные ограничения в отношении Applescript, и работа с ее областью содержимого является основной.Лучше всего использовать сценарии графического интерфейса пользователя, чтобы перейти к области содержимого, ввести cmd-C, а затем обработать данные в буфере обмена.Lion.

0 голосов
/ 15 ноября 2011

На самом деле довольно легко делать то, что вам нужно.

  1. Если вы хотите запустить какую-то встроенную обработку (назначенную, скажем, горячей клавише (в Mail, например, Cmd + D не занят), или «просто», перечисленной в меню «Сервисы», доступной после выбрать что-то), вы можете просто использовать Automator. Демонстрационный скрипт Automator, читающий текущий выбор, вносящий некоторые изменения (здесь преобразование некоторых комбинаций ASCII-символов + цифр в некоторые акцентированные символы) и, наконец, возвращающий измененный текст, выглядит следующим образом:

    on run {input, parameters}
    
    set myText to replaceText("a1", "á", (input as text))
    
    set myText to replaceText("e1", "é", myText)
    
    set myText to replaceText("i1", "í", myText)
    
    return myText
    
    end run
    
    
    
    on replaceText(find, replace, someText)
    
    set prevTIDs to text item delimiters of AppleScript
    
    set text item delimiters of AppleScript to find
    
    set someText to text items of someText
    
    set text item delimiters of AppleScript to replace
    
    set someText to "" & someText
    
    set text item delimiters of AppleScript to prevTIDs
    
    return someText
    
    end replaceText
    

    Убедитесь, что вы включили «Заменяет выделенный текст», если хотите перезаписать исходное содержимое возвращенным.

  2. если вы хотите написать внешний скрипт, который не вызывается из локального меню Сервисов (или через горячую клавишу), вам также необходимо добавить обработку буфера обмена. Решение, аналогичное приведенному выше, с дополнительным буфером обмена копированием / вставкой:

    on replaceText(find, replace, someText)
    
    set prevTIDs to text item delimiters of AppleScript
    
    set text item delimiters of AppleScript to find
    
    set someText to text items of someText
    
    set text item delimiters of AppleScript to replace
    
    set someText to "" & someText
    
    set text item delimiters of AppleScript to prevTIDs
    
    return someText
    
    end replaceText
    
    
    
    tell application "Mail"
    
    activate
    
    tell application "System Events"
    
    tell process "Mail"
    
    click menu item "Select All" of menu "Edit" of menu bar 1
    
    click menu item "Copy" of menu "Edit" of menu bar 1
    
    end tell
    
    end tell
    
    end tell
    
    
    
    tell application "Mail"
    
    set textclip to (the clipboard)
    
    end tell
    
    
    
    set myText to replaceText("a1", "á", textclip)
    
    set myText to replaceText("e1", "é", myText)
    
    set myText to replaceText("i1", "í", myText)
    
    
    
    set the clipboard to myText
    
    
    
    tell application "Mail"
    
    activate
    
    tell application "System Events"
    
    tell process "Mail"
    
    click menu item "Paste" of menu "Edit" of menu bar 1
    
    end tell
    
    end tell
    
    end tell
    

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

0 голосов
/ 24 марта 2011

Это очень убедительно, если мы сделаем два достаточно слабых предположения: сообщение, над которым вы работаете, является главным, и тема всех черновиков сообщений уникальна. Затем, перед запуском скрипта, сохраните сообщение, над которым вы работаете; это поместит его в почтовый ящик черновиков. Тогда, поскольку тема сообщения - это имя окна, мы можем легко получить к нему доступ; и так как мы можем легко получить доступ к черновому почтовому ящику, мы можем объединить их. Это дает нам:

tell application "Mail"
    set msgs to messages of drafts mailbox ¬
        whose subject is (name of window 1 as string)
    if (count of msgs) = 1 then
        -- Do whatever
    else
        -- Error, disambiguate, whatever
    end if
end tell

Вероятно, можно заставить скрипт сохранить самое переднее окно, и меня не удивит, если только что сохраненное сообщение всегда будет первым элементом почтового ящика черновиков, но это оставлено в качестве упражнения для читателя: - )

0 голосов
/ 23 марта 2011

Это возможно, но больно. Достаточно больно, что я все еще пытаюсь понять, как сделать что-то подобное, но в Safari. Я дошел до того, что смог найти текстовую область, но документация, которую я нашел для получения контента, не работает. (К сожалению, это довольно много для курса AppleScript; каждая программа работает немного иначе, чем следующая программа.)

РЕДАКТИРОВАТЬ: хорошо, есть какое-то ужасное зло, которое, надеюсь, можно адаптировать для работы с почтой: http://www.ece.cmu.edu/~allbery/edit_textarea.script

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