无法使用邮箱API和Mojo :: UserAgent

时间:2017-02-24 15:27:11

标签: perl mailgun mojo-useragent

根据API文档(https://documentation.mailgun.com/api-sending.html)提供了所有相关参数,但它给了我

  

400回复:BAD REQUEST

这是我的代码:

#!/usr/bin/perl

use Mojo::UserAgent;
use MIME::Base64;
use JSON qw(to_json);

use strict;
use warnings;
use v5.10;

my $ua = Mojo::UserAgent->new;
my $endpoint = 'https://api.mailgun.net/v3/sandbox2ad5b70fd744416ea7ff3d5422YYYYYY.mailgun.org/messages';

my $key = 'key-d3d8d350d4ef9c92349df62208XXXXXX';
my $headers = { 'Authorization' => 'Basic ' . encode_base64('api:' . $key)  };
my $params = {
    'to' => 'abc@domain.ru',
    'subject' => 'testing',
    'text' => 'some text',
    'from' => 'postmaster@sandbox2ad5b70fd744416ea7ff3d5422YYYYYY.mailgun.org'
};

my $tx = $ua->post($endpoint, $headers, json => $params);
my $res = $tx->success;
if ($res) {
    say $res->body;
} else {
    my $err = $tx->error;
    die "$err->{code} response: $err->{message}" if $err->{code};
    die "Connection error: $err->{message}";
}

我的Mojo版本如下:

  

CORE

     

Perl(v5.22.1,linux)

     

Mojolicious(7.26,Donut)

     

OPTIONAL

     

EV 4.0+(4.22)

     

IO :: Socket :: Socks 0.64+(0.67)

     

IO :: Socket :: SSL 1.94+(2.024)

     

Net :: DNS :: Native 0.15+(n / a)

我使用LWP::UserAgent编写了此脚本的另一个版本,它运行正常。

是否有一些Mojo :: UserAgent专家可能知道脚本出了什么问题?

已更新

这是我的LWP::UserAgent版本没有问题:

my ($key, $domain, $from, $from_name, $to, $subject, $comments) = @_;

my $url = 'https://api.mailgun.net/v3';
$url = $url . '/' . $domain . '/messages';  

my $ua = LWP::UserAgent->new;
$ua->default_header('Authorization' => 'Basic ' . encode_base64('api:' . $key));

my $data = {
      to => $to,
      subject => $subject,
      text => $comments,
      from =>  $from_name . '<' . $from . '>'        
};

my $r = $ua->post($url, Content => $data);
my $rc = $r->code; 
if ($rc == 200) {
    my $hash = from_json($r->decoded_content);
    say $hash->{id};
    say $hash->{message};       
} else {
    return { error => $rc };
}

于2017年2月25日更新

我对localhost:9000使用了虚假请求。以下是我使用nc -l 9000追踪的内容:

POST / HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Authorization: Basic YXBpOmtleS1kM2Q4ZDM1MGQ0ZWY5YzkyMzQ5ZGY2MjIwOGRXXXXXX== 
Host: localhost:9000
User-Agent: libwww-perl/6.15
Content-Length: 144
Content-Type: application/x-www-form-urlencoded

text=%3Chtml%3E%3Cbody%3E%3Cp%3Etest%3C%2Fp%3E%3C%2Fbody%3E%3C%2Fhtml%3E&from=John%3Clala%40ya.ru%3E&to=zozoba29a%40yandex.ru&subject=My+Subject

POST / HTTP/1.1
Host: localhost:9000
Accept-Encoding: gzip
Content-Type: application/x-www-form-urlencoded
Authorization: Basic YXBpOmtleS1kM2Q4ZDM1MGQ0ZWY5YzkyMzQ5ZGY2MjIwOGRjXXXXXX==

Content-Length: 144
User-Agent: Mojolicious (Perl)

from=John%3Clala%40ya.ru%3E&subject=My+Subject&text=%3Chtml%3E%3Cbody%3E%3Cp%3Etest%3C%2Fp%3E%3C%2Fbody%3E%3C%2Fhtml%3E&to=zozoba29a%40yandex.ru

0 个答案:

没有答案