苹果邮件.app使用插件设置HTML签名

2024-07-02 12:09:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我创造了一个邮件.app一个带有Python的插件,通过在ComposeBackEnd中滑动setSignature:方法设置从远程服务器提取的自定义签名。根据下面的类转储,我可以使用setSignatureContents:设置纯文本签名,这是功能性的。在

@interface Signature : NSObject <NSCopying>
{
    NSString *_uniqueId;
    NSString *_name;
    NSData *_webArchiveData;
    BOOL _isRich;
    BOOL _isSavedAsRich;
    BOOL _isDirty;
    MFSyncedFile *_syncedFile;
}

- (id)syncedFile;
- (id)signaturePath;
- (unsigned long long)hash;
- (BOOL)isEqual:(id)arg1;
- (BOOL)isRich;
- (void)setIsRich:(BOOL)arg1;
- (void)setWebArchive:(id)arg1;
- (id)webArchive;
- (id)webArchiveData;
.....
- (void)setSignatureContents:(id)arg1;
- (id)signatureContents;
- (void)setSignatureName:(id)arg1;
- (id)signatureName;

@end

尝试使用一个webnsi对象来存档:(但是,当使用一个webnsi数据集时,应该尝试使用该签名集):

^{pr2}$

我得到以下错误:

11/7/12 11:07:38.858 AM Mail[8820]: -[NSConcreteData data]: unrecognized selector sent to instance 0x7ffc2386bc00

(远程文件的格式已正确)

有什么办法可以让它工作吗?提前谢谢。在


EDIT-尝试了此操作(返回应响应-[data])的WebArchive对象:

wds = WebDataSource.alloc().initWithRequest_(NSURLRequest.requestWithURL_(NSURL.URLWithString_('http://...')))
        webarchive = wds.webArchive
        signature.setWebArchive_(webarchive)

结果:

11/7/12 3:26:59.173 PM Mail[16814]: An uncaught exception was raised
11/7/12 3:26:59.173 PM Mail[16814]: Class OC_PythonObject: no such selector: data

Tags: iddata远程maillongboolarg1void
2条回答

However when I attempt to set an HTML signature using setWebArchive: (which should take an NSData object)… I get the following error:

11/7/12 11:07:38.858 AM Mail[8820]: -[NSConcreteData data]: unrecognized selector

此错误告诉您,-[setWebArchive:]正在试图对您的NSData对象调用-[data]。由于-[NSData data]不存在,因此出现无法识别的选择器异常。在

显然,它不需要NSData,它需要通过返回NSData来响应-[data]的内容。在

EDIT - tried this (returns WebArchive object which should respond to -[data]):

^{pr2}$

等等……您还没有显示这个类的类转储,但是另一个类有一个方法-[webArchive],而不是一个正确的webArchive。所以,如果它们完全一致的话,这个也可能有一个方法,而不是一个属性。在

如果是这样,这意味着wds.webArchive不是一个WebArchive对象,而是一个包装器对象,它大致表示ObjC等价于Python绑定的方法。而调用-[data]几乎肯定会失败。在

11/7/12 3:26:59.173 PM Mail[16814]: Class OC_PythonObject: no such selector: data

如果您只需将其更改为wds.webArchive(),那么应该可以解决问题。在

最后,值得在这里调试打印。如果您认为您有一个WebArchive,并且-[WebArchive data]返回一个NSData,那么您可以非常轻松地进行测试:

print webArchive
print webArchive.data()

如果有人想这样做,下面是创建和设置web存档的解决方案(您需要添加WebKit框架):

WebView *webView = [[WebView alloc] init];
WebFrame *webFrame = [webView mainFrame];

NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://..."]];
[webFrame loadRequest:urlRequest];

-

^{pr2}$

上面的代码在转换为PyObjC语法后,可以很好地与最新版本的Mail配合使用。不幸的是,它不可能是本地文件,因为gateekeeper在10.8上对它进行了限制,而且你必须在setSignature之前调用URL请求:(将webFrame设置为全局变量,并将主窗口加载子类化),否则它将无法及时加载,您只会得到一个空的WebArchive。在

相关问题 更多 >