SwiftUI: Send email

前端 未结 6 1504
小蘑菇
小蘑菇 2020-12-08 02:06

In a normal UIViewController in Swift, I use this code to send a mail.

let mailComposeViewController = configuredMailComposeViewController()

ma         


        
6条回答
  •  刺人心
    刺人心 (楼主)
    2020-12-08 02:53

    Yeeee @Hobbes the Tige answer is good but...

    Let's make it even better! What if user doesn't have Mail app (like I don't). You can handle it by trying out other mail apps.

    if MFMailComposeViewController.canSendMail() {
       self.showMailView.toggle()
    } else if let emailUrl = Utils.createEmailUrl(subject: "Yo, sup?", body: "hot dog") {
       UIApplication.shared.open(emailUrl)
    } else {
       self.alertNoMail.toggle()
    }
    

    createEmailUrl

    static func createEmailUrl(subject: String, body: String) -> URL? {
            let to = YOUR_EMAIL
            let subjectEncoded = subject.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!
            let bodyEncoded = body.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!
    
            let gmailUrl = URL(string: "googlegmail://co?to=\(to)&subject=\(subjectEncoded)&body=\(bodyEncoded)")
            let outlookUrl = URL(string: "ms-outlook://compose?to=\(to)&subject=\(subjectEncoded)")
            let yahooMail = URL(string: "ymail://mail/compose?to=\(to)&subject=\(subjectEncoded)&body=\(bodyEncoded)")
            let sparkUrl = URL(string: "readdle-spark://compose?recipient=\(to)&subject=\(subjectEncoded)&body=\(bodyEncoded)")
            let defaultUrl = URL(string: "mailto:\(to)?subject=\(subjectEncoded)&body=\(bodyEncoded)")
    
            if let gmailUrl = gmailUrl, UIApplication.shared.canOpenURL(gmailUrl) {
                return gmailUrl
            } else if let outlookUrl = outlookUrl, UIApplication.shared.canOpenURL(outlookUrl) {
                return outlookUrl
            } else if let yahooMail = yahooMail, UIApplication.shared.canOpenURL(yahooMail) {
                return yahooMail
            } else if let sparkUrl = sparkUrl, UIApplication.shared.canOpenURL(sparkUrl) {
                return sparkUrl
            }
    
            return defaultUrl
        }
    
    

    Info.plist

    LSApplicationQueriesSchemes
    
        googlegmail
        ms-outlook
        readdle-spark
        ymail
    
    

提交回复
热议问题