如何仅从客户端使用 Mandrillapp API?

Posted

技术标签:

【中文标题】如何仅从客户端使用 Mandrillapp API?【英文标题】:How to use Mandrillapp API from only client side? 【发布时间】:2013-10-15 05:36:57 【问题描述】:

我最近开始使用 Mandrill 进行客户端电子邮件发送。客户端的网站没有使用任何服务器端程序,所以每个逻辑都必须在客户端。

我现在在 Chrome、FireFox、IE10 中工作,但在 LTE IE9 和 android

m = new mandrill.Mandrill("APIKEY", true)
m.call "messages/send", 
    message:
        html: createHtml()
        subject: "subj"
        from_email: "sender@example.dk",
        from_name: "From",
        to: [
            email: "user@example.com"
            name: "User"
        ]
, (()->
    console.log "success"
    @
), ()->
    console.log "error"
    @

在这段代码中,我使用的是JS Mandrill API wrapper,但我使用 jQuery ajax POST-ing 进行了尝试,得到了相同的结果。

jQuery 版本:

$.ajax
    type: "POST"
    url: "https://mandrillapp.com/api/1.0/messages/send.json"
    data:
        key: "APIKEY"
        message:
            html: createHtml()
            subject: "subject"
            from_email: "sender@example.dk",
            from_name: "From",
            to: [
                email: "user@example.com"
                name: "User"
            ]

谁能帮帮我,如何修复对 Mandrill 的跨域 API 调用?

【问题讨论】:

【参考方案1】:

您的代码似乎有效,因此您可能遇到了浏览器兼容性问题。

Mandrill API 包装器在底层使用原生 XMLHttpRequest,因此它可能与旧版浏览器不兼容。如果您需要支持 IEhttp://jquery.com/browser-support/)。

我在 JSBin 上发布了一个工作示例:http://jsbin.com/UyehELo/2/edit。仅测试了 ios,因为不幸的是我无法访问 IE 或 Android。该示例还允许您在无法轻松访问控制台的移动设备上查看 API 响应。

PS。请记住,在客户端使用 mandrill 通常不是最好的主意,因为您会公开您的 API 密钥,以便任何人都可以获取它并代表您发送电子邮件。

【讨论】:

谢谢,我回家后会检查的:) 顺便说一句。我使用 jQuery 1.10.2,所以这应该不是问题。使用 Mandrill,您可以指定允许发送电子邮件的 IP,因此“黑客”只能从同一站点使用它

以上是关于如何仅从客户端使用 Mandrillapp API?的主要内容,如果未能解决你的问题,请参考以下文章

如何保护仅从前端使用的 API(Ajax 调用)

使用 axios.get 方法加载页面时,如何仅从 API 获取数据一次?

发送请求的 Mandrill API 错误

如何仅从 google adword api 整合地理位置?

如何仅从 React 中的 API 获取第一个数据?

如何在 ASP.NET Core Web API 中使用 LINQ 仅从数据库中获取最新的 id?