I am trying to send email following the docs with attachment on https://msdn.microsoft.com/office/office365/APi/mail-rest-operations#SendMessageOnTheFly with PHP. So far I can send a plain email with no attachments. But how do I do it with attachments?
According to docs this is what the response should look like:
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"
}
What I have is this:
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);
}
and then I call the method outside:
var_dump(OutlookService::sendMessage($tokens['access_token'], $_SESSION['user_email'], 'subject', 'body', '[email protected]'));
I am clueless about going with this. This is not working and giving me a 400 error. I am aware of the 400 error but don't know what could be causing it.
What should I be doing here? What's the right format?
Working with your example, the first thing that poped in my eyes was that you did not set you attachments as in the example
also the documentation specifies SavetoSentItems is required, so that should be added also
Here is the modified version that should print out the json as requested in the sample :
edit with only changed lines :