使用mailTo

时间:2017-02-28 19:26:21

标签: ios email swift3

我有一个TableView,它选择和取消选择客户端,以便建立一个电子邮件地址数组,然后可以发送组邮件。

然后,我希望用户能够通过按钮打开Apple的默认邮件应用程序,并在前面构建的列表中找到已发送给成员的消息。

我可以通过以下方式使用一个地址:

let email = client.value
        if let url = URL(string: "mailto:\(email)") {
            UIApplication.shared.open(url)
        }

我还建立了一串逗号分隔的电子邮件,如果用户只想要这个列表就可以复制到剪贴板,在手机上使用不同的电子邮件应用程序或其他任何内容,只需给他们更多选项。

for client in clientsToEmail {
            emails.append(client.value)
        }

emailsCommaSeperated = emails.joined(separator: ", ")

这样可以正常工作,但是,我不能将这个以逗号分隔的列表分配给“mailto :()”,好像这个方法会检查有效的电子邮件xxx@xxx.xx。以逗号分隔的电子邮件列表显然不是。

还有其他方法可以做到这一点,任何人都知道吗?某种方式打开邮件应用程序,从另一个应用程序,发送电子邮件地址列表,并创建一个发送到所有这些地址的新电子邮件?

任何帮助非常感谢!

4 个答案:

答案 0 :(得分:1)

你必须对这些逗号进行编码。

let recipients = ["percent@encode.net","those@commas.com","andbe@well.org"]
UIApplication.shared.open(URL(string: "mailto:\(recipients.joined(separator: "%2C"))")!)

%2C是根据https://www.w3schools.com/Tags/ref_urlencode.asp

的逗号的百分比编码

答案 1 :(得分:0)

您可以按照herehere中的说明尝试这样mailto:foo@example.com?cc=bar@example.com&subject=Greetings%20from%20Cupertino!&body=Wish%20you%20were%20here!,但我不认为您可以通过一次点击使用mailTo()向多个用户发送邮件。尝试添加cc

答案 2 :(得分:0)

我从多种来源在线阅读,除非您将其他电子邮件添加为抄送,否则您无法向mailto发送一封以上的电子邮件。因此mailto格式应如下所示:

“ mailto:email1@email1.com?cc = email2 @ email.com,email3 @ email.com”

回到您的示例,首先应删除逗号分隔符中的所有空格,并且应分别存储第一封电子邮件,然后再以我上面提到的格式将两者合并。

因此,在您的情况下,代码应如下所示:

var firstEmail = ""
var emails: [String] = []
for client in clientsToEmail {
        if firstEmail == "" {
          firstEmail = client.value 
        } else {
          emails.append(client.value)
        }
    } 
let ccEmails = emails.joined(separator: ",")
let fomattedRecipents = firstEmail + "?cc=" + ccEmails
let url = URL(string: "mailto:\(fomattedRecipents)")!

if #available(iOS 10, *) {

   UIApplication.shared.open(url)
} else {

   UIApplication.shared.openURL(url)
}

答案 3 :(得分:0)

我今天刚刚在 iOS 14 上尝试过这个(不确定它是否适用于以前的版本),您可以简单地使用不带空格的逗号分隔电子邮件地址。

Swift 代码:

let mailToRecipients = ["bob@google.org", "test@example.com"].joined(separator: ",")
guard let mailtoUrl = URL(string: "mailto:\(mailToRecipients)") else { return }
UIApplication.shared.open(mailtoUrl)