Как получить URL-адрес сообщения mail.app, который останется постоянным при перемещении сообщения?

4

Таким образом, mail.app имеет этот замечательный сообщение:// Схема URL, которая прекрасно работает - пока сообщение не будет перемещено. Тогда созданные ссылки иногда работают, а иногда нет. Я не могу понять разницу. Итак, мой вопрос состоит из двух частей:

  1. Есть ли способ получить доступ к сообщениям через URL, даже если они были перемещены?
  2. Если нет, как я могу переместить сообщение и затем получить идентификатор сообщения?

Мой текущий сценарий

tell application "Mail"
    set theSelectedMessages to selection
    set the selected_message to item 1 of the theSelectedMessages
    set message_id to the message id of the selected_message
    set message_subject to the subject of the selected_message
end tell
set myPrompt to display dialog "Create New To Do in BusyCal" default answer message_subject
set response to the text returned of myPrompt
set quick_entry to encode(response & " " & month of (current date) & day of (current date) & "!!!" & " <message:<" & message_id & ">>") -- see encode handler below
tell application "BusyCal"
    activate
    open location "busycalevent://new/-" & quick_entry
end tell
tell application "Mail"
    move the selected_message to mailbox "Calendar" of mailbox " To-Do" of account "Calion"
end tell
--encode handler
on encode(msg)
    set theText to do shell script "/usr/bin/python -c 'import sys, urllib; print urllib.quote(sys.argv[1])' " & quoted form of msg
    set AppleScript's text item delimiters to "/"
    set theTextItems to text items of theText
    set AppleScript's text item delimiters to "%2F"
    set theText to theTextItems as string
    set AppleScript's text item delimiters to {""}
    return theText
end encode
Calion
источник

Ответы:

5

Короткий ответ

message: URL-адрес являются постоянный, но Mail необходимо перезапустить, чтобы база данных идентификаторов сообщений была обновлена, а URL-адреса были правильно разрешены

Вам придется перезапустить Mail перед использованием BusyCal. Кроме того, вы можете перезапустить Mail в вашем скрипте.


Длинный ответ

После некоторых тестов я заметил, что:

  • ID сообщения не меняются при перемещении сообщения :

    Идентификатор сообщения этого тестового письма, находящегося в папке «Входящие»:

    enter image description here

    не меняется после перемещения в _People Почтовый ящик:

    enter image description here

  • идентификаторы сообщений работают после перезапуска Mail :

    После перемещения сообщения, URL message:%3CCA+pHXZSgP12HvSg2sQ9J3ochK2K8xOTk_wEoTf+6WmMcYGYxnw@mail.gmail.com%3E показывает пустое сообщение, потому что Mail ищет сообщение в папке «Входящие» (нажмите «Command» и щелкните значок конверта на панели окна, чтобы показать путь к пустому сообщению):

    enter image description here

    После перезапуска Почты сообщение успешно найдено:

    enter image description here

(Проверено на OS X Mavericks 10.10.4.)

На ваши вопросы:

Есть ли способ получить доступ к сообщениям через URL, даже если они были перемещены?

Да, перезапустите Mail, чтобы он восстановил свою внутреннюю базу данных идентификаторов сообщений. Вы сможете получить доступ к любым перемещенным сообщениям в их новых почтовых ящиках.

Я понимаю, что это раздражает, но, похоже, это единственный обходной путь.

Если нет, как я могу переместить сообщение, а затем получить его идентификатор сообщения?

Это не обязательно, так как идентификаторы сообщений не меняются.

jaume
источник
АГА! Это объясняет, почему они иногда работают, а иногда нет. Таким образом, похоже, что это не поможет переместить его и получить идентификатор, потому что Mail не обновит базу данных. Я могу это проверить.
Calion
Интересно, есть ли способ принудительно обновить базу данных без перезапуска программы. В любом случае, вы ответили на мой вопрос. Спасибо, куча!
Calion
Мне также интересно, будет ли просмотр сообщения в его новом почтовом ящике обновлять БД. Бьюсь об заклад, это будет. Больше испытаний!
Calion
@Calion Я рад, что смог помочь, если вам удастся найти лучший способ, сообщите нам!
jaume
Просмотр сообщения не только не работал, но и обновление базы данных прошлой что Mail делает при запуске, так что ссылка не будет работать, пока Mail полностью не запустится и не завершит проверку новой почты. Ну что ж. Спасибо за решение проблемы!
Calion