NSSharingService 发送电子邮件和阅读电子邮件正文 [英] NSSharingService to send email and read email body
问题描述
我正在使用 NSSharingService 在邮件应用程序中打开电子邮件撰写窗口:
I am using NSSharingService to bring up an email compose window in the Mail app:
NSSharingService* sharingService = [NSSharingService sharingServiceNamed:NSSharingServiceNameComposeEmail];
[sharingService setRecipients:@[@"test@blahblah.com"]];
[sharingService setSubject:@"Test"];
sharingService.delegate = self;
它可以很好地打开撰写电子邮件窗口,当我输入一些文本并实际发送电子邮件时,我什至收到了对委托的回调:
It brings up the compose email window fine, and when I enter in some text and actually send the email, I even get a callback to the delegate:
- (void)sharingService:(NSSharingService *)sharingService didShareItems:(NSArray *)items {
NSLog(@"sharingService didShareItems - %@", sharingService.messageBody);
}
问题在于它返回的 messageBody 始终为零.我期待这包含发送的电子邮件的文本.我检查了 NSSharingService 的头文件:
The problem is that the messageBody it returns is always nil. I was expecting this to contain the text of the email that was sent. I checked the header file for NSSharingService:
/* These read-only properties allow for querying of the shared content:
*/
// Message body as string
@property (readonly, copy) NSString *messageBody NS_AVAILABLE_MAC(10_9);
// URL to access the post on Facebook, Twitter, Sina Weibo, etc. (also known as permalink)
@property (readonly, copy) NSURL *permanentLink NS_AVAILABLE_MAC(10_9);
// Account name used for sending on Twitter or Sina Weibo
@property (readonly, copy) NSString *accountName NS_AVAILABLE_MAC(10_9);
// NSArray of NSURL objects representing the file that were shared
@property (readonly, copy) NSArray *attachmentFileURLs NS_AVAILABLE_MAC(10_9);
知道为什么这可能不起作用吗?如果我使用 NSSharingServiceNameComposeMessage
而不是电子邮件似乎工作正常,但那是为了发送 iMessage.
Any idea why this might not be working? It seems to be work fine if I use NSSharingServiceNameComposeMessage
instead of email, but that is for sending iMessages instead.
推荐答案
不确定为什么它在您的情况下不起作用,但这或多或少应该是要遵循的标准模式:
Not sure why it is not working in your case, but this should be more or less the standard pattern to follow:
@interface sharingServiceDelegate : NSObject <NSSharingServiceDelegate>
@end
@interface sharingServiceDelegate ()
@property NSString *recipientString;
@property NSString *subjectString;
@property NSString *bodyString;
@property NSURL <NSPasteboardWriting> *attachmentURL;
@property NSSharingService *emailSharingService;
@end
@implementation sharingServiceDelegate
- (id)init {
self = [super init];
if (self) {
NSSharingService *emailSharingService = [NSSharingService sharingServiceNamed:NSSharingServiceNameComposeEmail];
emailSharingService.delegate = self;
self.emailSharingService = emailSharingService;
}
return self;
}
- (BOOL)shareUsingEmail
{
NSArray *shareItems =@[_bodyString, _attachmentURL];
self.emailSharingService.recipients = @[_recipientString];
self.emailSharingService.subject = _subjectString;
if([self.emailSharingService canPerformWithItems:shareItems]){
[self.emailSharingService performWithItems:shareItems];
return TRUE;
} else {
// handle failure ...
}
return FALSE;
}
@end
然后您实际上可以在任何需要的地方执行这样的共享服务:
Then you actually perform the sharing service like this wherever you need to:
sharingServiceDelegate * shareDelegate = [[sharingServiceDelegate alloc] init];
shareDelegate.recipientString = @"recipient@address.com";
shareDelegate.subjectString = @"a subject";
shareDelegate.bodyString = @"A message body";
shareDelegate.attachmentURL = [NSURL fileURLWithPath:[NSString stringWithCString:file_to_share_path encoding:NSUTF8StringEncoding]];
if([shareDelegate shareUsingEmail]==FALSE)
NSLog(@"Email Sharing Service failed.\n");
}
这篇关于NSSharingService 发送电子邮件和阅读电子邮件正文的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!