Eメール・ログ検索

OCI Email Deliveryは、OCIロギング・サービスと統合され、詳細なアクティビティ・ログを提供します。ログは、各電子メール送信ドメイン(電子メール・ドメイン)に関連付けられており、有効にする必要があります。Eメール配信ログを有効にして、送信、リレー・アクティビティ、スパム苦情、登録解除、オープン、クリックなどの配信後イベントを追跡することを強くお薦めします。

電子メール配信ログを有効にしてアクセスするには:
  1. テナンシがログを管理、書込みおよびアクセスできるように、ロギング・ポリシーを設定します。
  2. すべてのドメインまたは選択したドメインのロギングを有効にするには、配信到達性ダッシュボードを使用します。単一のドメインに対して有効にするには、その詳細ページを開き、「ログ」サイドバー・メニューを選択し、「アウトバウンド受入済」および「アウトバウンド・リレー済」ロギングのいずれかまたは両方のオプションを有効にします。
  3. ドメインのロギングを有効にした後、OCI Webコンソールの「ログ検索」ページを使用してアクティビティ・ログを参照および検索できます。

Eメール配信ログ・タイプ

OCIロギング・サービスは、Webコンソール、API、CLIなどのインタフェース全体のすべてのアクティビティを追跡します。デフォルトの監査ログに加えて、Email Deliveryにはアクティビティを送信するための2つのログ・タイプが用意されています:

  • OutboundAccepted:インバウンド電子メール送信アクティビティ(成功または失敗)を記録します。
    • 成功した送信(Email Deliveryサービスによって承認)
    • 受信者が抑制リストに含まれているため、受け入れられましたが抑制されました
    • 無効な受信者または送信者(承認済送信者リストにない送信者を含む)
  • OutboundRelayed:アウトバウンド配信およびユーザー・エンゲージメントを追跡します。
    • 正常な配送
    • バウンス、スパム苦情および登録解除
    • 開いてクリック

必要に応じて、電子メール・ドメインごとに1つまたは両方のログ・タイプを有効にできます。

一般的な電子メールドメインのログイベントおよびフィルタ

次の表に、一般的なログ・イベントおよびフィルタの概要を示します。詳細なレコードについては、電子メール配信のロギング詳細を参照してください。

イベント ログ・タイプ ログ・フィルタ(複数の場合はAND) ノート
OCI電子メールによる配信が承認された電子メール OutboundAccepted data.action = 'accept'
拒否またはブロックされた電子メール(抑制リストの受信者) OutboundAccepted data.action = 'accept'およびdata.errorType = 'Recipient suppressed' data.smtpStatusフィールドには、正式な理由が含まれます。
受信者プロバイダへの電子メールが正常にリレーされました OutboundRelayed data.action = 'relay'
特定のカスタム・ヘッダー値についてリレーされたEメール OutboundRelayed data.action = 'relay'およびdata.headers."x-campaignid" = '999' 英数字以外のカスタム・ヘッダー名には二重引用符を使用します
バウンスした電子メール(配信の問題: 受信者が不明、スパムなど) OutboundRelayed data.action = 'bounce' data.errorType (hardまたはsoft)を使用してさらにフィルタします。追加のフィールド(data.bounceCategorydata.bounceCodedata.smtpStatusdata.message)を参照してください。
受信者がスパム苦情を登録しました OutboundRelayed data.action = 'complaint'
受信者がEメールをオープンした OutboundRelayed data.action = 'open'

追加フィールドには、受信者の電子メール・クライアントおよびオペレーティング・システムに関する情報が含まれる場合があります。

data.userAgent
特定のカスタム・ヘッダー値のオープン OutboundRelayed data.action = 'open'およびdata.headers.region = 'Northeast'
受信者がEメール内のリンクをクリックした OutboundRelayed data.action = 'click'

電子メール配信ログの検索

OCIメトリックの操作方法と同様に、ロギング問合せ言語を使用して詳細なEmail Deliveryアクティビティ・ログを検索できます。事前集計されたアクティビティ数にアクセスするのみでなく、ログ問合せを使用すると、スコープを定義して検索結果をフィルタできます。

たとえば、次の問合せでは、(コンパートメントOCIDを使用して)指定したコンパートメント内のすべてのドメインのすべてのEmail Deliveryログが検索され、すべての電子メール送信、アウトバウンド配信および関連アクティビティが返されます。結果は日付でソートされ、最新のエントリが最初にリストされます。

search "ocid1.compartment.oc1..aaaaaaaawqhwudf3pag5gohpzslu7tn4rl2d32bufkgmfzzr4wq7aznylpeq"
| type='com.oraclecloud.emaildelivery.emaildomain.outbound*'
| sort by datetime desc

