我正在为应用程序创建一个动作扩展,为用户准备一些数据,然后使用MailCore2将此信息发送到SMTP服务器.准备数据的速度非常快,但发送电子邮件可能需要一些时间(取决于其大小).这就是为什么我正在寻找一种在后台处理发送活动的方法.但这导致了不同解决方案的一些问题:
使用URLSession.这是在iOS扩展中处理大型上传或下载的第一种方法.但问题是MailCore2不使用URLSessions将数据传输到邮件服务器.所以这不可用.或者是否有可能以某种方式在URLSession中"包装"此调用?
使用UNUserNotificationCenter并在数据准备后从扩展发送本地通知.我们的想法是在收到此通知后在主应用程序中启动发送任务.问题:userNotificationCenter didReceive仅当用户单击通知时才会调用通知方法.简单的徽章通知不会调用委托方法.
使用后台提取.这在模拟器中工作正常,但在iOS设备上连接到SMTP服务器时出错.我遇到了与github.com/MailCore/mailcore2/issues/252中描述的相同的HELO问题.对于此问题,应该是一个解决方案MCOSMTPSession.isUseHeloIPEnabled = true,但这可能不适用于所有服务器.所以也不是一个完美的解决方案
任何想法,如何处理这样的任务?或者如何处理上述解决方案之一?
编辑:因为这个问题还没有收到任何答案:什么不清楚或需要哪些附加信息?
我最近将MailCore2合并到了我的Objective-C项目中,并且它运行得很好.现在,我正在将应用程序中的代码转换为Swift.我已成功将MailCore2 API导入到我的swift项目中,但我没有看到如何将以下工作的Objective-C代码转换为Swift代码的文档(Google搜索,libmailcore.com,github):
MCOSMTPSession *smtpSession = [[MCOSMTPSession alloc] init];
smtpSession.hostname = @"smtp.gmail.com";
smtpSession.port = 465;
smtpSession.username = @"matt@gmail.com";
smtpSession.password = @"password";
smtpSession.authType = MCOAuthTypeSASLPlain;
smtpSession.connectionType = MCOConnectionTypeTLS;
MCOMessageBuilder *builder = [[MCOMessageBuilder alloc] init];
MCOAddress *from = [MCOAddress addressWithDisplayName:@"Matt R"
mailbox:@"matt@gmail.com"];
MCOAddress *to = [MCOAddress addressWithDisplayName:nil
mailbox:@"hoa@gmail.com"];
[[builder header] setFrom:from];
[[builder header] setTo:@[to]];
[[builder header] setSubject:@"My message"];
[builder setHTMLBody:@"This is a test message!"];
NSData * rfc822Data = [builder data];
MCOSMTPSendOperation *sendOperation =
[smtpSession sendOperationWithData:rfc822Data];
[sendOperation start:^(NSError *error) {
if(error) {
NSLog(@"Error sending …Run Code Online (Sandbox Code Playgroud) 我有一个iPad应用程序,允许用户使用Mailcore2访问他们的Gmail帐户.我想我已经理解了Gmail的线程ID,消息ID和UID之间的区别,直到我仔细查看当我执行消息获取操作时Mailcore2返回给我的内容.我希望有人可以澄清我的困惑.
以下是我认为我从Gmail文档中了解到的内容:
1)线程ID将作为同一对话的一部分的消息(具有它们自己的消息ID和UID)组合在一起
2)UID特定于消息,并且仅对包含它的文件夹唯一
3)消息ID特定于消息,并且在帐户的所有文件夹中是唯一的
我也做了以下假设:
1)线程具有线程ID并且是消息的集合.线程没有消息ID或UID.
2)消息具有消息ID,UID和线程ID(即使它是线程中的唯一消息)
3)通过UID获取消息获取具有落在所请求的UID范围内的UID的MESSAGES.
4)属于同一线程的消息将具有不同的UID和消息ID,但具有相同的线程ID.
好吧,假设上面的内容是正确的,我认为在UID的Mailcore2中典型的消息提取过程中,我会收到一组电子邮件,从这些电子邮件中我可以查看他们的线程ID,例如重构线程在客户端.但是,我似乎回到了线程而不是电子邮件.此外,我得到的每个线程不一定包含其所有"子"消息.
因此,例如,如果我的收件箱中有两个线程,每个线程包含五条消息,则Mailcore以MCOIMAPMessages的形式向我返回一组2个"电子邮件".每个"电子邮件"都有一个线程ID,一个消息ID和一个UID.所以我不确定如何在这两个线程上访问包含的电子邮件.我看到有一个引用数组......但是检查这个对象并没有发现任何有用的东西.当我记录每个线程的内容时,我只获得部分内容 - 比如线程中的5条消息中的4条.不确定这是Mailcore还是我的保存过程中的错误,因为我对这一切的工作原理不完全了解.
这是我获取消息的代码:
//创建获取操作以获取文件夹中的第(10)条消息(第一次提取由序列号完成,后续提取由UID完成
uint64_t location = MAX([info messageCount] - DefaultPageSize + 1, 1);
uint64_t size = serverMessageCount < DefaultPageSize ? serverMessageCount - 1 : DefaultPageSize - 1;
MCOIndexSet *numbers = [MCOIndexSet indexSetWithRange:MCORangeMake(location, size)];
MCOIMAPMessagesRequestKind kind = MCOIMAPMessagesRequestKindUid |
MCOIMAPMessagesRequestKindFullHeaders |
MCOIMAPMessagesRequestKindFlags |
MCOIMAPMessagesRequestKindHeaders |
MCOIMAPMessagesRequestKindInternalDate;
if ([capabilities containsIndex:MCOIMAPCapabilityGmail]) {
kind |= MCOIMAPMessagesRequestKindGmailLabels | MCOIMAPMessagesRequestKindGmailThreadID | MCOIMAPMessagesRequestKindGmailMessageID;
self.gmailCapability = YES;
}
fetchLatestEmails ([self.imapSession fetchMessagesByNumberOperationWithFolder:folder.folderId requestKind:kind numbers:numbers]); …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过IMAP连接并从Gmail检索邮件标头列表.
我收到了Google的回复,其中包含"需要Web登录",然后是一个URL,通过网络界面继续登录.记录:http://hastebin.com/odufaducew.vhdl
为什么会这样?如何处理这种情况?我正在使用适用于iOS的MailCore2 lib,如果这有帮助的话.
我尝试使用以下代码获取bodyHTML
MCOIMAPFetchContentOperation * op = [imapsession fetchMessageAttachmentOperationWithFolder:folderName uid:uid partID:partId encoding:MCOEncoding8Bit
Run Code Online (Sandbox Code Playgroud)
我得到了一些带有一些不必要的额外代码的bodyHTML.我收到的其中一封邮件的Html是
<div style="padding-bottom: 20px;"></div><div><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org=
<br/>/TR/xhtml1/DTD/xhtml1-strict.dtd">
<br/><html xmlns=3D"http://www.w3.org/1999/xhtml">
<br/><head>
<br/><meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dutf-8" />
<br/><meta name=3D"viewport" content=3D"width=3Ddevice-width" />
<br/><meta http-equiv=3D"X-UA-Compatible" content=3D"IE=3Dedge" />
<br/></head>
<br/><body style=3D"-ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; =
<br/>background: #EEEEEE; color: #222222; font-family: 'Open Sans', Arial, sans-=
<br/>serif; font-size: 14px; font-weight: normal; line-height: 22px; margin: 0; =
<br/>min-width: 100%; padding: 0; text-align: left; width: 100% !important" bgco=
<br/>lor=3D"#EEEEEE"><style type=3D"text/css">
<br/>body {
<br/>width: 100% …Run Code Online (Sandbox Code Playgroud) 我已按项目gitHub-Page中的描述将MailCore2集成到我的项目中.我这样做是使用PODS并遵循他们关于标准C++编译器设置,附加链接器标志等的所有说明.在构建实际设备(而不是模拟器)时,我得到了
对于架构arm64未定义的符号: "_res_9_ns_initparse",从引用:mailcore :: MXRecordResolverOperation ::主()中:mailcore ::在libMailCore-ios.a(MCMXRecordResolverOperation.o) "_res_9_search",MXRecordResolverOperation :: main()的从参考libMailCore-ios.a(MCMXRecordResolverOperation.o)"_ show_9_ns_parserr",引自:libMailCore-ios.a(MCMXRecordResolverOperation.o)中的mailcore :: MXRecordResolverOperation :: main()引用自:mailcore :: MXRecordResolverOperation ::主要的()在libMailCore-ios.a(MCMXRecordResolverOperation.o) "_res_9_dn_expand",从引用:mailcore :: MXRecordResolverOperation :: main()中的libMailCore-ios.a(MCMXRecordResolverOperation.o)LD:未找到符号(S)体系结构arm64 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
任何帮助,想法,提示或tipp非常感谢!
我尝试使用以下代码从我的公司电子邮件中通过IMAP协议获取邮件:
MCOIMAPSession *session = [[MCOIMAPSession alloc] init];
[session setHostname:@"imap.mymail.com"];
[session setPort:993];
[session setUsername:@"accidbright@mymail.com"];
[session setPassword:@"password"];
[session setConnectionType:MCOConnectionTypeTLS];
MCOIMAPFetchMessagesOperation * fetchOperation = [session fetchMessagesByUIDOperationWithFolder:inboxFolder requestKind:MCOIMAPMessagesRequestKindHeaders uids:searchResult];
[fetchOperation start:^(NSError *error, NSArray *messages, MCOIndexSet *vanished) {
if (error) {
NSLog(@"Fetching all the message subjects error: %@!", error);
} else {
NSLog(@"Fetched all the messages subjects!");
}
}];
Run Code Online (Sandbox Code Playgroud)
我得到错误:
Fetching all the message subjects error: Error Domain=MCOErrorDomain Code=4
"The certificate for this server is invalid." UserInfo=0x7889ab0
{NSLocalizedDescription=The certificate for this server is invalid.}!
Run Code Online (Sandbox Code Playgroud)
我知道,我们的邮件是使用域名证书签名的,因此在域外,它是未经验证的证书.但几乎所有使用邮件(fe …
我能够使用获取所有消息fetchMessagesByUIDOperationWithFolder:,但是,当一些消息未读时,message.flags都返回0,大多数消息被读取而一些消息被加星标.
MCOIMAPMessagesRequestKind requestKind = MCOIMAPMessagesRequestKindHeaders;
NSString *folder = @"INBOX";
MCOIndexSet *uids = [MCOIndexSet indexSetWithRange:MCORangeMake(1, UINT64_MAX)];
MCOIMAPFetchMessagesOperation *fetchOperation = [session fetchMessagesByUIDOperationWithFolder:folder requestKind:requestKind uids:uids];
[fetchOperation start:^(NSError * error, NSArray * fetchedMessages, MCOIndexSet * vanishedMessages)
{
if ( ! error ) {
for ( MCOIMAPMessage * message_ in fetchedMessages ) {
// I only want UNREAD messages.
}
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试过使用if ( message_.flags & MCOMessageFlagSeen )但仍然会将所有标志返回为0.
查看消息是否为UNREAD的正确方法是什么?
mailcore2 ×8
ios ×5
objective-c ×4
gmail ×2
gmail-imap ×2
mailcore ×2
swift ×2
api ×1
email ×1
google-oauth ×1
imap ×1
iphone ×1