Objective c 使用Mail.app从Cocoa发送HTML邮件
我正在尝试从Cocoa应用程序通过Mail.app发送html电子邮件。我想在Mail.app中打开新邮件,包括主题、收件人,并添加带有链接和其他内容的HTML正文。但是找不到这样做的方法。 我已经尝试过编写脚本桥,但MailOutgoingMessage类没有内容类型,我可以以明文形式添加内容 尝试了AppleScript,类似以下内容:Objective c 使用Mail.app从Cocoa发送HTML邮件,objective-c,applescript,scripting-bridge,Objective C,Applescript,Scripting Bridge,我正在尝试从Cocoa应用程序通过Mail.app发送html电子邮件。我想在Mail.app中打开新邮件,包括主题、收件人,并添加带有链接和其他内容的HTML正文。但是找不到这样做的方法。 我已经尝试过编写脚本桥,但MailOutgoingMessage类没有内容类型,我可以以明文形式添加内容 尝试了AppleScript,类似以下内容: set htmlContent to read "/Path/index.html" set recipientList to {"mail@mail.co
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发送电子邮件,仅当我正在更改--send to send时。但在用户做了一些更改后,我需要稍后发送这封信。不清楚您在寻找什么,但我会尽力提供帮助 如果您对
send
留下评论,则邮件应该已经在Mail.app中打开,等待进一步编辑和发送
通过添加行save newMessage
,它将被保存到草稿文件夹中。用户可以随时打开它并继续编辑。如果您希望实际发送应用程序的草稿,请使用:
set sendMessage to first message of drafts mailbox
send sendMessage
祝你好运 我没有看到您需要在发送前编辑邮件,因此我之前的回答是错误的。这次应该是正确的 基本上
- 获取预格式化的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
同样,这对雪豹很有效
希望这有帮助。重述问题:使用AppleScript创建包含HTML内容的邮件进行交互式编辑不起作用(从OS X 10.9.2开始):新邮件表单出现了一个空正文 这应该被认为是一个错误,我鼓励大家告诉苹果一个警告:
html内容消息类属性没有在邮件.sdef
,邮件.app
的AppleScript字典中定义,因此分配html可能不受官方支持
有一个解决方案,但它并不漂亮:
- 以不可见的方式创建消息
- 另存为草稿
- 打开草稿消息,此时将显示HTML内容
强有力地实现这一点具有挑战性,因为需要几种变通方法。不过,以下代码尽了最大努力:
注意:由于代码使用GUI脚本,因此运行此代码的应用程序(例如,AppleScript Editor
,或者,如果通过osascript
,Terminal.app
)必须启用辅助设备的访问功能(通过System Preferences>Security&Privacy>Accessibility
)
#示例值;使用“readsomefile”从文件中读取HTML。
将htmlContent设置为“你好,世界。”
将recipientList设置为{”person1@example.com", "person2@example.com"}
将msgSubject设置为“qwerty”
告诉应用程序“邮件”
#创建消息*不可见*,并指定主题文本
#以及HTML内容。
设置newMessage以生成具有属性的新传出消息
{可见:false,主题:msgSubject,html内容:htmlContent}
#添加收件人。
# !! 考虑到下面的解决方法,这目前是毫无意义的。
告诉新消息
使用recipientList中的toRcpt重复此操作
在属性为{address:toRcpt}的收件人的末尾向收件人新建
结束重复
结束语
#保存当前草稿邮件数。
将draftCountBefore设置为对草稿邮箱的邮件计数
# !! 将新邮件另存为*草稿*-这是必需的
#使HTML内容实际显示在消息中
#当我们稍后以交互方式打开邮件时,返回正文。
保存新消息
# !! 遗憾的是,新消息需要一段时间
# !! 要显示在草稿邮箱中,我们必须等待。
将newMessageAsDraft设置为缺少值
在1到30之间重复i#在n*0.1秒后放弃。
将draftCountNow设置为(计算草稿邮箱的邮件数)
如果draftCountNow>draftCountBefore,则
将newMessageAsDraft设置为草稿邮箱的邮件1
退出重复
如果结束
延迟0.1#睡一会儿
结束重复
#如果草稿从未出现,则中止。
如果newMessageAsDraft缺少值,则出现错误“新邮件在超时期间未能在草稿邮箱中显示。”
#以*草稿*消息的形式打开新消息-这确保
#HTML内容在消息正文中显示并可编辑。
# !! 我找到的唯一解决方案是使用“重定向”,不幸的是,
# !! *清除收件人*。
# !! 但是,它确实确保在发送邮件后删除草稿。
在打开窗口时重定向newMessageAsDraft
#激活Mail.app,从而激活草稿邮件窗口。
激活
# !! 由于接受者已被消灭,我们需要
# !! 再次添加它们-不幸的是,我们唯一能做的就是
# !! *GUI脚本*-模拟菜单命令的调用或
# !! 发送击键。
告诉应用程序“系统事件”
#我们必须确保目标窗口在启动之前处于活动状态
#我们可以在上面执行GUI脚本。
将newMessageWindow设置为缺少值
在1到30之间重复i#在n*0.1秒后放弃。
tell(其最前面为true的第一个进程的第一个窗口,其子进程不是“AXFloatingWindow”)
如果名称为msgSubject,则
将newMessageWindow设置为它
退出重复
如果结束
结束语
延迟0.1#睡一会儿
结束重复
如果newMessageWindow缺少值,则出现错误“新消息未能在超时期间成为活动窗口”
#对于pasti,将收件人列表转换为逗号分隔的*字符串*