如何通过AppleScript设置当前Mail.app发送的邮件的发件人?

8

我希望编写一份AppleScript脚本,用于设置邮件应用Mail.app中当前正在发送的邮件的发件人。

我尝试了以下代码:

tell application "Mail" to set sender of front outgoing message to "<my email address>"

但是我收到了这个错误信息:error "Mail got an error: Can’t set sender of item to any." number -10006 from sender of item to any,对我来说没有意义。

当我尝试像下面这样询问前面的发件人信息时:

tell application "Mail" to get properties of front outgoing message

我得到了{class:item},而不是我期望的“传出消息”对象。

有什么想法吗?

7个回答

5

很遗憾,您无法使用applescript获得或设置邮件的发送消息对象的属性。

相反,您可以使用GUI脚本编写一个解决方案,直接操作窗口元素。

以下代码应该适用于您:

tell application "System Events"
  tell process "Mail"
    click pop up button 1 of window 1
    click menu item 6 of menu 1 of pop up button 1 of window 1
  end tell
end tell

将第四行的菜单项6更改为列表中您所需发件人的任何数字(例如,如果要使用此脚本更改为的发件人是列出的第四个,请将菜单项6更改为菜单项4)。

更新:如果你好奇,因为这个答案已经超过两年了:截至2014-04-26,获取/设置outgoing message的属性仍然是不可能的,这个解决方法在OS X 10.9 Mavericks中仍然有效。


我要补充一点,如果你想设置的电子邮件地址不在列表中,你可以轻松地将其添加到列表中。在“邮件”偏好设置下的“帐户”选项卡下,“帐户信息”面板中,通过逗号分隔添加你想要从该帐户发送的电子邮件地址。 - Matthew McVickar

4

我认为这个问题有点复杂。根据Alan Kimelman在这个帖子中的结论,我的实验结果也表明,对于由脚本创建的全新的传出消息,AppleScript按预期工作。例如,以下代码可以正常工作:

tell application "Mail"
set newMessage to (a reference to (make new outgoing message))
tell newMessage
    make new to recipient at beginning of to recipients ¬
        with properties {address:"hello@world.com", name:"The World"}
    set the sender to "Jerry Krinock <jerry@sheepsystems.com>"
    set the subject to "A Test"
    set the content to "This is only a test."
    send
end tell
end tell

然而,如果消息是通过其他方式创建的(例如,我通过告诉Safari通过电子邮件共享来创建HTML消息),那么Matthew McVickar是正确的,即AppleScript已经损坏。您无法设置或获取任何属性,同时它也拒绝发送命令。


你必须确保发件人名称与下拉菜单中的名称完全相同才能使其正常工作。 - RaphArbuz

4

3

很让人沮丧的是,您无法设置发件人的出站邮件。

这里是我多年前编写并经常使用的Matthew脚本的更通用版本。参数是一个字符串,其中包含您在“发件人:”弹出窗口中看到的内容,例如

"Mitchell L Model <dev@software-concepts.org>"

如果您不进行大量GUI脚本编写,要正确获取此类详细信息非常棘手。

to setFrom(address)
    tell application "System Events"
        activate application "Mail"
        tell pop up button "From:" of window 1 of application process "Mail"
            click
            tell menu item address of menu 1 to click
        end tell
    end tell
end setFrom

我使用参数化处理程序的原因是我使用按键宏功能为我的每个电子邮件地址绑定了一个按键组合。每个按键组合都会执行一个AppleScript,该脚本会加载包含上述参数化处理程序的文件,并使用特定的电子邮件地址调用它。例如:
property util : load script alias (((path to home folder) as text) & "Scripts:Utilities.scpt")

util's 's setFrom("Mitchell L Model <dev@software-concepts.org>")

太好了,谢谢。@Matthew的答案在回复设置了“高优先级”标志的消息时无效,因为弹出按钮编号发生了变化。但是使用短语pop up button "From:"无论如何都有效。 - smokris

0

试试这个。

tell application "Mail" to make new outgoing message with properties {sender:"<your_email_address>", visible:true}

更新:我建议你查看邮件的脚本字典,了解你可以做什么和不能做什么。那里提供的信息可能会有所帮助。:)


1
谢谢,但我想更改当前消息的发送者,而不是创建新消息。 - smokris

0
使用AppleScript轻松创建新的发送邮件,可以选择任何你喜欢的发件地址(至少是在Mail.app偏好设置中配置的地址)。
这里讨论的重点是试图(错误地)在创建邮件后更改它。相反,在创建邮件时指定它:
set new_m to make new outgoing message with properties {sender:"My Name <me@my.com>"}

“引号中的文本需要与任何配置的帐户的真实姓名和电子邮件地址(在尖括号中)匹配。如果没有匹配,Mail.app将使用默认地址。”

这并没有解决原始问题:该消息并非由AppleScript创建,而是通过其他方式创建的。 - undefined

0

除了我提供的GUI脚本示例之外,另一个选择是使用“自动操作”命令的Automator脚本。我不完全了解它在底层如何工作,但它显然记录鼠标移动和GUI交互,然后在运行时重新演绎您录制的内容。不幸的是,在运行脚本时我遇到了明显的延迟。在请求运行后,它有时会在5秒甚至更长时间后才执行,这显然无法使用。

GUI脚本方法几乎是瞬间完成的,并且看起来更加整洁(没有鼠标移动)。我建议使用它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接