2016-12-20 14 views
0

https://msdn.microsoft.com/office/office365/APi/mail-rest-operations#SendMessageOnTheFlyの添付ファイルを添付した電子メールをPHPで送信しようとしています。これまでのところ、私は添付ファイルのない普通の電子メールを送ることができます。しかし、どのように私は添付ファイルでそれを行うのですか?電子メールを送信するには、Webサーバー上のファイルをどのように添付しますか?

ドキュメントによれば、これは、応答がどのように見えるかされています

POST https://outlook.office.com/api/v2.0/me/sendmail 
{ 
    "Message": { 
    "Subject": "Meet for lunch?", 
    "Body": { 
     "ContentType": "Text", 
     "Content": "The new cafeteria is open." 
    }, 
    "ToRecipients": [ 
     { 
     "EmailAddress": { 
      "Address": "[email protected]" 
     } 
     } 
    ], 
    "Attachments": [ 
     { 
     "@odata.type": "#Microsoft.OutlookServices.FileAttachment", 
     "Name": "menu.txt", 
     "ContentBytes": "bWFjIGFuZCBjaGVlc2UgdG9kYXk=" 
     } 
    ] 
    }, 
    "SaveToSentItems": "false" 
} 

私は何を持っていることはこれです:

public static function sendMessage($access_token, $user_email, $subject, $Content, $email) 
{ 
    $url = "https://example.com/upload.txt"; 
    $base64 = base64_encode(file_get_contents($url)); 
    $arr= array(
     "Message" =>array(
      'Subject' => $subject, 
      "Body"=>array(
       "ContentType"=>"HTML", 
       "Content"=>$Content, 
      ), 
     "ToRecipients"=>array(
      array(
       "EmailAddress"=>array(
        "Address"=>$email, 
       ) 
      ), 
     ), 
     "Attachments"=> array(
      array(
       "@odata.type"=> "#Microsoft.OutlookServices.FileAttachment", 
       "Name" => "upload.txt", 
       "ContentLocation"=> $url, 
       "ContentBytes"=> $base64, 
       "ContentType" => "text/plain" 
      ) 
     ) 
    )); 

    $json=json_encode($arr, true); 
    $getMessagesUrl = self::$outlookApiUrl."/me/sendmail"; 

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

、その後、私は外でメソッドを呼び出す:

var_dump(OutlookService::sendMessage($tokens['access_token'], $_SESSION['user_email'], 'subject', 'body', '[email protected]')); 

私はこれと一緒に行くことについてはうんざりです。これは動作していないと私に400エラーを与える。私は400のエラーを認識していますが、何が原因か分かりません。

ここで何をしていますか?適切なフォーマットは何ですか?あなたの例での作業

+1

あなたのリクエストをhttp://oauthplay.azurewebsites.net/で試してみることをお勧めします。迅速に状況を調整し、効果を確認するのに役立ちます。私はあなたのJSONペイロード生成コードを実行し、結果のJSONをサンドボックスに入れました。うまくいきましたので、あなたのファイルに関するデータや何かをどのように送信するのかが分かります。 –

+1

400個のエラーには、しばしばエラー情報を含む応答本体があることに注意してください。それはここでヒントを提供するかもしれません。 –

+0

@JasonJohnstonあなたの2番目のコメントは私のヒントでした。 400エラーにはエラーに関する情報がありました。なんらかの理由で、私は実際のコードでJson配列に 'SavetoSentItems'を置くのを間違えました。何らかの理由で正しい場所にあると仮定しました。手伝ってくれてどうもありがとう。 –

答えて

1

、私の目にpoped最初の事はあなたも例のように

をあなたの添付ファイルを設定しなかったということでしたドキュメントには、SavetoSentItemsを指定することも追加されるべきであるので、必要とされる

public static function sendMessage($access_token, $user_email, $subject, $Content, $email) 
{ 
    $url = "https://example.com/upload.txt"; 
    $base64 = base64_encode(file_get_contents($url)); 
    $arr= array(
     "Message" =>array(
      'Subject' => $subject, 
      "Body"=>array(
       "ContentType"=>"HTML", 
       "Content"=>$Content, 
      ), 
     "ToRecipients"=>array(
      array(
       "EmailAddress"=>array(
        "Address"=>$email, 
       ) 
      ), 
     ), 
     "Attachments"=> array(
      array(
       "@odata.type"=> "#Microsoft.OutlookServices.FileAttachment", 
       "Name" => "upload.txt", 
       "ContentLocation"=> $url, 
       "ContentBytes"=> $base64, 
       "ContentType" => "text/plain" 
      ) 
     ) 
    ), 
    "SaveToSentItems" => "false" 
    ); 

    $json=json_encode($arr, true); 
    $getMessagesUrl = self::$outlookApiUrl."/me/sendmail"; 

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

編集のみ変更された行を持つ: ここ

はサンプルに要求されるようにJSONをプリントアウトする必要があります修正版で

"Attachments"=> array(
     array(
      "@odata.type"=> "#Microsoft.OutlookServices.FileAttachment", 
      "Name" => "upload.txt", 
      "ContentLocation"=> $url, 
      "ContentBytes"=> $base64, 
      "ContentType" => "text/plain" 
     ) 
    ) 
+0

ドキュメントから: 'SaveToSentItems'パラメータは、falseの場合にのみ必要です**。私はあなたがそれ以外の何かを変更したとは思わない。 'SaveToSentItems'を指定しても動作しません。 –

+0

私は変更された行を表示するために投稿を編集しました –

+0

実際これはそれでした。あなたが私の問題を修正したことを指摘した間違いを除けば、私はJainを台無しにしたSaveToSentItemsを入れようとしていたとき、私は間違いを犯しました。ありがとう。 –

関連する問題