Outlook Rest Api发送邮件请求返回状态400

我尝试使用Outlook Rest Api和Curl从已签名的Outlook帐户发送电子邮件,然后出现此错误

Request returned status 400

这是我发送邮件的代码

private static $outlookApiUrl = "https://outlook.office.com/api/v2.0";

  public static function sendMail ($access_token,$user_email,$subject,$Content,$email){

    $arr= array(
        "Message" =>array(
       'Subject' => $subject,
      "Body"=>array(
          "Content-Type"=>"HTML",
          "Content"=>$Content,
        ),
      "ToRecipients"=>array(
        array(
            "EmailAddress"=>array(
                "Address"=>$email,
              )
          ),
        ),
    ));

    $json=json_encode($arr, true);

     $getMessagesUrl = self::$outlookApiUrl."/me/sendmail";


    return self::makeApiCall($access_token, $user_email, "POST",$getMessageUrl,$json);

 } 

这是CURL的代码

public static function makeApiCall($access_token, $user_email, $method, $url, $payload = NULL) {
      // Generate the list of headers to always send.
    $headers = array(
        "User-Agent: php-tutorial/1.0",         
        "Authorization: Bearer ".$access_token, 
        "Accept: application/json",             
        "client-request-id: ".self::makeGuid(), 
        "return-client-request-id: true", 
        "X-AnchorMailbox: ".$user_email
        );

    $curl = curl_init($url);

    switch(strtoupper($method)) {
      case "POST":
      error_log("Doing POST");
      $headers[] = "Content-Type: application/json";
      curl_setopt($curl, CURLOPT_POST, true);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
      break;
      default:
      error_log("INVALID METHOD: ".$method);
      exit;
    }

    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    $response = curl_exec($curl);
    error_log("curl_exec done.");

    $curl_errno = curl_errno($curl);
    $curl_err = curl_error($curl);
    if ($curl_errno) {
       //PRINT ERROR
    }
    else {
      error_log("Response: ".$response);
      curl_close($curl);
      return json_decode($response, true);
    }
  }

那么我在主页上调用sendMail方法

  $send=OutlookService::sendMail($_SESSION["access_token"], $_SESSION["user_email"],"testing","<html><body>testing email.</body></html>","example@gmail.com");

    echo var_dump($send);

我可以知道我的代码有什么问题吗? 为什么我会得到这个错误?


属性'Content-Type'在'Microsoft.OutlookServices.ItemBody'类型上不存在,它应该是'ContentType'。 有关详细信息,请参阅此文档:https://msdn.microsoft.com/office/office365/api/complex-types-for-mail-contacts-calendar#ItemBody

如果您想使用REST API发送邮件,则还需要在Azure AD中为O365 Exchange Online发送“作为用户的邮件”权限。 您也可以参考下面的文章获取更多详细信息:https://dev.outlook.com/restapi/tutorial/php

链接地址: http://www.djcxy.com/p/69339.html

上一篇: Outlook Rest Api sending Mail Request returned status 400

下一篇: WP: Header warning after sending email