To get oauth access token & other information used in this code snippet visit:
http://pritomkumar.blogspot.com/2016/11/write-php-app-to-get-outlook-office-365.html
http://pritomkumar.blogspot.com/2016/11/write-php-app-to-get-outlook-office-365.html
Code snippet to send email using php via Office 365 account & oauth
<?php session_start(); init(); if(isset($_POST["send"])) { $attachments = array(); for($i = 0; $i < 6; $i++) { if(strlen(trim($_FILES["files"]["name"][$i])) > 0) { $content = base64_encode(file_get_contents($_FILES["files"]["tmp_name"][$i])); $attachment = array( "@odata.type" => "#Microsoft.OutlookServices.FileAttachment", "Name" => $_FILES["files"]["name"][$i], "ContentBytes" => $content ); array_push($attachments, $attachment); } } $to = array(); $toFromForm = explode(";", $_POST["to"]); foreach ($toFromForm as $eachTo) { if(strlen(trim($eachTo)) > 0) { $thisTo = array( "EmailAddress" => array( "Address" => trim($eachTo) ) ); array_push($to, $thisTo); } } if (count($to) == 0) { die("Need email address to send email"); } $request = array( "Message" => array( "Subject" =>$_POST["subject"], "ToRecipients" => $to, "Attachments" => $attachments, "Body" => array( "ContentType" => "HTML", "Content" => utf8_encode($_POST["message"]) ) ) ); $request = json_encode($request); $headers = array( "User-Agent: php-tutorial/1.0", "Authorization: Bearer ".$_SESSION["access_token"], "Accept: application/json", "Content-Type: application/json", "Content-Length: ". strlen($request) ); $response = runCurl($_SESSION["api_url"], $request, $headers); echo "<pre>"; print_r($response); echo "</pre>"; /* if $response["code"] == 202 then mail sent successfully */ } else { ?> <form method="post" enctype="multipart/form-data" accept-charset="ISO-8859-1"> <table style="width: 1000px;"> <tr> <td style="width: 150px;">To</td> <td style="width: 850px;"><input type="text" name="to" required value="" style="width: 100%;"/></td> </tr> <tr> <td>Subject</td> <td><input type="text" name="subject" required value="Some sample subject on <?php echo date("d/m/Y H:i:s"); ?>" style="width: 100%;"/></td> </tr> <tr> <td>Files</td> <td> <input type="file" name="files[]"/> <input type="file" name="files[]"/> <input type="file" name="files[]"/> <input type="file" name="files[]"/> <input type="file" name="files[]"/> <input type="file" name="files[]"/> </td> </tr> <tr> <td style="vertical-align: top;">Message</td> <td><textarea name="message" required style="width: 100%; height: 600px;"></textarea></td> </tr> <tr> <td></td> <td><input type="submit" name="send" value="Send"/></td> </tr> </table> </form> <?php } function init() { $_SESSION["scopes"] = array("offline_access", "openid", "https://outlook.office.com/mail.send"); $_SESSION["api_url"] = "https://outlook.office.com/api/v2.0/me/sendmail"; $_SESSION["access_token"] = "eyJ0eXAiOiJKV1QidfsdfsdfsdfSUzI1NiIsIng1dCI6IlJyUXF1OXJ5ZEJWUldtY29jdVhVYjIwSEdSTSIsImtpZCI6IlJyUXF1OXJ5ZEJWUldtY29jdVhVYjIwSEdSTSJ9.eyJhdWQiOiJodHRwczovL291dGxvb2sub2ZmaWNlLmNvbSIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzdkOTAzZjM5LTkxZGYtNGVmMS04ZDY0LTcxNDMwOTlhMTVmMC8iLCJpYXQiOjE0Nzk5NjE2NjAsIm5iZiI6MTQ3OTk2MTY2MCwiZXhwIjoxNDc5OTY1NTYwLCJhY3IiOiIxIiwiYW1yIjpbInB3ZCJdLCJhcHBpZCI6ImRhOGE1NGQ4LTg2YjUtNDE5Ni05ODFlLWUzMWVmYTNmM2Q1OSIsImFwcGlkYWNyIjoiMSIsImZhbWlseV9uYW1lIjoiQmlsbCIsImdpdmVuX25hbWUiOiJBdXRvIiwiaXBhZGRyIjoiMTAzLjQuMTQ2LjE4NiIsIm5hbWUiOiJBdXRvIEJpbGwiLCJvaWQiOiI5NGM1NTZlMy1jYmM1LTQxMTItYWJhZi0yMmUxZDVkNWU2ZjQiLCJwbGF0ZiI6IjMiLCJwdWlkIjoiMTAwMzAwMDA5QzcyRTlGRiIsInNjcCI6Ik1haWwuUmVhZCBNYWlsLlNlbmQiLCJzdWIiOiJ4SF9JNzl0bFRwbGI0WG41RktKSHZ6VTBkU2pJOUNBaDVCaElWTnljMTBNIiwidGlkIjoiN2Q5MDNmMzktOTFkZi00ZWYxLThkNjQtNzE0MzA5OWExNWYwIiwidW5pcXVlX25hbWUiOiJhdXRvYmlsbEB3ZWJhbGl2ZS5jb20uYXUiLCJ1cG4iOiJhdXRvYmlsbEB3ZWJhbGl2ZS5jb20uYXUiLCJ2ZXIiOiIxLjAifQ.a9RnBzxlChE8-_kfTcYuQy2lbpVsZOKIpn-fmSjePi5oiX4aPL-SZ6xL9rwdjL4SWeOyiDLHmVs3jhEbHkEIZhD4aqzbvqTovQOUluyHOAHVjQJyRc6AV6g-WP4jmbCDVOKFvvq9llZ13Srihvua1wFCM5z-nDZsIVY0LzTeew8-ZTM5trVEG9QtyR_UmlgLgwbIOl9PWz0MvFcCLbFiZQ8-1zGje8oL_fbm8vFtRdP_bNS6OzyatupFvAQRM4RhFQYHhuxKCVzI35JoEWfhHtUZAReTYwRfBULEJuT_CIkC0G7DyWJR1IRVnaYSWagvj93tOZtIaU-OMSsovmYEtg"; } function runCurl($url, $post = null, $headers = null) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, $post == null ? 0 : 1); if($post != null) { curl_setopt($ch, CURLOPT_POSTFIELDS, $post); } curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); if($headers != null) { curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); } $response = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if($http_code >= 400) { echo "Error executing request to Office365 api with error code=$http_code<br/><br/>\n\n"; echo "<pre>"; print_r($response); echo "</pre>"; die(); } return array("code" => $http_code, "response" => $response); } ?>
Thank you for the code excerpt. It works very well and has saved me a lot of time. :)
ReplyDeleteThis comment has been removed by the author.
ReplyDeleteThanks, This code made my day! This code is even relevant and working in Feb2020.
ReplyDeleteaccess_token itshould be dynamic
ReplyDeleteaccess_token itshould be dynamic
ReplyDeletegreat article, it would be helpful if you share step by step
ReplyDeleteDggfccccc gvvb
ReplyDelete