<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Power Automate &#8211; まったりエンジニア</title>
	<atom:link href="https://javeo.jp/tag/power-automate/feed/" rel="self" type="application/rss+xml" />
	<link>https://javeo.jp</link>
	<description>ほどほどレベルのプログラミング</description>
	<lastBuildDate>Tue, 16 Jun 2026 11:21:24 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2-32x32.png</url>
	<title>Power Automate &#8211; まったりエンジニア</title>
	<link>https://javeo.jp</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Outlook (new)でメールをExcelに出す【VBA非対応】</title>
		<link>https://javeo.jp/outlook-new-email-export/</link>
					<comments>https://javeo.jp/outlook-new-email-export/#respond</comments>
		
		<dc:creator><![CDATA[ジャベ雄]]></dc:creator>
		<pubDate>Tue, 16 Jun 2026 11:02:41 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Outlook]]></category>
		<category><![CDATA[Power Automate]]></category>
		<category><![CDATA[メール]]></category>
		<category><![CDATA[自動化]]></category>
		<guid isPermaLink="false">https://javeo.jp/?p=4691</guid>

					<description><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2026/06/outlook-new-email-export-v2-1024x538.jpg" class="webfeedsFeaturedVisual" /></p>Outlook (new)はVBAやマクロが非対応でメールをExcel化できません、Microsoft公式が代替に挙げるPython(Microsoft Graph)とPower Automateの2つの方法を、コードと手順つきで紹介します]]></description>
										<content:encoded><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2026/06/outlook-new-email-export-v2-1024x538.jpg" class="webfeedsFeaturedVisual" /></p><div class="codoc-evacuations" style="display:none;" data-shortcode=""></div>
<p class="wp-block-paragraph">Outlook (new)に切り替わってから、いつものVBAでメールをExcelに出そうとしたら<strong><span class="swl-marker mark_yellow">マクロがまったく動かなくなった</span></strong>、という方に向けた記事です</p>



<p class="wp-block-paragraph">結論から言うと、Outlook (new)ではVBAやCOM操作が使えません、これはバグでも設定ミスでもなく、Microsoftがそういう作りにしたためです</p>



<p class="wp-block-paragraph">とはいえメールをExcelに落とす手段がなくなったわけではないので、この記事ではMicrosoftが公式に代替として案内している<strong>Python(Microsoft Graph)</strong>とPower Automateの2つを、設定の流れとコードつきで紹介していきます</p>



<div class="wp-block-group is-style-big_icon_point"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">この記事で分かること</p>



<ul class="wp-block-list is-style-check_list -list-under-dashed">
<li>Outlook (new)でVBAが動かない理由(公式見解)</li>



<li>過去メールも全件取りたいなら Python + Microsoft Graph</li>



<li>ノーコードでやるなら Power Automate(新着メールの自動収集向き)</li>



<li>2つの方法のどちらを選べばいいか</li>
</ul>
</div></div>



<h2 class="wp-block-heading">なぜOutlook (new)でVBAが使えないのか</h2>



<p class="wp-block-paragraph">まず「なぜ動かないのか」をはっきりさせておきます、ここを理解しておくと、無駄に設定をいじって時間を溶かさずに済みます</p>



<p class="wp-block-paragraph">Outlook (new)は、これまでのOutlook (classic)(デスクトップ版)とはまったく別の作りになっています、中身はWeb技術(WebView2)ベースで、ブラウザで動くOutlook on the webに近いものです</p>



