0

我想用 Play 的 WS api 调用 Mailgun 服务。Mailgun 需要为身份验证发送 API 密钥,并且根据他们的“球衣”客户端示例,他们将此 API 密钥指定为客户端的“HTTPBasicAuthFilter”,如下所示:

public static ClientResponse SendSimpleMessage() {
       Client client = Client.create();
       client.addFilter(new HTTPBasicAuthFilter("api",
                       "key-3ax6xnjp29jd6fds4gc373sgvjxteol0"));
       WebResource webResource =
               client.resource("https://api.mailgun.net/v2/samples.mailgun.org" +
                               "/messages");
       MultivaluedMapImpl formData = new MultivaluedMapImpl();
       formData.add("from", "Excited User <me@samples.mailgun.org>");
       formData.add("to", "bar@example.com");
       formData.add("to", "baz@example.com");
       formData.add("subject", "Hello");
       formData.add("text", "Testing some Mailgun awesomness!");
       return webResource.type(MediaType.APPLICATION_FORM_URLENCODED).
               post(ClientResponse.class, formData);
}

如何使用 Play 的 WS api 做同样的事情?

4

2 回答 2

0

使用 WS withAuth:

WS.url(apiUrl).withAuth("api", apiKey, WSAuthScheme.BASIC).post(postMessage)
  • apiUrl 是您要发布到的 URL

  • apiKey 是 mailgun 的密钥

  • postMessage 是 String 到 String 的 Seq 的映射。在 Scala 中,它Map[String, Seq[String]]看起来如下所示:

    val postMessage = Map("from" -> Seq(message.from), "to" -> Seq(message.to), "subject" -> Seq(message.subject), "text" -> Seq(message.text), "html" -> Seq(message.html.toString()))
    
于 2015-01-29T20:51:46.160 回答
0

在浏览了 WS 类一段时间后,我想通了。这就是我所做的。

    public class MailHelper {

    public static Promise<WS.Response> send(EmailData emailData) {
        WSRequestHolder mailGun = WS.url("https://api.mailgun.net/v2/feedmerang.com/messages");
        mailGun.setAuth("api", "MAILGUN_API_KEY");
        mailGun.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        mailGun.setQueryParameter("from", emailData.from);
        mailGun.setQueryParameter("to", emailData.to);
        mailGun.setQueryParameter("subject", emailData.subject);
        mailGun.setQueryParameter("html", emailData.body);
        return mailGun.post("Sending Email");
    }
}
于 2014-03-23T04:30:14.990 回答