2017-10-09 128 views
0

我试图使用ZohoMail的API通过我的应用程序发送电子邮件。但它一直给我:在Laravel发送带有Guzzle的POST请求

“{错误码”: “INVALID_METHOD”}, “状态”:{ “代码”:404, “说明”: “无效的输入”}}

这里的链接到我试图拨打电话:https://www.zoho.com/mail/help/api/post-send-an-email.html#Request_Body

这里是我的功能:

public static function sendEmail ($AccountId, $AuthCode, $FromAddress, $ToAddress, $Subject, $Content){ 

    $client = new Client(); //GuzzleHttp\Client 
    $URI = 'http://mail.zoho.com/api/accounts/' . $AccountId . '/messages'; 
    $headers = ['Content-Type' => 'application/json', 'Authorization' => 'Zoho-authtoken ' . $AuthCode]; 
    $body = array('fromAddress' => $FromAddress, 'toAddress' => $ToAddress, 'subject' => $Subject, 'content' => $Content); 
    $Nbody = json_encode($body); 
    $response = $client->post($URI, $headers, $Nbody); 
    echo "DONE!"; 

} 

我试图改变我正在呼叫的方式,但它似乎并不像这就是问题所在。我已经在PostMan中测试过这个通话,并且它工作正常,所以我拨打电话的方式可能有问题。任何帮助将非常感激。

回答

0

经过cURL测试后,我发现URL已经'移动'到https而不是http。只使用http,电话正在邮递员中进行,但与Guzzle不同。我所做的唯一变化是使网址:

https://mail.zoho.com/api/accounts/

该网站列出了它只是HTTP和要求确实与邮差去。我已经使用相同的API在Guzzle中使用http进行了事先调用,并且他们已经完成了。如果有人能够帮助我理解为什么会发生这种情况,并且为什么在使用http的情况下使用http的具体调用在PostMan中而不是在Guzzle中,那会很好。

0

泰使用:的

$response = $client->post($URI, $headers, ['json' => $body]); 

代替

$Nbody = json_encode($body); 
$response = $client->post($URI, $headers, $Nbody); 
+0

尝试过,相同的错误代码。 – Siddiqui

+0

您是否已验证'$ body'中的数据是否有效?我的意思是电子邮件真的是电子邮件,而不是敌人的例子阵列 –

+0

我已经尝试邮递员这些参数。以下是我传递的信息:sendEmail(“MyAccountID”,“AuthCode”,“MyEmail”,“MyEmail”,“我喜欢Tacos”,“Ilike Tacos”); – Siddiqui

0

需要在同一阵列中创建数据和标题,并通过作为第二个参数。像这样使用。

$client = new Client(); 
$URI = 'http://mail.zoho.com/api/accounts/'.$AccountId.'/messages'; 
$params['headers'] = ['Content-Type' => 'application/json', 'Authorization' => 'Zoho-authtoken ' . $AuthCode]; 
$params['form_params'] = array('fromAddress' => $FromAddress, 'toAddress' => $ToAddress, 'subject' => $Subject, 'content' => $Content); 
$response = $client->post($URI, $params); 
echo "DONE!"; 

祝你好运!

+0

这里是我得到: 传递“body”请求选项作为数组发送POST请求已被弃用。请使用“form_params”请求选项发送应用程序/ x-www-form-urlencoded请求,或者发送multipart/form-data请求的“multipart”请求选项。 – Siddiqui

+0

是的。对不起,它已被弃用。将body更改为form_params并再次测试。 –

+0

没有骰子,与以前相同的错误代码。 – Siddiqui