2012-05-18 4 views
1

У меня есть приложение AppleScript, которое создает письмо (в Mail.app) с вложениями из опций, которые я выбираю через диалоговые окна. Текстовые шаблоны хранятся в формате .rtf, поэтому не-программисты могут изменять шаблоны текста по их пожеланиям.Копирование текста .rtf в тело письма с помощью AppleScript

Я могу создать письмо из текстового файла .txt, но когда я импортирую текстовый файл .rtf, он импортирует команды форматирования, которые мне не нужны в почте.

Вот пример .rtf импорта в электронную почту:

{\ rtf1 \ ANSI \ ansicpg1252 \ cocoartf1038 \ cocoasubrtf360 {\ fonttbl \ f0 \ fswiss \ fcharset0 Helvetica-Light;} { \ colortbl; \ red255 \ green255 \ blue255;} \ пард \ tx560 \ tx1120 \ tx1680 \ tx2240 \ tx2800 \ tx3360 \ tx3920 \ tx4480 \ tx5040 \ tx5600 \ tx6160 \ tx6720 \ QL \ qnatural \ pardirnatural

\ f0 \ fs24 \ cf0 технология mail для английского языка \

Вот часть моего сценария:

-- Import the .rtf file and store content in the mycontent variable  
set mycontent to (read "/Users/kiara/Desktop/mailer/technology/tech-en-content.rtf") 
… 
… 
-- create mail from values stored in variables 
tell application "Mail" 
    set theMessage to make new outgoing message with properties {visible:true, subject:mysubject, content:mycontent} 
    tell content of theMessage 
     make new attachment with properties {file name:this_file} at after last paragraph 
    end tell 
end tell 

Можно ли импортировать форматированный текст из .rtf файлов в новую почту без кодов форматирования (я выбираю РТФ, потому что в основном жирный шрифт и цвет, используется для форматирования текста) ?

ответ

1

Я думаю, что Почта отправляет электронное письмо как обычный текст или html, а не rtf. Таким образом, вам нужно отправить электронную почту как html, а не rtf. Обратите внимание, что есть трюк для отправки html-письма с помощью Mail через applescript. По какой-то причине вы не можете установить для свойства visible нового сообщения значение true. Это не сработает, если вы это сделаете.

Вот как это может вам помочь. Вы можете использовать инструмент командной строки textutil для преобразования rtf в html, а затем отправить его как электронную почту. Заметьте, что я использую «аккуратно» в команде, чтобы убедиться, что код html чист.

Так все, что вам нужно сделать, это поставить адрес электронной почты получателя и тему в этом сценарии и запустить его ...

set emailAddress to "[email protected]" 
set theSubject to "My converted rtf to html" 

set rtfFile to choose file with prompt "Choose the RTF file to email as HTML:" without invisibles 
set theHTML to do shell script "/usr/bin/textutil " & " -stdout -format rtf -convert html " & quoted form of POSIX path of rtfFile & " | /usr/bin/tidy -b -utf8" 

tell application "Mail" 
    set newMessage to make new outgoing message at end of outgoing messages with properties {visible:false} 
    tell newMessage 
     make new to recipient at end of to recipients with properties {address:emailAddress} 
     set subject to theSubject 
     set html content to theHTML 
     send 
    end tell 
end tell 
+1

Хорошо один - я не знал о недокументированном «html-контенте» (хорошее напоминание всегда должно проверять свойства объекта, а не полагаться на словарь). Тем не менее, два замечания: установка «visible: false» не требуется - исключение этого свойства будет работать (ничего, кроме «visible: true», один подозревается); и использование 'tiny -bare' не будет обрабатывать символы вне диапазона ASCII изящно - помимо выхода из ненулевого (что приведет к ошибке« make shell script »), это оставляет вам печально известные« förmattingâ € | »версии UTF -8 текст. Использование 'tiny -raw' или' tiny -utf8' даст лучшие результаты. – kopischke

+0

Спасибо за комментарии копишке. Я обновил код, чтобы использовать ваши предложения относительно аккуратности. Это хорошее и необходимое улучшение. – regulus6633

+0

Проверял почту в исходном виде и нашел «Content-Type: text/html», так что да, где правильно, с богатым текстом, заканчивающимся как HTML. Я жестко закодировал путь к файлу rtf и удалил команду send, потому что мои пользователи должны иметь возможность проверять почту в последний раз перед отправкой. Проблема, с которой я сейчас сталкиваюсь, заключается в том, что почта появляется без содержимого в теле. Вы знаете, как сделать контент в теле? – elhombre

1

Вот другой подход:

set the clipboard to (read "/Users/kiara/Desktop/mailer/technology/tech-en-content.rtf" as «class RTF ») 

tell application "Mail" 
    activate 
    set theMessage to make new outgoing message with properties {visible:true, subject:"mysubject"} 
end tell 

tell application "System Events" 
    tell process "Mail" 
     repeat until focused of UI element 1 of scroll area 4 of window 1 
      keystroke tab 
     end repeat 
     keystroke "v" using command down 
    end tell 
end tell 
+0

Просто спас мой бекон, сражался с глупыми шаблонами Mail. Спасибо! – skiaddict1

Смежные вопросы