Отправить письмо с вложением, используя Javascript для автоматизации

Я хотел бы использовать Javascript для автоматизации в OS X Yosemite, чтобы создать новое сообщение электронной почты в Mail.app и прикрепить файл к электронной почте. Это мой код:

Mail = Application('com.apple.Mail')
message = Mail.OutgoingMessage().make()
message.visible = true
message.toRecipients.push(Mail.Recipient({ address: "abc@example.com" }))
message.subject = "Test subject"
message.content = "Lorem ipsum dolor sit"

До этого момента работает нормально. Я вижу новое окно сообщения с правильно заполненным получателем, темой и основным текстом. Но я не могу понять, как добавить вложение в файл. Словарь сценариев для Mail.app указывает, что contents свойство (экземпляр RichText) может содержать вложения, но я не знаю, как их добавить.

Я пробовал это, но я получаю ошибку:

// This doesn't work.
attachment = Mail.Attachment({ fileName: "/Users/myname/Desktop/test.pdf" })
message.content.attachments = [ attachment ]
// Error: Can't convert types.

Я нашел несколько примеров в Интернете, как это сделать в AppleScript, например, этот:

tell application "Mail"
    ...
    set theAttachmentFile to "Macintosh HD:Users:moligaloo:Downloads:attachment.pdf"
    set msg to make new outgoing message with properties {subject: theSubject, content: theContent, visible:true}

    tell msg to make new attachment with properties {file name:theAttachmentFile as alias}
end tell

Но я не могу понять, как преобразовать это в Javascript.

2 ответа

Решение

Я нашел способ сделать это методом проб и ошибок, нужно использовать message.attachments.push(attachment) вместо attachments = [...]

Mail = Application('com.apple.Mail')
message = Mail.OutgoingMessage().make()
message.visible = true
message.toRecipients.push(Mail.Recipient({ address: "foo.bar@example.com" }))
message.subject = "Testing JXA"
message.content = "Foo bar baz"

attachment = Mail.Attachment({ fileName: "/Users/myname/Desktop/test.pdf" })
message.attachments.push(attachment)

Основываясь на ответе выше @tlehman, я обнаружил, что его решение работало очень хорошо, за исключением одного: вложения НЕ были успешными. Нет ошибок, нет сообщений, вложение просто не было сделано к сообщению. Решение состоит в том, чтобы использовать Path() метод.

Вот его решение + Path() метод, который необходим, если в пути есть пробелы:

Mail = Application('com.apple.Mail')
message = Mail.OutgoingMessage().make()
message.visible = true
message.toRecipients.push(Mail.Recipient({ address: "foo.bar@example.com" }))
message.subject = "Testing JXA"
message.content = "Foo bar baz"

attachment = Mail.Attachment({ fileName: Path("/Users/myname/Desktop/if the file has spaces in it test.pdf") })
message.attachments.push(attachment)

Другие вопросы по тегам