お疲れ様です。すぺきよです。
過去数回に引き続き、PHPとMicrosoft Graph APIの使い方です。
今回は、プログラムを使って指定のメールを任意のフォルダに移動させる方法です。
では、行ってみましょう。
この記事で何がわかるか
- プログラムを使って、Outlookに届いたメールを任意のフォルダに移動する方法がわかります。
各種バージョン
前回以前と同じですが、こちらにも書いておきます。
microsoft/microsoft-graph
2.1
vlucas/phpdotenv
5.6
前提条件
こちらも前回以前と同じです。
以下のコードを、GraphHelperクラスに追加するところまで行ってください。
public static function getUserClient()
{
return self::$userClient;
}
実際のコード
さっそく、実際のコードです。
以下の「moveMailToFolder」関数が今回紹介したいコードになります。
<?php
require_once realpath(__DIR__ . '/../composer/vendor/autoload.php');
require_once 'GraphHelper.php';
use Microsoft\Graph\Generated\Users\Item\Messages\Item\Move\MovePostRequestBody;
main();
exit(0);
function loadDotEnv()
{
// Load .env file
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
$dotenv->required(['CLIENT_ID', 'TENANT_ID', 'GRAPH_USER_SCOPES']);
}
function main()
{
loadDotEnv();
//初期化
GraphHelper::initializeGraphForUserAuth();
$mail_id = "XXXX****XXXX=";//移動させたいメールを一意に示すID
$folder_id = "FFFF****FFFF=";//移動先のフォルダID
moveMailTo($mail_id, $folder_id);
}
/**
* 指定したメールIDを指定したメールフォルダに移動する
*
* @param string $mail_id 移動したーメールを一意に示すID
* @param string $to_folder_id メールを移動させたいフォルダを一意に示すID
* @return void
*/
function moveMailToFolder(string $mail_id, string $to_folder_id)
{
//参考 : https://learn.microsoft.com/en-us/graph/api/message-move?view=graph-rest-1.0&tabs=php#example
$request_body = new MovePostRequestBody();
$request_body->setDestinationId($to_folder_id);
$result = GraphHelper::getUserClient()->me()->messages()->byMessageId($mail_id)->move()->post($request_body)->wait();
}
指定するメールを一意に示すIDについて
移動させたいメールを示す一意のIDは、moveMailToFolder関数の第一引数に指定します。
ここに指定するIDは以前書いた記事「[PHP+Microsoft Graph API]指定のフォルダ内にある未読メールのIDの一覧を読み取る」で取得できるメールIDを使うことができます。
処理する対象のメールIDは、自分でGraph Explorerなどで集めて処理することもできますが、メールID取得プログラムと組み合わせて使う方が一般的でしょう。
Graph Explorerで集めるくらいなら手作業でやった方がいいまでありますね。
移動先のフォルダのIDについて
どのフォルダに移動させるかは、「mailFolder resource type」の「Well-known folder names」に記載されているメールフォルダの名称を指定するか、以前書いた記事「[PHP+Microsoft Graph API]フォルダ内にある特定名のサブフォルダのIDを取得する」で取得できるフォルダを一意に示すIDを指定します。
まとめ
この記事を含めて4回分の記事の内容を応用すれば、Outlookの自動振り分けでできないような細かい条件でフォルダ分けができる様になったり、自動振り分けで振り分けができなかったメールを振り分けできる様になります。
また、「特定の送信者からのメールの本文をテキストファイルに書き出し、やりとりをまとめる。」「受信した認証メールの本文に書かれている認証用のワンタイムパスワードを読み取って自動テストを実装する」などの様な使い方もできるでしょう。