MailGun 401 响应被禁止,我哪里出错了
MailGun 401 response forbidden where am i going wrong
我有 2 个用于 mailgun 的脚本 api 我写的那个 returns 401 forbidden 我在网上找到的那个完美无缺 我用相同的 domain/api 键尝试了两个
这个可以从 github gist
复制粘贴
这个很有魅力
<?php
function send_mailgun($email, $body) {
$domain = "SendingDomain";
$config = array();
$config['api_key'] = "key-mailgunkey";
$config['api_url'] = "https://api.mailgun.net/v3/" . $domain . "/messages";
$message = array();
$message['from'] = "Mailgun <user@SendingDomain>";
$message['to'] = $email;
$message['h:Reply-To'] = "<user@SendingDomain>";
$message['subject'] = "Eye-Catching Subject Line";
$message['html'] = $body;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $config['api_url']);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, "api:{$config['api_key']}");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $message);
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
echo send_mailgun("personal@domain.com", "Body of the message here!");
?>
这个不行
<?php
$to = "<personal@domain.com>";
#$bcc = null;
$replyTo = "<dinner@sendingdoamin>";
#$tag = "tag";
$subject = "subject";
#$text = "HI Test \n\r.";
$html ="<h1>hi</h1>";
$fromUser ='hi <user@';
$domain = 'domain';
#$filePath=!empty($img)?curl_file_create($img):null;
$dataSubmit=array(
'from' => $fromUser.$domain.'>',
'to' => $to,
#'bcc' => $bcc,
#'o:tag' => $tag,
#'text' => $text,
'h:Reply-To' => $replyTo,
'subject' => $subject,
'html' => $html,
#'inline[1]' => $filePath,
#'attachment[1]' => $filePath
);
echo '<pre>';
print_r($dataSubmit);
$service_url = 'https://api.mailgun.net/v3/'.$domain.'/messages';
var_dump($service_url);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL,$service_url);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, 'key-mailgunkey');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 45);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $dataSubmit);
$result = curl_exec($curl);
$info = curl_getinfo($curl);
curl_close($curl);
var_dump($result);
var_dump($info);
?>
如您所见,我注释掉了我发现的差异,确保它们具有相同的 curl 选项,并且一个有效,另一个无效。
这些你忘记的小事会让你抓狂。
curl_setopt($curl, CURLOPT_USERPWD, 'key-mailgunkey');
应该加上"api:"前缀如下
curl_setopt($curl, CURLOPT_USERPWD, 'api:key-mailgunkey');
这就是压垮骆驼的区别
我有 2 个用于 mailgun 的脚本 api 我写的那个 returns 401 forbidden 我在网上找到的那个完美无缺 我用相同的 domain/api 键尝试了两个 这个可以从 github gist
复制粘贴这个很有魅力
<?php
function send_mailgun($email, $body) {
$domain = "SendingDomain";
$config = array();
$config['api_key'] = "key-mailgunkey";
$config['api_url'] = "https://api.mailgun.net/v3/" . $domain . "/messages";
$message = array();
$message['from'] = "Mailgun <user@SendingDomain>";
$message['to'] = $email;
$message['h:Reply-To'] = "<user@SendingDomain>";
$message['subject'] = "Eye-Catching Subject Line";
$message['html'] = $body;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $config['api_url']);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, "api:{$config['api_key']}");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $message);
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
echo send_mailgun("personal@domain.com", "Body of the message here!");
?>
这个不行
<?php
$to = "<personal@domain.com>";
#$bcc = null;
$replyTo = "<dinner@sendingdoamin>";
#$tag = "tag";
$subject = "subject";
#$text = "HI Test \n\r.";
$html ="<h1>hi</h1>";
$fromUser ='hi <user@';
$domain = 'domain';
#$filePath=!empty($img)?curl_file_create($img):null;
$dataSubmit=array(
'from' => $fromUser.$domain.'>',
'to' => $to,
#'bcc' => $bcc,
#'o:tag' => $tag,
#'text' => $text,
'h:Reply-To' => $replyTo,
'subject' => $subject,
'html' => $html,
#'inline[1]' => $filePath,
#'attachment[1]' => $filePath
);
echo '<pre>';
print_r($dataSubmit);
$service_url = 'https://api.mailgun.net/v3/'.$domain.'/messages';
var_dump($service_url);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL,$service_url);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, 'key-mailgunkey');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 45);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $dataSubmit);
$result = curl_exec($curl);
$info = curl_getinfo($curl);
curl_close($curl);
var_dump($result);
var_dump($info);
?>
如您所见,我注释掉了我发现的差异,确保它们具有相同的 curl 选项,并且一个有效,另一个无效。
这些你忘记的小事会让你抓狂。
curl_setopt($curl, CURLOPT_USERPWD, 'key-mailgunkey');
应该加上"api:"前缀如下
curl_setopt($curl, CURLOPT_USERPWD, 'api:key-mailgunkey');
这就是压垮骆驼的区别