标签: mailcore2

iOS动作扩展中的后台任务

我正在为应用程序创建一个动作扩展,为用户准备一些数据,然后使用MailCore2将此信息发送到SMTP服务器.准备数据的速度非常快,但发送电子邮件可能需要一些时间(取决于其大小).这就是为什么我正在寻找一种在后台处理发送活动的方法.但这导致了不同解决方案的一些问题:

  1. 使用URLSession.这是在iOS扩展中处理大型上传或下载的第一种方法.但问题是MailCore2不使用URLSessions将数据传输到邮件服务器.所以这不可用.或者是否有可能以某种方式在URLSession中"包装"此调用?

  2. 使用UNUserNotificationCenter并在数据准备后从扩展发送本地通知.我们的想法是在收到此通知后在主应用程序中启动发送任务.问题:userNotificationCenter didReceive仅当用户单击通知时才会调用通知方法.简单的徽章通知不会调用委托方法.

  3. 使用后台提取.这在模拟器中工作正常,但在iOS设备上连接到SMTP服务器时出错.我遇到了与github.com/MailCore/mailcore2/issues/252中描述的相同的HELO问题.对于此问题,应该是一个解决方案MCOSMTPSession.isUseHeloIPEnabled = true,但这可能不适用于所有服务器.所以也不是一个完美的解决方案

任何想法,如何处理这样的任务?或者如何处理上述解决方案之一?

编辑:因为这个问题还没有收到任何答案:什么不清楚或需要哪些附加信息?

ios mailcore2 swift ios-app-extension

15
推荐指数
1
解决办法
1308
查看次数

在Swift中发送Mailcore2普通电子邮件

我最近将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)

api objective-c mailcore mailcore2 swift

12
推荐指数
2
解决办法
9087
查看次数

通过Mailcore 2获取Gmails:线程ID与消息ID对比UID

我有一个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)

gmail gmail-imap ios google-oauth mailcore2

9
推荐指数
1
解决办法
3136
查看次数

为什么在通过IMAP连接到Gmail时会收到"需要Web登录"消息?

我正在尝试通过IMAP连接并从Gmail检索邮件标头列表.

我收到了Google的回复,其中包含"需要Web登录",然后是一个URL,通过网络界面继续登录.记录:http://hastebin.com/odufaducew.vhdl

为什么会这样?如何处理这种情况?我正在使用适用于iOS的MailCore2 lib,如果这有帮助的话.

gmail imap google-authentication gmail-imap mailcore2

7
推荐指数
2
解决办法
7040
查看次数

问题在Mailcore2中使用partID获取bodyHTML时

我尝试使用以下代码获取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>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org=
<br/>/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
<br/>&lt;html xmlns=3D"http://www.w3.org/1999/xhtml"&gt;
<br/>&lt;head&gt;
<br/>&lt;meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dutf-8" /&gt;
<br/>&lt;meta name=3D"viewport" content=3D"width=3Ddevice-width" /&gt;
<br/>&lt;meta http-equiv=3D"X-UA-Compatible" content=3D"IE=3Dedge" /&gt;
<br/>&lt;/head&gt;
<br/>&lt;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"&gt;&lt;style type=3D"text/css"&gt;
<br/>body {
<br/>width: 100% …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c ios mailcore2

5
推荐指数
1
解决办法
208
查看次数

ARM64的MailCore2和未定义符号的问题

我已按项目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非常感谢!

objective-c mailcore2

2
推荐指数
1
解决办法
571
查看次数

Mailcore 2错误"此服务器的证书无效." iOS版

我尝试使用以下代码从我的公司电子邮件中通过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 …

email ios mailcore mailcore2

1
推荐指数
1
解决办法
1210
查看次数

MailCore2,只获取UNREAD消息,或知道哪些消息是UNREAD

我能够使用获取所有消息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的正确方法是什么?

objective-c ios mailcore2

1
推荐指数
1
解决办法
1597
查看次数