Applescript для добавления отправителя сообщения в определенную группу в Контактах
0
Я пытаюсь настроить Applescript для добавления отправителя выбранного сообщения в Apple Mail в определенную группу в приложении «Контакты». Переконфигурировав код, приведенный в этом ответе , я решил следующее, но оно не работает. Любые предложения о том, что я делаю не так?
tell application "Mail"set theMessage to selection
tell application "Contacts"set theGroup to "_TEST"end tell
set theSender to sender of theMessage
tell application "Contacts"set theName to name of theSender
set thePerson to make new person with properties {first name:name of theSender}
add thePerson to theGroup
end tell
tell application "Contacts" to save
end tell
Попробуйте это, он создаст контакт с правильным именем, фамилией и адресом электронной почты:
tell application "Mail"set theMessages to selection
if theMessages isnot{}then-- check empty list
set theSenderName to extract name from sender of item 1 of theMessages
set nameArray to my split(theSenderName," ")set theFirstName to item 1 of nameArray
set theLastName to last item of nameArray
set theEmail to extract address from sender of item 1 of theMessages
tell application "Contacts"set theGroup to group"_TEST"set thePerson to make new person with properties {first name:theFirstName,last name:theLastName}
make new email at end of emails of thePerson with properties {label:"Work", value:theEmail}
add thePerson to theGroup
save
end tell
endifend tell
on split(theString, theDelimiter)set oldDelimiters to AppleScript's text item delimiters
set AppleScript's text item delimiters to theDelimiter
set theArray to every text item of theString
setAppleScript's text item delimiters to oldDelimiters
return theArray
end split
Было несколько проблем с вашей первоначальной попыткой, вот как я их обошел.
Для начала, selectionдает вам список элементов (даже если это просто список из одного), поэтому вам нужно выбрать первый элемент из выбора.
В почте senderвыдает не очень полезную строку, объединяющую имя и адрес электронной почты. extract name fromи extract address fromдать вам полезные строки.
Строка имени является полным именем, но Contacts.app ожидает отдельное имя и фамилию, поэтому я разделил эту строку (используя удобную функцию, найденную здесь ), чтобы сделать правильное предположение по имени и фамилии. Это может дать неожиданные результаты от странно отформатированных имен в электронных письмах.
Если у вас есть какие-либо проблемы с этим, дайте мне знать, и я посмотрю, смогу ли я их исправить. В будущем, возможно, будет полезно запустить сценарии в редакторе AppleScript и проверить журнал событий для получения подробной информации о том, что не работает (сообщения об ошибках полезны, хотя бы для того, чтобы поместить их в Google или дать другим отправную точку для решения вашей проблемы).
это сработало, спасибо. Предложение журнала ошибок также полезно, спасибо. Ваше решение сработало, но я получаю ошибку "отсутствует значение", когда запускаю его в редакторе.
Джордж C
Да, это не ошибка, а просто отсутствие возвращаемого значения. Журнал событий Applescript печатает возвращаемое значение последнего оператора. В этом случае это просто save, который ничего не возвращает, если успешно сохранен. Не о чем беспокоиться, но это выглядит зловеще, если вы не знаете, почему это так.
robmathers
Спасибо за разъяснения, медленно пытаюсь понять синтаксис AS. Что помогает!
Джордж C
Нет проблем. AppleScript - довольно неприятный язык IMO. Идея похожего на английский языка сценариев звучит хорошо на первый взгляд, но вы быстро понимаете, что у него есть серьезные проблемы. Тем не менее, это все еще полезный способ получить много вещей, специфичных для OS X.
robmathers
Я обнаружил ограничение этого метода: он создает новую запись каждый раз. У меня есть две группы, в ожидании и текущей. Я хотел бы иметь возможность добавить новую запись в Ожидание, но затем переместить этот же контакт в Текущий, если / когда их проект продвигается.
Джордж C
0
У меня есть более расширенная версия этой идеи, которая представляет список групп и позволяет выбирать из него; он также обрабатывает несколько сообщений. Вы можете добавить отправителя нескольких разных сообщений в одну группу или добавить одного или нескольких отправителей в несколько групп.
В моем сценарии для добавления отправителя к контактам используется сочетание клавиш: Cmd-Shift-Y (выполняется сценарием, но держу пари, что вы не знали, что это было с помощью сочетания клавиш !! Это происходит в меню «Сообщения», когда сообщение выбрано).
tell application "Mail" to set theSelection to selection
if theSelection is{}thenreturn beep 2if length of theSelection =1thenset thePrompt to "Select the group(s) to which to add the sender of the selected message."elseset thePrompt to "Select the group(s) to which to add the senders of the selected messages."endif
tell application "Contacts" to set theList to name of groups
set R to choose from list theList with prompt thePrompt with multiple selections allowed
if R isfalsethenreturn
tell application "Mail"
activate
set theSenders to {}
repeat with thisMessage in theSelection
set theSender to extract name from sender of thisMessage
copy theSender to the end of theSenders
end repeat
tell application "System Events" to keystroke "y"using{shift down, command down}end tell
tell application "Contacts"
activate
repeat with thisSender in theSenders
delay 0.1set thePersons to (people whose value of emails contains (thisSender as text))if(count thePersons)=1then
repeat with theGroupName in items of R
add (item 1 of thePersons) to group theGroupName
end repeat
else
repeat with theGroupName in items of R
repeat with thisPerson in thePersons
add thisPerson to group theGroupName
end repeat
end repeat
endifend repeat
save
set selected of group theGroupName to true
tell application "System Events" to keystroke "0"using{command down}end tell
save
, который ничего не возвращает, если успешно сохранен. Не о чем беспокоиться, но это выглядит зловеще, если вы не знаете, почему это так.У меня есть более расширенная версия этой идеи, которая представляет список групп и позволяет выбирать из него; он также обрабатывает несколько сообщений. Вы можете добавить отправителя нескольких разных сообщений в одну группу или добавить одного или нескольких отправителей в несколько групп.
В моем сценарии для добавления отправителя к контактам используется сочетание клавиш: Cmd-Shift-Y (выполняется сценарием, но держу пари, что вы не знали, что это было с помощью сочетания клавиш !! Это происходит в меню «Сообщения», когда сообщение выбрано).
источник