追加のフィルタを使用して検索を絞り込むことができます。いくつかの例を示します。

必要なデータ 検索フィルタ
指定されたカスタム・ヘッダー値に対して受け入れられたEメールの数
search "ocid1.compartment.oc1..aaaaaaaawqhwudf3pag5gohpzslu7tn4rl2d32bufkgmfzzr4wq7aznylpeq/Default_Group/mydomain_com_outboundaccepted"
| data.action = 'accept' and data.headers.region = 'Europe'
| count
送信者ドメインmycompany.comの送信に失敗しました(理由に関係なく)
search "ocid1.compartment.oc1..aaaaaaaawqhwudf3pag5gohpzslu7tn4rl2d32bufkgmfzzr4wq7aznylpeq/Default_Group/mydomain_com_outboundaccepted" 
| data.errorType!='' and source='mycompany.com'
| sort by datetime desc

errorTypeフィールドは、失敗した送信にのみ表示され、成功した送信には表示されません。失敗した送信はすべて OutboundAcceptedログに記録されます。複数のドメインにわたって検索するには、コンパートメントOCIDのみを使用し、同じフィルタリング句を適用します。

すべての送信者ドメインでの送信の抑制
search "ocid1.compartment.oc1..aaaaaaaawqhwudf3pag5gohpzslu7tn4rl2d32bufkgmfzzr4wq7aznylpeq" 
| data.errorType='Recipient suppressed' 
| sort by datetime desc

この問合せは、受信者が抑制リストにあるためにブロックまたは抑制されているEメール送信を識別するのに役立ちます。これらの受信者をメーリング・リストから削除するか、必要に応じて情報を更新します。

成功したリレー済電子メール(配信用に受信者電子メール・プロバイダによって受け入れられる)、オプションでドメインを送信
search "ocid1.compartment.oc1..aaaaaaaawqhwudf3pag5gohpzslu7tn4rl2d32bufkgmfzzr4wq7aznylpeq" 
| data.action='relay' 
| sort by datetime desc

この問合せでは、指定したコンパートメント内のすべての送信ドメインについて、正常にリレーされた電子メールがすべて表示されます。送信側ドメインmycompany.comの結果のみを表示するには、フィルタにsourceフィールドを追加します。

search "ocid1.compartment.oc1..aaaaaaaawqhwudf3pag5gohpzslu7tn4rl2d32bufkgmfzzr4wq7aznylpeq/Default_Group/mycompany_com_outboundrelayed" 
| data.action='relay' and source='mycompany.com' 
| sort by datetime desc

検索句でログ・グループおよびログ名を指定せずに、ソース・フィールドでフィルタし、特定の送信ドメインを検索できます。ただし、複数の送信ドメインがある場合は、ここに示すように特定のログを検索すると、通常、より高速で効率的です。

バウンスのタイプ(ハード、ソフト)でソートされた、特定の受信者Eメール・プロバイダのEメール・バウンス
search "ocid1.compartment.oc1..aaaaaaaawqhwudf3pag5gohpzslu7tn4rl2d32bufkgmfzzr4wq7aznylpeq/Default_Group/mycompany_com_outboundrelayed" 
| data.action='bounce' and data.receivingDomain='hotmail.com' 
| sort by data.errorType
すべての送信ドメインにわたるすべてのハード・バウンス
search "ocid1.compartment.oc1..aaaaaaaawqhwudf3pag5gohpzslu7tn4rl2d32bufkgmfzzr4wq7aznylpeq" 
|   data.action='bounce' and data.errorType='hard' 
| sort by datetime desc
指定されたカスタム・ヘッダー値のオープン数
search "ocid1.compartment.oc1..aaaaaaaawqhwudf3pag5gohpzslu7tn4rl2d32bufkgmfzzr4wq7aznylpeq" 
|   data.action='open' and data.headers."x-subscriberid"='83725371' 
| count

APIを使用した電子メール配信ログの検索

OCIは、各サービスのSDKメソッドなど、いくつかの主要なプログラミング言語でSDKを提供しています。ログをプログラムで検索するには、OCIロギングAPISearchLogsメソッドを使用します。このメソッドは、日付と時間範囲、およびWebコンソールと同じ構文を使用する問合せオブジェクトを受け入れます。いくつかのオプション・フィールドを指定することもできます。

ノート

