ホームページ  >  に質問  >  本文

Azure 認証と PHP エンコーディングを使用してメールをスクレイピングする方法

<p>メール ID から受信トレイメールを取得するアプリケーションを PHP で作成しましたが、正常に動作しています。これはベーシック認証アプリケーションです。最近基本認証が停止されたため、新しい認証を取得するために Azure にアカウントを作成し、それに基づいてメールをスクレイピングしたいと考えています。 </p> <p>アプリケーション ID とシークレット ID を使用してコードを作成しました。 ページを開くとログインページにリダイレクトされますが、それが問題です。 自動的にログインしてメールを取得するために必要です。 これは cron プロセスであるため、ログインを入力する必要があるたびに電子メールを取得することは解決策ではありません。 </p> <p>https://xxxx.co/projects/test.php?action=login このリンクを開くと、ログインを求められます。アプリケーション ID、シークレット ID、テナント ID などのすべてのデータはすでに配置されているため、これは望ましくありません。 </p> <p>すでに Microsoft にログインしている場合、ログインは要求されず、電子メール経由でページが取得されます。しかし、シークレットモードで開くと、ログインを求められます。我们どのように删除它并直接获取電子邮件</p> <pre class="brush:php;toolbar:false;"><?php $appid = "xxxxx"; $tennantid = "xxxxx"; $secret = "xxxxxx"; $login_url ="https://login.microsoftonline.com/".$tennantid."/oauth2/v2.0/authorize"; セッション開始(); $_SESSION['状態']=セッションID(); echo "

MS OAuth2.0 デモ


"; if (isset ($_SESSION['msatg'])){ echo "

認証済み ".$_SESSION["uname"]." </h2><br> "; echo '<p><a href="?action=logout">ログアウト</a></p>'; } //セッションの場合は終了 else echo '<h2><p><a href="?action=login">ログイン</a>できます。 Microsoft</p></h2>'; if ($_GET['アクション'] == 'ログイン'){ $params = 配列 ('client_id' =>$appid, 'redirect_uri' =>'https://xxx.co/projects/test.php', 'response_type' =>'トークン', 'スコープ' =>'https://graph.microsoft.com/User.Read', '状態' =>$_SESSION['状態']); header ('場所: '.$login_url.'?'.http_build_query ($params)); } エコー ' <スクリプト> URL = window.location.href; i=url.indexOf("#"); if(i>0) { url=url.replace("#","?"); window.location.href=url;} </スクリプト> '; if (array_key_exists ('access_token', $_GET)) { $_SESSION['t'] = $_GET['access_token']; $t = $_SESSION['t']; $ch =curl_init(); curl_setopt ($ch, CURLOPT_HTTPHEADER, array ('Authorization: Bearer '.$t, 'コンテンツタイプ: application/json')); curl_setopt ($ch, CURLOPT_URL, "https://graph.microsoft.com/v1.0/me/"); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); $rez = json_decode (curl_exec ($ch), 1); if (array_key_exists ('error', $rez)){ var_dump ($rez['error']); 死ぬ(); } それ以外 { $_SESSION['msatg'] = 1; //認証および検証済み $_SESSION['uname'] = $rez["表示名"]; $_SESSION['id'] = $rez["id"]; } カール_クローズ ($ch); ヘッダー ('場所: https://xxxx.co/projects/test.php'); } if ($_GET['アクション'] == 'ログアウト'){ 設定を解除します ($_SESSION['msatg']); ヘッダー ('場所: https://xxxx.co/projects/test.php'); }</pre> <p>このコードを開くと、登録が必要になります。これは望ましくありません。php を使用して電子ファイルを直接取得します</p>

P粉786800174P粉786800174431日前622

全員に返信(1)返信します

  • P粉426780515

    P粉4267805152023-09-06 00:58:31

    OAuth 2.0 認可 を使用してユーザーを認証し、アクセス トークンを取得します。そして、これを使用して Microsoft Graph API を呼び出し、ユーザーの電子メールを取得します。

    ご質問の件ですが、ログインしていないときにログインページが表示される場合があります。この問題を解決するには、認証コードの代わりに

    OAuth 2.0 クライアント資格情報 を使用する必要があります。 クライアント資格情報を使用してアクセス トークンを取得するサンプル コード。

    リーリー

    アクセス トークンを取得したら、それを使用して

    Microsoft Graph API を呼び出し、ユーザーの電子メールを取得できます。

    ユーザーの電子メールを取得するサンプル コード。

    リーリー

    詳細については、

    MSDoc1 および MSDoc2 を参照してください。

    返事
    0
  • キャンセル返事