<p class="wp-block-paragraph">VBAでメールを取得するときは、<strong>Outlook.Application</strong> や GetNamespace(&#8220;MAPI&#8221;) といったCOMという仕組み(アプリ同士をつなぐWindowsの仕掛け)を経由してOutlookのデータにアクセスしていました</p>



<p class="wp-block-paragraph">ところがOutlook (new)には、この<strong><span class="swl-marker mark_yellow">COMの窓口そのものが用意されていません</span></strong>、だから CreateObject(&#8220;Outlook.Application&#8221;) の時点で失敗してしまい、これまでのマクロが軒並み動かなくなるわけです</p>



<div class="wp-block-group is-style-big_icon_caution"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">Microsoftは公式ドキュメントで<strong><span class="swl-marker mark_yellow" style="color:#e8313b">「Outlook (new)ではVBAとマクロをサポートしない」</span></strong>とはっきり書いています(VBA, Macros, and Custom Flows Alternatives)</p>



<p class="wp-block-paragraph">将来サポートされる予定も今のところアナウンスされていないので、Outlook (new)で使う前提なら、VBA以外の手段に乗り換えるのが現実的です</p>
</div></div>



<h3 class="wp-block-heading">Outlook (classic)に戻せばVBAは今までどおり動く</h3>



<p class="wp-block-paragraph">ここで1つ逃げ道もお伝えしておきます</p>



<p class="wp-block-paragraph">もし手元の環境でOutlook (classic)に戻せるなら、Outlookウィンドウ右上のトグルで切り替えるだけで、これまでのVBAマクロがそのまま使えます、Outlook (classic)は2026年時点でまだサポートが続く見込みです</p>



<p class="wp-block-paragraph">「とりあえず今までのマクロをもう一度動かしたいだけ」という場合は、Outlook (classic)に戻すのが一番手っ取り早いです、VBAでメールをExcel化する具体的なコードは<a href="https://javeo.jp/get-outlook-data/" target="_blank" rel="noopener noreferrer">OutlookのメールデータをExcelに取得するマクロ</a>でまとめているので、そちらをどうぞ</p>



<p class="wp-block-paragraph">会社の方針などでOutlook (classic)に戻せない、あるいは将来を見据えてVBA以外でやっておきたい、という方はこの先の2つの方法に進んでください</p>



<h2 class="wp-block-heading">方法1 Pythonで取得する(Microsoft Graph API)</h2>



<p class="wp-block-paragraph">1つめは<strong>Python + Microsoft Graph API</strong>です、Microsoftが用意しているメール取得用のAPI(外部からデータを取りに行く窓口)をPythonから叩いて、メールをまとめてExcelに書き出します</p>



<p class="wp-block-paragraph">こちらは設定にひと手間かかりますが、<strong><span class="swl-marker mark_yellow">過去メールも含めて全件取得できる</span></strong>のが強みです、日付や件名でフィルタしたり、取得項目を自由に選べたりと、細かい制御が効きます</p>



<h3 class="wp-block-heading">ステップ1 必要なライブラリを入れる</h3>



<p class="wp-block-paragraph">使うライブラリは3つです、認証用のmsal、API通信用のrequests、Excel書き出し用のopenpyxlを入れます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>pip install msal requests openpyxl</code></pre></div>



<h3 class="wp-block-heading">ステップ2 Azure AD(Microsoft Entra ID)にアプリを登録する</h3>



<p class="wp-block-paragraph">Graph APIを使うには、自分のアプリをMicrosoft側に登録して<strong>CLIENT_ID</strong>(アプリの身分証のようなもの)をもらう必要があります、ここが今回いちばんの山場なので、画面ごとに区切って進めていきます</p>



<p class="wp-block-paragraph">作業するのは<strong>Microsoft Entra管理センター</strong>(entra.microsoft.com)です、以前はAzureポータル(portal.azure.com)の「Azure Active Directory」と呼ばれていた場所で、今は<strong>Microsoft Entra ID</strong>に名前が変わっています、どちらから入っても同じ設定にたどり着けます</p>



<div class="swell-block-step" data-num-style="circle">
<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">アプリの登録から「新規登録」を開く</div><div class="swell-block-step__body">
<p class="wp-block-paragraph">Entra管理センターにサインインして、「Entra ID」→「アプリの登録」→「新規登録」と進みます</p>



<figure class="wp-block-image size-large is-style-shadow"><a href="https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h13_48.png"><img decoding="async" width="1024" height="538" src="https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h13_48-1024x538.png" alt="" class="wp-image-4721" srcset="https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h13_48-1024x538.png 1024w, https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h13_48-300x158.png 300w, https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h13_48-150x79.png 150w, https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h13_48-768x403.png 768w, https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h13_48.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>
</div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">名前とアカウントの種類を選んで登録する</div><div class="swell-block-step__body">
<p class="wp-block-paragraph">新規登録の画面には、上から「名前」「サポートされているアカウントの種類」「リダイレクトURI(任意)」の順で入力欄が並んでいます</p>



<ul class="wp-block-list -list-under-dashed">
<li><strong>名前</strong>:あとから変えられるので、自分が分かる名前でかまいません(例 outlook-mail-export)</li>



<li><strong>サポートされているアカウントの種類</strong>:迷ったら<span class="swl-marker mark_yellow">「任意のEntra IDテナント + 個人用Microsoftアカウント」</span>を選ぶと、個人のOutlook.com(Hotmail/Live)でも会社のMicrosoft 365でも同じ手順で動きます、選んだ種類でコードの<strong>TENANT_ID</strong>が変わるので、下のメモもあわせて見てください</li>



<li><strong>リダイレクトURI(任意)</strong>:ここは空のままでOKです、次のステップの「認証」で設定します</li>
</ul>



<p class="wp-block-paragraph">入力できたら「登録」をクリックします</p>



<figure class="wp-block-image size-large is-style-shadow"><a href="https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h04_42.png"><img decoding="async" width="1024" height="589" src="https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h04_42-1024x589.png" alt="" class="wp-image-4722" srcset="https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h04_42-1024x589.png 1024w, https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h04_42-300x173.png 300w, https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h04_42-150x86.png 150w, https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h04_42-768x442.png 768w, https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h04_42.png 1190w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>
</div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">クライアントIDとテナントIDを控える</div><div class="swell-block-step__body">
<p class="wp-block-paragraph">登録が終わると「概要」画面が開きます、ここに表示される<strong>アプリケーション(クライアント)ID</strong>をコピーしておきます、これがコードの<strong>CLIENT_ID</strong>です</p>



<p class="wp-block-paragraph">同じ画面の<strong>ディレクトリ(テナント)ID</strong>も控えておきます、こちらは<span class="swl-marker mark_yellow">「シングルテナントのみ」を選んだ場合だけ</span>コードのTENANT_IDに入れます(commonや個人用を使うなら不要です)</p>



<figure class="wp-block-image size-large is-style-shadow"><a href="https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h16_25.png"><img decoding="async" width="1024" height="538" src="https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h16_25-1024x538.png" alt="" class="wp-image-4723" srcset="https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h16_25-1024x538.png 1024w, https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h16_25-300x158.png 300w, https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h16_25-150x79.png 150w, https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h16_25-768x403.png 768w, https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h16_25.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>
</div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">リダイレクトURIを設定する</div><div class="swell-block-step__body">
<p class="wp-block-paragraph">左メニューの「認証」(画面によっては<strong>「Authentication (Preview)」</strong>と表示されます)を開き、「リダイレクトURI構成」タブの「リダイレクトURIの追加」から<strong>「モバイルアプリケーションとデスクトップアプリケーション」</strong>のタイルを選びます</p>



<p class="wp-block-paragraph">リダイレクトURIに<strong><span class="swl-marker mark_yellow">http://localhost</span></strong>を指定して「構成」で保存します(推奨候補に出ていなければカスタムとして入力します)、<span class="swl-marker mark_yellow" style="color:#e8313b">これを入れておかないと、ログイン画面が返ってこずにエラーになります</span></p>



<figure class="wp-block-image size-large is-style-shadow"><a href="https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h31_14.png"><img decoding="async" width="1024" height="581" src="https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h31_14-1024x581.png" alt="" class="wp-image-4726" srcset="https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h31_14-1024x581.png 1024w, https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h31_14-300x170.png 300w, https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h31_14-150x85.png 150w, https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h31_14-768x436.png 768w, https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h31_14.png 1190w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large is-style-shadow"><a href="https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h31_26.png"><img decoding="async" width="1024" height="581" src="https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h31_26-1024x581.png" alt="" class="wp-image-4727" srcset="https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h31_26-1024x581.png 1024w, https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h31_26-300x170.png 300w, https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h31_26-150x85.png 150w, https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h31_26-768x436.png 768w, https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h31_26.png 1190w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>
</div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">APIのアクセス許可でMail.Readを追加する</div><div class="swell-block-step__body">
<p class="wp-block-paragraph">左メニューの「APIのアクセス許可」→「アクセス許可の追加」→「Microsoft Graph」→「委任されたアクセス許可」と進み、<strong>Mail.Read</strong>を探して追加します</p>



<p class="wp-block-paragraph">これで<strong><span class="swl-marker mark_yellow">自分のメールを読む権限</span></strong>がアプリに付きます</p>



<figure class="wp-block-image size-large is-style-shadow"><a href="https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h17_57.png"><img decoding="async" width="1024" height="528" src="https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h17_57-1024x528.png" alt="" class="wp-image-4728" srcset="https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h17_57-1024x528.png 1024w, https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h17_57-300x155.png 300w, https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h17_57-150x77.png 150w, https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h17_57-768x396.png 768w, https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h17_57.png 1353w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large is-style-shadow"><a href="https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h31_10.png"><img decoding="async" width="1024" height="528" src="https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h31_10-1024x528.png" alt="" class="wp-image-4729" srcset="https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h31_10-1024x528.png 1024w, https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h31_10-300x155.png 300w, https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h31_10-150x77.png 150w, https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h31_10-768x396.png 768w, https://javeo.jp/wp-content/uploads/2026/06/2026-06-16_19h31_10.png 1353w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>
</div></div>
</div>



<div class="wp-block-group is-style-big_icon_memo"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">今回は自分のログインでアクセスする<strong>委任(デリゲート)</strong>の方式なので、アプリのシークレット(パスワード的なもの)は不要です</p>



<p class="wp-block-paragraph">はじめてログインするときに、Mail.Readの利用に同意するか聞かれることがあります、自分のアカウントに対する読み取りなので同意して進めて問題ないです</p>



<p class="wp-block-paragraph">ステップ2で選んだ<strong>「サポートされているアカウントの種類」</strong>に合わせて、コードの<strong>TENANT_ID</strong>に入れる値を変えます、ここがズレると<span class="swl-marker mark_yellow" style="color:#e8313b">「Please use the /consumers endpoint」のような認証エラー</span>になります</p>



<ul class="wp-block-list -list-under-dashed">
<li>任意のEntra IDテナント + 個人用(個人でも会社でも動く、迷ったらこれ):<strong><span class="swl-marker mark_yellow">common</span></strong></li>



<li>シングルテナントのみ(会社・学校のMicrosoft 365に限定):控えた<strong>ディレクトリ(テナント)ID</strong></li>



<li>個人用アカウントのみ(Outlook.com専用):<strong><span class="swl-marker mark_yellow">consumers</span></strong></li>
</ul>



<p class="wp-block-paragraph">画面にある「複数のEntra IDテナント」は、複数の会社にまたがって使うSaaSアプリ向けなので、今回のメール取得では選びません</p>
</div></div>



<h3 class="wp-block-heading">ステップ3 認証してメールを取得する</h3>



<p class="wp-block-paragraph">準備ができたらコードに進みます、まずは認証してアクセストークン(API利用の通行証)をもらう部分です</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import msal

CLIENT_ID = &quot;ここにアプリケーション(クライアント)ID&quot;
TENANT_ID = &quot;common&quot;  # 個人でも会社でも動く、会社のアカウント専用なら控えたテナントID、個人専用なら consumers
SCOPES = [&quot;https://graph.microsoft.com/Mail.Read&quot;]

# パブリッククライアント(デスクトップアプリ)として認証する
app = msal.PublicClientApplication(
    CLIENT_ID,
    authority=f&quot;https://login.microsoftonline.com/{TENANT_ID}&quot;,
)

# ブラウザが立ち上がってMicrosoftのログイン画面が出る
result = app.acquire_token_interactive(scopes=SCOPES)
token = result[&quot;access_token&quot;]</code></pre></div>



<p class="wp-block-paragraph">このコードを実行するとブラウザが立ち上がり、いつものMicrosoftのログイン画面が出ます、ログインが終わるとトークンが手に入ります</p>



<p class="wp-block-paragraph">続いてGraph APIを叩いてメール一覧を取ります、ポイントは<strong><span class="swl-marker mark_yellow">ページング処理</span></strong>です</p>



<p class="wp-block-paragraph">Graph APIは一度に全件は返してくれず、続きがある場合は応答の中に<strong>@odata.nextLink</strong>という「次のページのURL」が入ってきます、これが無くなるまでループで取りに行きます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import requests

# Prefer ヘッダーで本文をHTMLでなくプレーンテキストで受け取る
headers = {
    &quot;Authorization&quot;: f&quot;Bearer {token}&quot;,
    &quot;Prefer&quot;: &#39;outlook.body-content-type=&quot;text&quot;&#39;,
}

# $top で1ページの件数、$select で欲しい項目だけに絞る
url = (&quot;https://graph.microsoft.com/v1.0/me/messages&quot;
       &quot;?$top=50&quot;
       &quot;&$select=subject,from,toRecipients,ccRecipients,receivedDateTime,isRead,hasAttachments,body&quot;)

all_messages = []
while url:
    resp = requests.get(url, headers=headers).json()
    all_messages.extend(resp.get(&quot;value&quot;, []))
    # 次のページがあれば nextLink が入る、無ければループ終了
    url = resp.get(&quot;@odata.nextLink&quot;)

print(f&quot;{len(all_messages)} 件取得しました&quot;)</code></pre></div>



<p class="wp-block-paragraph">$selectで欲しい項目だけに絞ると、通信量が減って取得も速くなります、今回は件名・差出人・宛先・CC・受信日時・既読フラグ・添付の有無・本文を取っています、ほかにどんな項目が取れるかは<a href="https://learn.microsoft.com/ja-jp/graph/api/resource/message" target="_blank" rel="noopener noreferrer">messageリソースの公式リファレンス</a>に一覧があります</p>



<h3 class="wp-block-heading">ステップ4 Excelに書き出す</h3>



<p class="wp-block-paragraph">最後にopenpyxlでExcelに書き出します、差出人・宛先・CCはどれも入れ子の構造で、メールによっては<strong>address</strong>が無く<strong>name</strong>だけのこともあるので、取り出す部分を<strong>addr_of</strong>と<strong>addr_list</strong>という小さな関数にまとめておくと扱いやすいです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import openpyxl

# 差出人・宛先・CCを取り出すヘルパー(address が無ければ name を使う)
def addr_of(person):
    ea = (person or {}).get(&quot;emailAddress&quot;, {})
    return ea.get(&quot;address&quot;) or ea.get(&quot;name&quot;, &quot;&quot;)

def addr_list(people):
    # toRecipients や ccRecipients は複数なので ; でつなぐ
    return &quot;; &quot;.join(addr_of(p) for p in (people or []))

wb = openpyxl.Workbook()
ws = wb.active
ws.append([&quot;件名&quot;, &quot;差出人&quot;, &quot;宛先&quot;, &quot;CC&quot;, &quot;受信日時&quot;, &quot;既読&quot;, &quot;添付&quot;, &quot;本文(先頭500字)&quot;])

for msg in all_messages:
    ws.append([
        msg.get(&quot;subject&quot;, &quot;&quot;),
        addr_of(msg.get(&quot;from&quot;)),
        addr_list(msg.get(&quot;toRecipients&quot;)),
        addr_list(msg.get(&quot;ccRecipients&quot;)),
        msg.get(&quot;receivedDateTime&quot;, &quot;&quot;),
        &quot;既読&quot; if msg.get(&quot;isRead&quot;) else &quot;未読&quot;,
        &quot;あり&quot; if msg.get(&quot;hasAttachments&quot;) else &quot;&quot;,
        msg.get(&quot;body&quot;, {}).get(&quot;content&quot;, &quot;&quot;)[:500],
    ])

wb.save(&quot;outlook_mail.xlsx&quot;)
print(&quot;outlook_mail.xlsx に保存しました&quot;)</code></pre></div>



<p class="wp-block-paragraph">本文は長くなりがちなので、ここでは先頭500字だけ取り出しています、全文が欲しい場合は<strong>[:500]</strong>を外してください</p>



<p class="wp-block-paragraph">ここまでをひとつのファイルにまとめたものを置いておきます、CLIENT_IDとTENANT_IDを自分の値に書き換えれば、そのまま動かせるはずです</p>



<div class="swell-block-accordion">
<details class="swell-block-accordion__item" data-swl-acc="wrapper"><summary class="swell-block-accordion__title" data-swl-acc="header"><span class="swell-block-accordion__label">コード全文（コピペ用）</span><span class="swell-block-accordion__icon c-switchIconBtn" data-swl-acc="icon" aria-hidden="true" data-opened="false"><i class="__icon--closed icon-caret-down"></i><i class="__icon--opened icon-caret-up"></i></span></summary><div class="swell-block-accordion__body" data-swl-acc="body">
<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="get_outlook_mail.py" data-lang="Python"><code>import msal
import requests
import openpyxl

CLIENT_ID = &quot;ここにアプリケーション(クライアント)ID&quot;
TENANT_ID = &quot;common&quot;  # 個人でも会社でも動く、会社のアカウント専用なら控えたテナントID、個人専用なら consumers
SCOPES = [&quot;https://graph.microsoft.com/Mail.Read&quot;]

# --- 認証(ブラウザでMicrosoftにログインする) ---
app = msal.PublicClientApplication(
    CLIENT_ID,
    authority=f&quot;https://login.microsoftonline.com/{TENANT_ID}&quot;,
)
result = app.acquire_token_interactive(scopes=SCOPES)
token = result[&quot;access_token&quot;]

# --- メール一覧を取得する ---
headers = {
    &quot;Authorization&quot;: f&quot;Bearer {token}&quot;,
    &quot;Prefer&quot;: &#39;outlook.body-content-type=&quot;text&quot;&#39;,
}
url = (&quot;https://graph.microsoft.com/v1.0/me/messages&quot;
       &quot;?$top=50&quot;
       &quot;&$select=subject,from,toRecipients,ccRecipients,receivedDateTime,isRead,hasAttachments,body&quot;)

all_messages = []
while url:
    resp = requests.get(url, headers=headers).json()
    all_messages.extend(resp.get(&quot;value&quot;, []))
    url = resp.get(&quot;@odata.nextLink&quot;)

print(f&quot;{len(all_messages)} 件取得しました&quot;)

# --- Excelに書き出す ---
def addr_of(person):
    ea = (person or {}).get(&quot;emailAddress&quot;, {})
    return ea.get(&quot;address&quot;) or ea.get(&quot;name&quot;, &quot;&quot;)

def addr_list(people):
    return &quot;; &quot;.join(addr_of(p) for p in (people or []))

wb = openpyxl.Workbook()
ws = wb.active
ws.append([&quot;件名&quot;, &quot;差出人&quot;, &quot;宛先&quot;, &quot;CC&quot;, &quot;受信日時&quot;, &quot;既読&quot;, &quot;添付&quot;, &quot;本文(先頭500字)&quot;])

for msg in all_messages:
    ws.append([
        msg.get(&quot;subject&quot;, &quot;&quot;),
        addr_of(msg.get(&quot;from&quot;)),
        addr_list(msg.get(&quot;toRecipients&quot;)),
        addr_list(msg.get(&quot;ccRecipients&quot;)),
        msg.get(&quot;receivedDateTime&quot;, &quot;&quot;),
        &quot;既読&quot; if msg.get(&quot;isRead&quot;) else &quot;未読&quot;,
        &quot;あり&quot; if msg.get(&quot;hasAttachments&quot;) else &quot;&quot;,
        msg.get(&quot;body&quot;, {}).get(&quot;content&quot;, &quot;&quot;)[:500],
    ])

wb.save(&quot;outlook_mail.xlsx&quot;)
print(&quot;outlook_mail.xlsx に保存しました&quot;)</code></pre></div>
</div></details>
</div>



<h3 class="wp-block-heading">受信トレイだけ・期間で絞りたいとき</h3>



<p class="wp-block-paragraph">上のコードはメール全体を取りますが、対象を絞りたいこともあると思います、URLのところを少し変えるだけで対応できます</p>



<p class="wp-block-paragraph">受信トレイだけに絞るなら<strong>me/mailFolders/inbox/messages</strong>にします、受信日時で絞るなら$filterを足します、たとえば2026年1月以降だけなら次のような形です</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code># 受信トレイの、2026年1月以降のメールに絞る例
url = (&quot;https://graph.microsoft.com/v1.0/me/mailFolders/inbox/messages&quot;
       &quot;?$top=50&quot;
       &quot;&$select=subject,from,toRecipients,ccRecipients,receivedDateTime,isRead,hasAttachments,body&quot;
       &quot;&$filter=receivedDateTime ge 2026-01-01T00:00:00Z&quot;)</code></pre></div>



<p class="wp-block-paragraph">このあたりを自由にいじれるのが、Pythonで取る方法のいちばんの魅力かなと思います、$filterや$orderbyで指定できる条件は<a href="https://learn.microsoft.com/ja-jp/graph/api/user-list-messages" target="_blank" rel="noopener noreferrer">List messagesのリファレンス</a>にまとまっています</p>



<h2 class="wp-block-heading">方法2 Power Automateで新着メールをExcelに追記する</h2>



<p class="wp-block-paragraph">2つめはノーコードでできる<strong>Power Automate</strong>です、プログラムを書かずに「メールが届いたらExcelに1行追記する」という流れ(フロー)を組めます</p>



<p class="wp-block-paragraph">Microsoft 365のアカウントがあれば、無料の枠でも基本的な自動フローは作れます、コードを書きたくない方はこちらの方が手軽です</p>



<div class="wp-block-group is-style-big_icon_caution"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">先に大事な制約を1つ、Power Automateは<strong><span class="swl-marker mark_yellow">「これから届くメール」を自動で拾う仕組み</span></strong>です</p>



<p class="wp-block-paragraph">すでに受信トレイに溜まっている過去メールを一括でExcel化する用途には向きません、過去分もまとめて欲しいなら、方法1で紹介したPython(Microsoft Graph)の方が適しています</p>
</div></div>



<h3 class="wp-block-heading">事前準備 OneDriveにExcelを置いてテーブル化しておく</h3>



<p class="wp-block-paragraph">フローを作る前に、書き込み先のExcelを用意します、ここを先にやっておかないと後の設定でつまずきます</p>



<ul class="wp-block-list is-style-num_circle -list-under-dashed">
<li>OneDrive(またはSharePoint)にExcelファイルを置く ※ローカルPCのExcelは連携できません</li>



<li>1行目に「件名」「差出人」「受信日時」などの見出しを入れる</li>



<li>見出しを含めて範囲を選び、Excelの「挿入」→「テーブル」でテーブルに変換しておく</li>
</ul>



<p class="wp-block-paragraph">Power Automateの「行の追加」アクションは<strong><span class="swl-marker mark_yellow">テーブルにしか書き込めない</span></strong>ので、ただ見出しを打っただけのシートだと選択肢に出てきません、ここはハマりやすいポイントです</p>



<h3 class="wp-block-heading">フローを作る手順</h3>



<p class="wp-block-paragraph">準備ができたら、Power Automate(make.powerautomate.com)でフローを組みます、流れはとてもシンプルです</p>



<div class="swell-block-step" data-num-style="circle">
<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">自動化したクラウドフローを新規作成</div><div class="swell-block-step__body">
<p class="wp-block-paragraph">「作成」から「自動化したクラウドフロー」を選びます、トリガー(きっかけ)になるイベントを後で指定する形式です</p>
</div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">トリガーに「新しいメールが届いたとき」を選ぶ</div><div class="swell-block-step__body">
<p class="wp-block-paragraph">Office 365 Outlookの<strong>「新しいメールが届いたとき (V3)」</strong>を選びます、特定の差出人や件名だけに絞りたい場合は、ここのオプションで条件を指定できます</p>
</div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">アクションに「表に行を追加」を選ぶ</div><div class="swell-block-step__body">
<p class="wp-block-paragraph">次のステップでExcel Online (OneDrive) の<strong>「表に行を追加」</strong>を選び、さきほど用意したファイル・テーブルを指定します</p>
</div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">各列にメールの値を割り当てる</div><div class="swell-block-step__body">
<p class="wp-block-paragraph">「件名」列にはトリガーの件名、「差出人」列には差出人、というように動的なコンテンツをはめ込んでいきます、これで保存すれば完成です</p>
</div></div>
</div>



<p class="wp-block-paragraph">あとはメールが届くたびに、自動でExcelの最終行に1件ずつ積み上がっていきます、手作業のコピペから解放されるのは地味にうれしいポイントです</p>



<p class="wp-block-paragraph">本文も列に入れたい場合は本文プレビューを割り当てると扱いやすいです、本文全文はHTMLタグが混ざることがあるので、用途に合わせて選んでください</p>



<h2 class="wp-block-heading">どちらを選ぶか(比較)</h2>



<p class="wp-block-paragraph">2つの方法を表にまとめておきます、ざっくり言うと<strong><span class="swl-marker mark_yellow">過去メールも全部欲しいならPython、これからのメールを自動で貯めたいならPower Automate</span></strong>です</p>


<div class="c-scrollHint sp_"><span>スクロールできます <i class="icon-more_arrow"></i></span></div>
<figure data-table-scrollable="sp" class="wp-block-table is-style-stripes"><table style="--table-width:700px;"><thead><tr><th>項目</th><th>Python(Graph)</th><th>Power Automate</th></tr></thead><tbody><tr><td>必要なスキル</td><td>Pythonの基礎</td><td>ノーコード(画面操作だけ)</td></tr><tr><td>事前準備</td><td>Azure ADのアプリ登録</td><td>OneDriveにExcel+テーブル化</td></tr><tr><td>新着メールの自動収集</td><td>△ 定期実行の仕組みが別途必要</td><td>○ 得意</td></tr><tr><td>過去メールの一括取得</td><td>○ 全件取得できる</td><td>× できない</td></tr><tr><td>日付・件名での絞り込み</td><td>○ 自由に指定できる</td><td>△ 簡単な条件のみ</td></tr><tr><td>費用</td><td>無料(自分のアカウント範囲)</td><td>無料プランあり</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">「溜まった問い合わせメールを一気にExcelで分析したい」のような一括処理ならPython、「届いたメールを台帳に自動で記録していきたい」のような運用ならPower Automate、という住み分けがしっくりくると思います</p>



<p class="wp-block-paragraph">もちろん両方を組み合わせてもいいです、過去分はPythonで一気に吸い出して、これから先はPower Automateで貯めていく、という使い方も現実的です</p>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">Outlook (new)でメールをExcel化する方法を整理しました、最後にもう一度ポイントをまとめておきます</p>



<ul class="wp-block-list is-style-check_list -list-under-dashed">
<li>Outlook (new)はVBA・COM非対応(Microsoft公式が明言、将来サポート予定もなし)</li>



<li>今までのマクロを動かしたいだけなら、Outlook (classic)に戻すのが最短</li>



<li>過去メールも全件・条件指定で取りたいなら Python + Microsoft Graph</li>



<li>新着メールを自動で貯めたいなら Power Automate(ノーコード)</li>
</ul>



<p class="wp-block-paragraph">VBAが使えなくなったと聞くと身構えてしまいますが、代わりの道はちゃんと用意されています、自分の目的に合う方を選んでもらえればと思います</p>



<p class="wp-block-paragraph">Outlook (classic)でVBAを使う具体的なコードは<a href="https://javeo.jp/get-outlook-data/" target="_blank" rel="noopener noreferrer">OutlookのメールデータをExcelに取得するマクロ</a>でまとめています、戻せる環境の方はこちらもあわせてどうぞ</p>


<div class="p-blogParts post_content" data-partsID="4602">
<div class="jv-books" id="jv-books-python" data-shelf="python"><div class="jv-books-head"><span class="jv-books-title"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4da.png" alt="📚" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Python自動化の独学に効く本</span><span class="jv-books-pr">PR</span></div><div class="jv-books-grid"><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4814401523?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/1529/9784814401529_1_2.jpg?_ex=240x240" alt="退屈なことはPythonにやらせよう 第3版" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">退屈なことはPythonにやらせよう 第3版</p><p class="jv-book-author">Al Sweigart</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4814401523?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="python" data-mall="amazon" data-book="4814401523">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18513569%2F&#038;m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18513569%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="python" data-mall="rakuten" data-book="4814401523">楽天で見る</a></div></div></div><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4297107384?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/7383/9784297107383.jpg?_ex=240x240" alt="Pythonクローリング&amp;スクレイピング 増補改訂版" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">Pythonクローリング&amp;スクレイピング 増補改訂版</p><p class="jv-book-author">加藤耕太</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4297107384?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="python" data-mall="amazon" data-book="4297107384">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F15960670%2F&#038;m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F15960670%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="python" data-mall="rakuten" data-book="4297107384">楽天で見る</a></div></div></div><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4839973857?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/3858/9784839973858.jpg?_ex=240x240" alt="シゴトがはかどる Python自動処理の教科書" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">シゴトがはかどる Python自動処理の教科書</p><p class="jv-book-author">クジラ飛行机</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4839973857?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="python" data-mall="amazon" data-book="4839973857">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16520665%2F&#038;m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16520665%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="python" data-mall="rakuten" data-book="4839973857">楽天で見る</a></div></div></div></div><p class="jv-books-note">私のおすすめからランダムで3冊を表示しています</p></div>
<style>
.jv-books{border:1px solid #e0e0e0;border-radius:8px;padding:16px;margin:1.5em 0;background:#fff}
.jv-books-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.jv-books-title{font-weight:700;font-size:1.05em}
.jv-books-pr{font-size:.7em;color:#888;border:1px solid #ccc;border-radius:3px;padding:1px 6px;flex-shrink:0}
.jv-books-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;min-height:330px}
.jv-book-card{display:flex;flex-direction:column;align-items:center;text-align:center;border:1px solid #f0f0f0;border-radius:6px;padding:12px 8px;background:#fafafa}
.jv-book-cover img{width:auto;max-width:120px;height:170px;object-fit:contain}
.jv-book-info{width:100%;flex:1;display:flex;flex-direction:column}
.jv-book-title{font-size:.82em;font-weight:600;line-height:1.4;margin:8px 0 2px;min-height:2.8em;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.jv-book-author{font-size:.72em;color:#777;margin:0 0 8px}
.jv-book-btns{display:flex;flex-direction:column;gap:6px;width:100%;margin-top:auto}
.jv-btn{display:block;text-align:center;font-size:.78em;font-weight:600;color:#fff!important;text-decoration:none!important;border-radius:4px;padding:7px 4px;line-height:1.2}
.jv-btn-az{background:#e88b00}
.jv-btn-rk{background:#bf0000}
.jv-btn:hover{opacity:.85}
.jv-books-note{font-size:.7em;color:#999;text-align:right;margin:8px 0 0}
@media(max-width:599px){
.jv-books-grid{grid-template-columns:1fr;min-height:0}
.jv-book-card{flex-direction:row;text-align:left;gap:12px}
.jv-book-cover img{height:110px;max-width:80px}
.jv-book-info{min-width:0}
.jv-book-title{min-height:0}
.jv-book-btns{flex-direction:row}
.jv-btn{flex:1}
}
</style>
<script>
(function(){
var SHELF='python';
var root=document.getElementById('jv-books-'+SHELF);
if(!root||root.dataset.init)return;
root.dataset.init='1';
var POOL=[{"t": "退屈なことはPythonにやらせよう 第3版", "a": "Al Sweigart", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/1529/9784814401529_1_2.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4814401523?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18513569%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18513569%2F", "id": "4814401523"}, {"t": "Pythonクローリング&スクレイピング 増補改訂版", "a": "加藤耕太", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/7383/9784297107383.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4297107384?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F15960670%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F15960670%2F", "id": "4297107384"}, {"t": "シゴトがはかどる Python自動処理の教科書", "a": "クジラ飛行机", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/3858/9784839973858.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4839973857?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16520665%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16520665%2F", "id": "4839973857"}, {"t": "もっとシゴトがはかどる Python×Excel×AI 業務自動化の教科書", "a": "クジラ飛行机", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/8302/9784839988302_1_2.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4839988307?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18238595%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18238595%2F", "id": "4839988307"}, {"t": "Python2年生 スクレイピングのしくみ 第2版", "a": "森巧尚", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/2605/9784798182605.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4798182605?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F17821975%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F17821975%2F", "id": "4798182605"}];
var REL='nofollow sponsored noopener noreferrer';
function el(tag,cls){var e=document.createElement(tag);if(cls)e.className=cls;return e;}
function btn(href,cls,label,mall,id){
var a=el('a','jv-btn '+cls);a.href=href;a.target='_blank';a.rel=REL;a.textContent=label;
a.setAttribute('data-shelf',SHELF);a.setAttribute('data-mall',mall);a.setAttribute('data-book',id);
return a;}
function card(b){
var d=el('div','jv-book-card');
var cover=el('a','jv-book-cover');cover.href=b.az;cover.target='_blank';cover.rel=REL;
var img=el('img');img.src=b.img;img.alt=b.t;img.width=120;img.height=170;img.loading='lazy';
cover.appendChild(img);
var info=el('div','jv-book-info');
var ttl=el('p','jv-book-title');ttl.textContent=b.t;
var au=el('p','jv-book-author');au.textContent=b.a;
var btns=el('div','jv-book-btns');
btns.appendChild(btn(b.az,'jv-btn-az','Amazonで見る','amazon',b.id));
if(b.rk){btns.appendChild(btn(b.rk,'jv-btn-rk','楽天で見る','rakuten',b.id));}
info.appendChild(ttl);info.appendChild(au);info.appendChild(btns);
d.appendChild(cover);d.appendChild(info);
return d;}
var pool=POOL.slice();
for(var i=pool.length-1;i>0;i--){var j=Math.floor(Math.random()*(i+1));var t=pool[i];pool[i]=pool[j];pool[j]=t;}
var grid=root.querySelector('.jv-books-grid');
grid.style.opacity='0';
while(grid.firstChild)grid.removeChild(grid.firstChild);
pool.slice(0,3).forEach(function(b){grid.appendChild(card(b));});
grid.style.transition='opacity .5s ease';
void grid.offsetWidth;
grid.style.opacity='1';
})();
</script>
</div>]]></content:encoded>
					
					<wfw:commentRss>https://javeo.jp/outlook-new-email-export/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
