- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个 iOS 应用程序,需要在用户添加新数据(条形码扫描仪、扫描代码)后在后台发送定期更新。我找不到任何方法可以在没有问题和限制的情况下通过 SMTP 和 mailcore2 在后台发送邮件。
我已经尝试过:
尝试使用后台获取 https://developer.apple.com/documentation/uikit/core_app/managing_your_app_s_life_cycle/preparing_your_app_to_run_in_the_background/updating_your_app_with_background_app_refresh但这是非常不规律的,需要一些时间才能触发。
在 AppDelegate.swift 中:
func applicationDidEnterBackground(_ application: UIApplication) {
BackgroundTask.run(application: application) { [...] }
}
但是只有当我关闭/最小化应用程序时才会发送数据,并且如果后台任务未完成,应用程序将卡住,并且我收到此错误:XPC 连接中断我还遇到了问题,因为我需要等待 sendOperation 返回,但由于这是异步的,我构建了一个解决方法来保持线程运行并随后处理我的“if success else ...”。完整代码中的更多内容:
typealias CompletionHandler = (Error?) -> Void
/// Provides syncronous access to results returned by
/// asynchronous processes with completion handlers
class SyncMaker {
var result: Error? = nil
/// Generates a synchronous-compliant completion handler
func completion() -> CompletionHandler{
return {
(error: Error?) in
// Store result, return control
self.result = error
CFRunLoopStop(CFRunLoopGetCurrent())
}
}
// Perform task (that must use custom completion handler) and wait
func run(_ task: @escaping () -> Void) -> Error? {
task()
CFRunLoopRun()
return result
}
}
func applicationDidEnterBackground(_ application: UIApplication) {
BackgroundTask.run(application: application) { backgroundTask in
if (scanManager.hasDataToSend()) {
let smtpSession = MCOSMTPSession()
let settings: Settings = scanManager.getSettings()
smtpSession.hostname = settings.credMailServer
smtpSession.username = settings.credMailSource
print(settings.credMailSource)
smtpSession.password = settings.credMailPassword
smtpSession.port = UInt32(settings.credMailPort)
[…] Setting auth and connection typ
smtpSession.isCheckCertificateEnabled = false
smtpSession.timeout = 100
smtpSession.connectionLogger = {(connectionID, type, data) in
if data != nil {
if let string = NSString(data: data!, encoding: String.Encoding.utf8.rawValue){
NSLog("Connectionlogger: \(string)")
}
}
}
let builder = MCOMessageBuilder()
builder.header.to = [MCOAddress(displayName: settings.credMailDest, mailbox: settings.credMailDest)!]
builder.header.from = MCOAddress(displayName: settings.credMailSource, mailbox: settings.credMailSource)
builder.header.subject = "ScanLMS"
builder.htmlBody = ""
guard let attachment = MCOAttachment(data: scanManager.getSendData().data(using: .ascii), filename: "scans.txt") else {
print("Cant init attachment!")
backgroundTask.end()
return
}
attachment.mimeType = "text/plain"
builder.addAttachment(attachment)
let rfc822Data = builder.data()
let sendOperation = smtpSession.sendOperation(with: rfc822Data!)
var sendingError: Bool = true
print("Trying to send mail...")
if (sendOperation != nil) {
print("Starting sendOperation...")
let syncMaker = SyncMaker() //full class on top of code
let result = syncMaker.run {
sendOperation?.start(
syncMaker.completion())
}
if (result != nil) {
print("Error sending email: \(result!)")
} else {
sendingError = false
print("Successfully sent email!")
}
} else {
print("Cant init sendOperation")
sendingError = true
}
if (sendingError) {
print("Error, returning")
} else {
print("Send done")
print("Updating scanManager with send data...")
scanManager.updateSendData()
print("Done, returning")
}
} else {
print("No new send data")
}
backgroundTask.end()
}
}
最佳答案
我将 smtpSession.timeout = 100 降低到 3(秒),现在它不再阻塞 UI。更多的是一种黑客而不是解决方案,但它有效。
关于ios - 应用程序运行时在后台使用 SMTP Mailcore2 发送邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56157309/
我在将 mailcore 2 头文件添加到我的 xCode 项目时遇到问题。我遵循了他们网站上的所有步骤: For iOS - If you're targeting iOS, you have to
使用 MailCore 时,如何删除邮件?我知道我为 CTCoreMessage 设置了一个 IMAP deleted 标志,但这实际上会导致消息被服务器删除吗?或者还有其他方法吗? 最佳答案 第一次
我正在使用 Mailcore ( https://github.com/MailCore/mailcore2) 访问 IMAP 邮件。 我可以使用给出的示例获取所有收件箱邮件。我也能够检索所有邮件文件
我曾尝试在安装后将 mailcore2-ios pod 集成到 smtp 中,当我尝试输入 mailcore 时,它说没有模块 'mailcore' 即使在该 pod 文件中也没有文件目录,但安装了
对于某些电子邮件,我想发送带有标题的额外数据。就像我想知道电子邮件是否已加密。为此,我设置了额外的标题,如下所示。 设置额外的标题 let mailBuilder: MCOMessageBuild
我已经在我的应用程序中添加了 MailCore.xcodeproj,并像在 Remail 应用程序中一样设置了标题搜索路径、库搜索路径和框架搜索路径。但是当我在导入任何其他类并创建如下对象后访问 Ma
我正在使用 MailCore 框架(基于 C 库 LibEtPan)开发邮件客户端。我想处理服务器连接和新线程或队列中的所有请求,并将信息推送到主队列以进行 UI 更新。 问题似乎是 MailCore
我的 MailCore2 (iOS) 连接到 smtp.live.com SMTP 服务器时遇到问题。 连接到 pop3.live.com、smtp.gmail.com 或 smtp.mail.yah
发送带有收据的电子邮件时,如下所示致:人A抄送:人B密件抄送:personC 这三个人都会收到电子邮件。并且所有收到的电子邮件将在收据字段中显示 personC。正如我们所知,密件抄送联系人 pers
我正在使用 MailCore 框架准备 iOS(iPhone 和 iPad)邮件应用程序。我想定期从服务器获取所有文件夹的邮件。是否有任何程序可以定期 ping 服务器并检查新邮件的到达。这样,无论何
我正在尝试使用 MailCore 发送电子邮件,但未发送电子邮件。如果我做错了什么,请提出建议。发送电子邮件的代码如下: -(void) sendMail{ NSLog(@"entered"
我正在使用 mailCore 从服务器获取电子邮件。我已完成 session 设置和基本流程。现在我陷入了一个小问题,我无法弄清楚。 Here is code of fetching email he
我正在尝试通过 IMAP 连接到 Google Apps 电子邮件服务器。我在下面使用的代码,每次尝试连接时都会出现错误:Parse error 有人知道这个错误的来源吗? int port
我正在尝试在应用程序中使用 MailCore,我已从 Github 获取该项目并按照 http://libmailcore.com/ 中的指示进行操作。 。 一切似乎都正确导入,但是当我尝试构建项目时
我正在尝试使用 MailCore 获取邮件正文,但它始终为空。我的代码是 CTCore *folder = [[CTCorefolder alloc] initWithPath:@"INBOX
我正在使用 MailCore 框架准备 Mail iOS 应用程序。在撰写新邮件时,我如何为邮件设置 UID,因为邮件正在发送,但不会移动或复制到发送箱或草稿文件夹。当我复制或移动消息时,它在线上崩溃
基本上,我有一个应用程序,用户输入他的电子邮件地址和密码,应用程序保存它,然后用户输入一个 friend 的电子邮件地址,我需要这个应用程序来获取用户的所有收件箱电子邮件 friend 是发件人。起初
是否可以根据最后已知的电子邮件 UID 获取消息。我可以使用“fetchMessagesByNumberOperation”方法获取电子邮件。但不知何故,我需要实现一种方法来从最后一个已知的电子邮件
是否有任何适用于 Android 的库,例如适用于 Mac 和 iOS 的 MailCore,它有助于处理电子邮件协议(protocol)。或者是否有任何库或 api 支持 SMTP、IMAP、POP
我正在尝试使用 Exchange 服务器从我的应用程序发送电子邮件。但我不断收到“无法使用当前 session 的凭据进行身份验证”。我注释掉了我尝试过的所有内容,如主机名、端口或连接类型。 我能做什
我是一名优秀的程序员,十分优秀!