使用AppleScript在邮件中复制草稿邮件

使用AppleScript在邮件中复制草稿邮件,applescript,osx-mavericks,Applescript,Osx Mavericks,我在Mail的草稿文件夹中有一条消息。我想复制它(保留其附件),添加一个地址,然后发送它(副本) 我无法引用副本 tell application "Mail" set theTemplate to the (first message of drafts mailbox) set theDuplicate to (duplicate theTemplate to drafts mailbox) // error: The variable theDuplicate is no

我在Mail的草稿文件夹中有一条消息。我想复制它(保留其附件),添加一个地址,然后发送它(副本)

我无法引用副本

tell application "Mail"

  set theTemplate to the (first message of drafts mailbox)

  set theDuplicate to (duplicate theTemplate to drafts mailbox)

  // error: The variable theDuplicate is not defined.
  display dialog ((subject of theDuplicate) as rich text)

  tell theDuplicate

    -- add the recipient
    make new to recipient at end of to recipients with properties {name:("Foo Bar"), address:("foo.bar@domain.com")}

    -- send message
    send

  end tell

end tell
Mail在
duplicate
上的字典条目表明我正在尝试做的事情是受支持的:

复制品 v:复制一个对象

复制说明符:要复制的对象

[位置说明符]:新副本的位置

[使用属性记录]:要立即在新副本中设置的属性

我不明白什么?

您缺少一个方面:duplicate命令不会返回它创建的副本-您可以通过缺少
在字典中。

因此,在复制后,您需要使用单独的命令和获取对复制的引用。

遗憾的是,AppleScript还没有变得很难:

草稿邮箱
似乎是对与定义的特定电子邮件帐户关联的各种特定草稿邮箱的抽象。

针对摘要
草稿邮箱
可以很好地访问现有草稿,但在复制到草稿邮箱时,似乎必须针对特定的草稿邮箱

执行
将模板设置为(草稿邮箱的第一条消息)后,在AppleScript编辑器中单击
事件
时,通过检查报告内容,可以确定草稿存储在的实际特定草稿邮箱中
命令:它将显示对草稿所在的特定邮箱的引用,例如,对于Gmail帐户:

邮箱“草稿(Gmail)”的邮件id 153525

如果您不想硬编码特定的引用,您可以在草稿邮箱的邮箱上循环查找包含感兴趣的草稿的特定子邮箱。

只有在针对特定的草稿邮箱时,
replicate
命令才真正起作用
(至少是显而易见的-可以想象,复制到抽象邮箱是可行的,
Mail.app
是可行的,但只是没有显示出来-然而,
drafts邮箱中的邮件数没有改变这一事实表明情况并非如此)

但乐趣并不止于此:您不能在草稿邮件上设置收件人属性并直接发送它:您必须首先将其转换为
传出邮件
,但没有直接的方法来执行此转换(据我所知)。 作为一种解决方法,下面的代码使用了
重定向
命令,但是它有副作用-请参阅注释

告诉应用程序“邮件”
#查找包含
#模板草稿消息。
将模板设置为缺少值
尝试
对草稿邮箱的邮箱中的mboxDrafts重复此操作
如果(mboxDrafts的消息计数)>0,则
设置模板以获取mboxDrafts的第一条消息
退出重复
如果结束
结束重复
结束尝试
如果模板缺少值,则出现错误“找不到草稿”
将countBefore设置为mboxDrafts的邮件计数
#复制原始邮箱,在同一邮箱中创建克隆。
将模板复制到mboxDrafts
if(mboxDrafts的消息计数)≤ 在那之前
错误“复制模板草稿邮件失败。”
如果结束
#获取副本的引用。
将副本设置为mboxDrafts的最后一条消息
#使用“重定向”将草稿消息转换为*传出消息*`
#命令,以便能够分配收件人和发送(遗憾的是,转换
#使用“作为传出消息”不起作用)。
#!!使用“重定向”有副作用:发件人显示为“重新发送发件人”(也是)
#!!收件人为“重新发送至”。
#!!使用'reply'也可以,但是_引用u消息的现有内容。
#!!我还没有找到转换草稿的无副作用的方法
#!!将消息发送到传出消息
将DuplicateAOut设置为在不打开窗口的情况下重定向Duplicate
告诉他们两人是怎么回事
#添加收件人。
在属性{name:(“Foo-Bar”)、地址:(“Foo。bar@domain.com")}
#发送消息。
发送
结束语
结束语

转发和重定向有什么区别?@craig:
转发
还引用了消息的现有内容(缩进并在左边空白处放置一个蓝色竖条)(正如
回复
所做的那样)-而且,引用的内容前面有一个前导(
开始转发消息:
),主题的前缀是
Fwd:
。这是一个解决棘手问题的好办法;它肯定会对我有用:@craig:我很高兴听到它。你的项目看起来很有趣。请随意贡献。奇怪的是,
replicate
动词在Outlook中可以正常工作,我今天来学习(所以我就这样做了,这很好。)下一步要做的事:找到一种从源代码“构建”
.scptd
包的方法。