使用Mail.app从Cocoa发送HTML Mail

时间:2013-07-10 16:09:31

标签: objective-c applescript scripting-bridge

我正在尝试通过Mail.app从Cocoa应用程序发送html电子邮件。我想在Mail.app中打开新邮件,包括主题,收件人,并添加带有链接和其他内容的HTML Body。但找不到这样做的方法。 我已经尝试过Scripting Bridge,但MailOutgoingMessage类没有内容类型,我可以用纯文本添加内容。

试过AppleScript,就像这样:

set htmlContent to read "/Path/index.html"
set recipientList to {"mail@mail.com"}

tell application "Mail"
    set newMessage to make new outgoing message with properties {subject:"qwerty", visible:true}
    tell newMessage
        make new to recipient at end of to recipients with properties {address:"mail@s.com"}
            set html content to htmlContent
        --send
    end tell
end tell

此代码使用html发送电子邮件,仅在我正在更改时才发送 - 发送。但是我需要在用户做出一些更改之后发送信件。

3 个答案:

答案 0 :(得分:5)

回顾问题:使用AppleScript创建包含交互式编辑的HTML内容的消息不起作用(从OS X 10.9开始) .2):新消息表单提供了一个正文。

这应该被认为是错误,我鼓励每个人在http://bugreport.apple.com - 警告时让Apple知道:html content {{1} } class属性在messageMail.sdef的AppleScript字典中定义而不是,因此可能无法正式支持分配HTML。

有一个解决方法,但它并不漂亮:

  • 创建隐形消息。
  • 保存为草稿
  • 打开草稿消息,此时HTML内容出现。

实施此功能非常具有挑战性,因为需要一些变通方法。但是下面的代码尝试最难:

注意:由于代码使用GUI脚本,因此必须启用辅助设备访问(通过Mail.app)运行此代码的应用程序(例如,System Preferences > Security & Privacy > Accessibility或,如果通过AppleScript Editorosascript)运行。

Terminal.app

答案 1 :(得分:1)

目前尚不清楚你在寻找什么,但我会尽力提供一些帮助。

如果您对send发表评论,则该邮件应该已在Mail.app中打开,等待进一步编辑和发送。

通过添加第save newMessage行,它将保存到草稿文件夹中。用户可以打开它并随时继续编辑。如果您想从应用程序中实际发送草稿,请使用:

set sendMessage to first message of drafts mailbox
send sendMessage
祝你好运!

答案 2 :(得分:1)

我没有看到你需要在发送之前编辑邮件,所以我之前的回答是错误的。这一次应该是正确的。

基本上

  • 采用预先格式化的RTF文件,
  • 呈现它&将它放入剪贴板,
  • 创建一条新消息,
  • 填写字段,
  • 将焦点移至邮件正文
  • 粘贴格式化的剪贴板

以下是代码:

set textSubject to "HTML Test"
set toAddress to "john.doe@gmail.com"
set toName to "John Doe"

tell application "Mail"
    do shell script "cat ~/Documents/RTF\\ File.rtf | textutil -stdin -stdout -convert rtf | pbcopy"

    set refMessage to make new outgoing message with properties {name:toName, address:toAddress, subject:textSubject, visible:true}
    tell refMessage
        make new to recipient at end of to recipients with properties {name:toName, address:toAddress}
    end tell
end tell

tell application "System Events"
    tell application process "Mail"
        set frontmost to true
        set value of attribute "AXFocused" of scroll area 4 of window textSubject to true
    end tell
    keystroke "v" using {command down}
end tell

同样,这在Snow Leopard上运作良好

希望有所帮助。