从 SwiftUI 问题发送电子邮件

use*_*376 7 html-email swiftui

我一直在使用 UIViewControllerRepresentable 和 MFmailComposer 从 SwiftUI 视图预填充电子邮件。发送消息时,我在控制台中收到以下错误:

2020-10-02 09:27:58.559227-0400 CC0 Notes2[1288:471808] [PPT] 创建与 PPT 通信所需的 CFMessagePort 时出错。

尽管有错误,消息发送成功。在 iPadOS 上,我收到一个 Swoosh 来显示邮件已发送,但在 iOS 上我收到了成功的邮件发送但没有 Swoosh 声音来确认发送。这个错误是一个错误吗?我使用的是 XCode 12.0.1、iPadOS 14.0.1 和 iPOS 14.0.1

如果我无法从 iOS 中获得 Swoosh,我如何利用发送结果向用户确认邮件已发送?

使用此代码:

struct MailView: UIViewControllerRepresentable {
    @EnvironmentObject var theBody: GlobalData
    var imageData: NoteImageData
    @State private var ishowingSuccess = false
    
    @Binding var isShowing: Bool
    @Binding var result: Result<MFMailComposeResult, Error>?

    class Coordinator: NSObject, MFMailComposeViewControllerDelegate {

        @Binding var isShowing: Bool
        @Binding var result: Result<MFMailComposeResult, Error>?

        init(isShowing: Binding<Bool>,
             result: Binding<Result<MFMailComposeResult, Error>?>) {
            _isShowing = isShowing
            _result = result
        }

        func mailComposeController(_ controller: MFMailComposeViewController,
                                   didFinishWith result: MFMailComposeResult,
                                   error: Error?) {
            defer {
                isShowing = false
            }
            guard error == nil else {
                self.result = .failure(error!)
                return
            }
            self.result = .success(result)
        }
    }

    func makeCoordinator() -> Coordinator {
        return Coordinator(isShowing: $isShowing,
                           result: $result)
    }

    func makeUIViewController(context: UIViewControllerRepresentableContext<MailView>) -> MFMailComposeViewController {
        let vc = MFMailComposeViewController()
        vc.mailComposeDelegate = context.coordinator
        vc.setSubject("")
        //vc.setMessageBody(imageData.description , isHTML: true)
        vc.setMessageBody( theBody.mailBody, isHTML: true)
        return vc
    }

    func updateUIViewController(_ uiViewController: MFMailComposeViewController,
                                context: UIViewControllerRepresentableContext<MailView>) {

    }
}
Run Code Online (Sandbox Code Playgroud)

并拨打电子邮件:

.sheet(isPresented: $isShowingMailView) {
                        MailView(imageData: imageData, isShowing: self.$isShowingMailView, result: self.$result )
                    }
Run Code Online (Sandbox Code Playgroud)