从iOS应用发送电子邮件

3

我正在使用Swift 3构建一个非常基础的iOS应用程序,它包含以下表单字段:

  • 名字
  • 姓氏
  • 电子邮件
  • 电话
  • 城市(选择器视图)
  • 描述

我想要通过电子邮件发送这些数据,使用电子邮件字段作为收件人,其余字段作为邮件正文。

我希望发送方始终是相同的。我有一个WordPress后端,不知道是否必须拥有端点来完成此操作(也许可以使用PHP发送邮件,而不是直接从应用程序中发送)。

我尝试使用MFMailComposeViewController,但这会打开模态框以发送电子邮件,并要求在设备上配置电子邮件帐户。

有什么想法吗?


你需要一个 Web 服务端点来完成这个任务,否则你必须在 iPhone 中配置电子邮件帐户并使用它。 - Shabir jan
你需要设计一个服务,该服务从iOS获取数据,并在后端使用任何Mailchimp服务通过相同的发件人发送邮件。 - CodeChanger
2个回答

2
您需要一个服务来发送电子邮件,可以是自己的 WebService,也可以选择许多可用的服务之一,比如sendgrid.com,它非常容易在您的 Swift 应用程序中实现,并且有免费的 40K 电子邮件限制。
这里是一个使用 sendgrid.com 服务的 Swift 3 示例:
注意:在使用此方法之前,请在sendgrid.com注册获取 api_user 和 api_key 值。
func sendEmail(_ email: String, recipientName: String, subject: String, text: String) {
    let params = [
        "api_user": ENTER_YOUR_API_USER,
        "api_key": HERE_YOU_ENTER_API_KEY,
        "to": email,
        "toname": recipientName,
        "subject": subject,
        "html": text,
        "from": "noreply@example.com"
    ]
    var parts: [String] = []
    for (k, v) in params {
        let key = String(describing: k).addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)
        let value = String(describing: v).addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)
        parts.append(String(format: "%@=%@", key!, value!))
    }
    guard let url = URL(string: String(format: "%@?%@", "https://api.sendgrid.com/api/mail.send.json", parts.joined(separator: "&"))) else { return }

    let session = URLSession(configuration: .default, delegate: nil, delegateQueue: nil)
    let task = session.dataTask(with: url, completionHandler: {
        (data, response, error) in
        if (error == nil) {
            print("Email delivered!")
        } else {
            print("Email could not be delivered!")
        }
    })
    task.resume()
    session.finishTasksAndInvalidate()
}

使用方法-1(纯文本):
sendEmail("recipient@email.com", recipientName: "Recipient Name", subject: "PlainText", text: "This is a PlainText test email.")

用法二(HTML):
sendEmail("recipient@email.com", recipientName: "", subject: "HTML Test", text: "<html><div>This is a <b>HTML</b> test email.</div></html>")

在SendGrid中,我该在哪里找到API_USER? - user10166622
API_USER 将是您的用户名,API_KEY 是您的密码,请查看 API v2 文档 https://sendgrid.com/docs/API_Reference/Web_API/mail.html。 - AamirR
似乎这个不起作用。代码已经复制,即使显示“电子邮件已发送”,但没有电子邮件被送出。 - dub

1
使用Web服务将数据发送到Web服务器,然后从那里向收件人发送电子邮件。Web服务器可以在不通知(移动应用程序)用户的情况下发送电子邮件。您可以在Web服务器上设置一个帐户,该帐户可以从单个帐户发送所有电子邮件。在您的情况下,使用Web服务从Web服务器发送电子邮件是最好的选择。
iOS不允许在不使用MFMailComposeViewController的情况下发送电子邮件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接