ShowCampaignRecipients

Displays the phishing campaign recipients' email addresses and the number of incidents each email address appears in.

Type
python
Pack
Campaign

Source

from collections import Counter

import demistomock as demisto  # noqa: F401
from CommonServerPython import *  # noqa: F401

EMAIL_TO_FIELD = "emailto"
EMAIL_CC_FIELD = "emailcc"
EMAIL_BCC_FIELD = "emailbcc"
RECIPIENTS_FIELDS = [EMAIL_TO_FIELD, EMAIL_CC_FIELD, EMAIL_BCC_FIELD]


def get_incident_ids() -> list | None:
    """
    Gets all the campaign incident ids.

    Returns:
        List of all the ids.
    """
    incidents = demisto.get(demisto.context(), "EmailCampaign.incidents")
    return [incident["id"] for incident in incidents] if incidents else None


def get_campaign_recipients(incident_ids: list[str]) -> str:
    """
    Gets the campaign recipients in a readable table.

    Args:
        incident_ids: All the campaign incident ids.
    Returns:
        MD table of the recipients and their amount.
    """
    res = demisto.executeCommand("GetIncidentsByQuery", {"query": f"id:({' '.join(incident_ids)})"})

    if isError(res):
        return_error(f"Error occurred while trying to get incidents by query: {get_error(res)}")

    incidents_from_query = json.loads(res[0]["Contents"])

    if not incidents_from_query:
        return "No incidents found."

    recipients = []
    for recipient_field in RECIPIENTS_FIELDS:
        recipients.extend([incident[recipient_field] for incident in incidents_from_query if recipient_field in incident])

    if not recipients:
        return "No incident recipients found."

    recipients_counter: list = Counter(filter(None, recipients)).most_common()

    recipients_table_content = [{"Email": item[0], "Number Of Appearances": item[1]} for item in recipients_counter]
    headers = ["Email", "Number Of Appearances"]

    return tableToMarkdown("", recipients_table_content, headers=headers)


def main():
    try:
        if incident_ids := get_incident_ids():
            campaign_recipients = get_campaign_recipients(incident_ids)
            return_results(CommandResults(readable_output=campaign_recipients, raw_response=campaign_recipients))
        else:
            return_results(
                CommandResults(
                    content_format="html",
                    raw_response=(
                        "<div style='text-align:center; font-size:17px; padding: 15px;'>Recipients"
                        "</br> <div style='font-size:20px;'> No incident recipients found.</div></div>"
                    ),
                )
            )

    except Exception as err:
        return_error(str(err))


if __name__ in ("__main__", "__builtin__", "builtins"):
    main()

README

Displays the phishing campaign recipients’ email addresses and the number of incidents each email address appears in. .

Script Data


Name Description
Script Type python3
Tags dynamic-section
Cortex XSOAR Version 5.5.0 and later

Inputs


There are no inputs for this script.

Outputs


There are no outputs for this script.