我正在尝试使用Mac应用程序中的NSSharingService发送电子邮件。我将HTML代码包含为电子邮件正文。出现“邮件”窗口时,将对内容进行格式化,但HTML结构中的图像将移至底部电子邮件中。此外,即使我将此图像定义为链接,也不会在电子邮件正文中执行链接。
这是我正在使用的代码:
NSString* htmlText = @"<html><body><p>Message body</p><br/><a href='http://www.google.com'><img border='0' src=http://blog.jimdo.com/wp-content/uploads/2014/01/tree-247122.jpg label='Video' width='512' height='512'></img></a><br/><p>Video: <a href='http://blog.jimdo.com/wp-content/uploads/2014/01/tree-247122.jpg'>http://blog.jimdo.com/wp-content/uploads/2014/01/tree-247122.jpg</a></p><br/><p>Another link to <a href='http://www.google.com' target='_blank'>google</a></p></body></html>";
NSData* textData = [NSData dataWithBytes:[htmlText UTF8String] length:[htmlText lengthOfBytesUsingEncoding:NSUTF8StringEncoding]];
NSAttributedString* textAttributedString = [[NSAttributedString alloc] initWithHTML:textData options:nil documentAttributes:nil];
NSSharingService *emailSharingService = [NSSharingService sharingServiceNamed:NSSharingServiceNameComposeEmail];
[emailSharingService setSubject:@"Subject"];
emailSharingService.delegate = self;
NSArray* shareItems = [NSArray arrayWithObjects: textAttributedString, nil];
[emailSharingService performWithItems:shareItems];
图像应出现在“消息正文”文本行之后和“视频:...”之前,但在我的情况下它出现在底部。
HTML代码在Firefox和Safari上测试。此外,我可以使用Safari打开HTML文本,然后选择“文件 - >分享 - >通过电子邮件发送此页面”,它正是我正在尝试做的事情(但使用Safari,而不是我的应用程序)。
任何想法都很好。 提前谢谢。
答案 0 :(得分:2)
我使用NSSharingService进行了各种测试,包括连接nsattributedstrings和使用NSTextAttachment,但似乎NSSharingService(或NSAttributedString)总是将图像推送到最后。
尝试使用Apple Scripting网桥。
答案 1 :(得分:2)
这是一个非常古老的问题,但似乎没有找到答案,因为它被问及截至目前(xCode 7 OSX 10.11),问题仍然存在。
我找到的解决方案有点像黑客,但它保持简单和工作(使用mail.app)所以我认为它仍然可以帮助将来的人。
我没有使用NSAttributed字符串,而是在伪URL中编码包含HTML文本的变量。这使得mail.app将其视为附件,我发现它在html <a>
标记中显示其内容,就像它是内部超链接一样。
这是我使用的代码(在Swift中):
var eMailService:NSSharingService! = NSSharingService(named:NSSharingServiceNameComposeEmail)
eMailService.subject = mySubject
let message = "<html><body>Message body ...</body></html>"
let embeddedMessage = "</a>" + message
if let encodedMessage = embeddedMessage.stringByAddingPercentEncodingWithAllowedCharacters
(NSCharacterSet.alphanumericCharacterSet()),
let urlMessage = NSURL(string:encodedMessage)!
{
eMailService.performWithItems([urlMessage])
}
注意1:我在嵌入式邮件开头插入的“/ a”标签是为了防止整个html内容突出显示为超链接(因为mail.app将我的URL放在“a”标签内,我只是关闭它。)
注意2:这会导致NSSharingService抱怨URL不是绝对的(在日志中),但它仍然在电子邮件中正确插入。我可以通过在插入的“/ a”标签之前添加“data:”来消除此错误,但随后“数据:”出现在电子邮件上(我不喜欢)。