SearchLogsなどのリストAPIは、リクエスト当たりのデフォルトの最大レコード数を返します。レスポンスに最大レコード数が含まれている場合は、opc-next-pageフィールドが含まれます。さらにレコードを取得するには、pageパラメータにopc-next-page値を指定して同じリクエストを送信します。limitパラメータを設定して、ページ当たりのレコード数を増やすこともできます。詳細は、OCI APIリストのページ区切りを参照してください。

その他の例は、OCIロギングAPIの使用ページを参照してください。Pythonでの実際のEmail Deliveryログ検索を次に示します:

必要なデータ コード例(Python)
mycompany.com送信者から送信された3日間のバウンス
import oci
from datetime import datetime
config = oci.config.from_file()
loggingsearch_client = oci.loggingsearch.LogSearchClient(config)
search_logs_response = loggingsearch_client.search_logs(search_logs_details=oci.loggingsearch.models.SearchLogsDetails(time_start=datetime.strptime("2023-03-01T00:00:00.000Z", "%Y-%m-%dT%H:%M:%S.%fZ"), time_end=datetime.strptime("2023-03-04T00:00:00.000Z", "%Y-%m-%dT%H:%M:%S.%fZ"), search_query="search \"ocid1.compartment.oc1..aaaaaaaawqhwudf3pag5gohpzslu7tn4rl2d32bufkgmfzzr4wq7aznylpeq/Default_Group/mycompany_com_outboundrelayed\" | where data.action='bounce'", is_return_field_info=False))
print(search_logs_response.data)
1時間の間、コンパートメント内のすべての送信ドメインに対して電子メールが正常にリレーされました
import oci
from datetime import datetime
config = oci.config.from_file()
loggingsearch_client = oci.loggingsearch.LogSearchClient(config)
search_logs_response = loggingsearch_client.search_logs(search_logs_details=oci.loggingsearch.models.SearchLogsDetails(time_start=datetime.strptime("2023-03-03T08:55:00.000Z", "%Y-%m-%dT%H:%M:%S.%fZ"), time_end=datetime.strptime("2023-03-03T09:55:00.000Z", "%Y-%m-%dT%H:%M:%S.%fZ"), search_query="search \"ocid1.compartment.oc1..aaaaaaaawqhwudf3pag5gohpzslu7tn4rl2d32bufkgmfzzr4wq7aznylpeq\" | where data.action='relay'", is_return_field_info=False))
print(search_logs_response.data)
すべてのGmailおよびComcast受信者が24時間の間に正常にリレーされました
import oci
from datetime import datetime
config = oci.config.from_file()
loggingsearch_client = oci.loggingsearch.LogSearchClient(config)
search_logs_response = loggingsearch_client.search_logs(search_logs_details=oci.loggingsearch.models.SearchLogsDetails(time_start=datetime.strptime("2023-03-03T08:55:00.000Z", "%Y-%m-%dT%H:%M:%S.%fZ"), time_end=datetime.strptime("2023-03-03T09:55:00.000Z", "%Y-%m-%dT%H:%M:%S.%fZ"), search_query="search \"ocid1.compartment.oc1..aaaaaaaawqhwudf3pag5gohpzslu7tn4rl2d32bufkgmfzzr4wq7aznylpeq\" | where data.action='relay' and (data.receivingDomain='gmail.com' or data.receivingDomain='comcast.net') | sort by datetime DESC", is_return_field_info=False))
print(search_logs_response.data)
指定されたカスタム・ヘッダー値について受信者ドメインによって配信されたEメールの数
import oci
from datetime import datetime
config = oci.config.from_file()
loggingsearch_client = oci.loggingsearch.LogSearchClient(config)

search_logs_response = loggingsearch_client.search_logs(search_logs_details=oci.loggingsearch.models.SearchLogsDetails(time_start=datetime.strptime("2023-05-12T17:30:00.000Z", "%Y-%m-%dT%H:%M:%S.%fZ"), time_end=datetime.strptime("2023-05-12T18:00:00.000Z", "%Y-%m-%dT%H:%M:%S.%fZ"), search_query="search \"ocid1.compartment.oc1..aaaaaaaawqhwudf3pag5gohpzslu7tn4rl2d32bufkgmfzzr4wq7aznylpeq\" | data.action = 'relay' and data.headers.\"x-campaignid\" = '999' | summarize count(data.receivingDomain) as Count by data.receivingDomain as RecipientDomain", is_return_field_info=False))

print(search_logs_response.data)

Result:

{
    "fields": null,
    "results": [
        {
            "data": {
            "Count": 2,
            "RecipientDomain": "gmail.com"
           }
        },
        {
            "data": {
            "Count": 1,
            "RecipientDomain": "yahoo.com"
           }
        }
    ],
      "summary": {
        "field_count": null,
        "result_count": 2
    }
}