diff --git a/Packs/CarbonBlackDefense/Integrations/CarbonBlackLiveResponseCloud/CarbonBlackLiveResponseCloud_test.py b/Packs/CarbonBlackDefense/Integrations/CarbonBlackLiveResponseCloud/CarbonBlackLiveResponseCloud_test.py index e634b52aa134..8dc02b0167dd 100644 --- a/Packs/CarbonBlackDefense/Integrations/CarbonBlackLiveResponseCloud/CarbonBlackLiveResponseCloud_test.py +++ b/Packs/CarbonBlackDefense/Integrations/CarbonBlackLiveResponseCloud/CarbonBlackLiveResponseCloud_test.py @@ -1,7 +1,7 @@ import functools import pytest -from cbc_sdk.live_response_api import * +from cbc_sdk.live_response_api import LiveResponseMemdump, LiveResponseSessionManager from CarbonBlackLiveResponseCloud import * import demistomock as demisto diff --git a/Packs/SendGrid/Integrations/SendGrid/SendGrid.py b/Packs/SendGrid/Integrations/SendGrid/SendGrid.py index 7b5cfa681262..e4bf9fcdbf43 100644 --- a/Packs/SendGrid/Integrations/SendGrid/SendGrid.py +++ b/Packs/SendGrid/Integrations/SendGrid/SendGrid.py @@ -6,7 +6,7 @@ import dateutil.parser from sendgrid import SendGridAPIClient -from sendgrid.helpers.mail import * +from sendgrid.helpers.mail import * # nopycln: import # IMPORTS @@ -36,7 +36,7 @@ def process_attachments(message, attachIDs="", attachNames=""): try: res = demisto.getFilePath(entry_id) except Exception as ex: - raise Exception("entry {} does not contain a file: {}".format(entry_id, str(ex))) + raise Exception(f"entry {entry_id} does not contain a file: {str(ex)}") file_path = res["path"] with open(file_path, 'rb') as f: f_data = f.read() @@ -79,9 +79,8 @@ def get_email_activity_list(args: dict, sg): rBody = response.body body = json.loads(rBody.decode("utf-8")) ec = {'Sendgrid.EmailList': body['messages']} - if headers: - if isinstance(headers, str): - headers = headers.split(",") + if headers and isinstance(headers, str): + headers = headers.split(",") md = tableToMarkdown('Email List: ', body['messages'], headers) return { 'ContentsFormat': formats['json'], @@ -267,9 +266,8 @@ def get_global_email_stats(args: dict, sg): res['unsubscribes'] = metrics['unsubscribes'] mail_stats.append(res) - if headers: - if isinstance(headers, str): - headers = headers.split(",") + if headers and isinstance(headers, str): + headers = headers.split(",") md = tableToMarkdown("Global Email Statistics", mail_stats, headers) ec = {'Sendgrid.GlobalEmailStats': mail_stats} return { @@ -337,9 +335,8 @@ def get_category_stats(args: dict, sg): res['unsubscribes'] = metrics['unsubscribes'] cat_stats.append(res) - if headers: - if isinstance(headers, str): - headers = headers.split(",") + if headers and isinstance(headers, str): + headers = headers.split(",") md = tableToMarkdown("Statistics for the Category: " + res['category'], cat_stats, headers) ec = {'Sendgrid.CategoryStats': cat_stats} return { @@ -413,9 +410,8 @@ def get_all_categories_stats(args: dict, sg): res['unsubscribes'] = metrics['unsubscribes'] cat_stats.append(res) - if headers: - if isinstance(headers, str): - headers = headers.split(",") + if headers and isinstance(headers, str): + headers = headers.split(",") md = tableToMarkdown("Sum of All Categories Statistics from " + body['date'], cat_stats, headers) ec = {'Sendgrid.AllCategoriesStats': body} return { @@ -511,14 +507,14 @@ def send_mail(args: dict, sg_from_email: str, sg_sender_name: str, sg): click_tracking = args.get('ClickTracking') if click_tracking: click_tracking = click_tracking if type(click_tracking) is dict else json.loads(click_tracking) - is_enable = False if click_tracking["enable"] == 'False' else True + is_enable = click_tracking["enable"] != "False" tracking_settings.click_tracking = ClickTracking(is_enable, # type: ignore[name-defined] click_tracking["enable_text"]) open_tracking = args.get('OpenTracking') if open_tracking: open_tracking = open_tracking if type(open_tracking) is dict else json.loads(open_tracking) - is_enable = False if open_tracking["enable"] == 'False' else True + is_enable = open_tracking["enable"] != "False" tracking_settings.open_tracking = OpenTracking( # type: ignore[name-defined] is_enable, OpenTrackingSubstitutionTag(open_tracking["substitution_tag"])) # type: ignore[name-defined] @@ -526,7 +522,7 @@ def send_mail(args: dict, sg_from_email: str, sg_sender_name: str, sg): sub_tracking = args.get('SubscriptionTracking') if sub_tracking: sub_tracking = sub_tracking if type(sub_tracking) is dict else json.loads(sub_tracking) - is_enable = False if sub_tracking["enable"] == 'False' else True + is_enable = sub_tracking["enable"] != "False" tracking_settings.subscription_tracking = SubscriptionTracking( # type: ignore[name-defined] is_enable, SubscriptionText(sub_tracking["text"]), # type: ignore[name-defined] @@ -536,7 +532,7 @@ def send_mail(args: dict, sg_from_email: str, sg_sender_name: str, sg): ganalytics = args.get('GAnalytics') if ganalytics: ganalytics = ganalytics if type(ganalytics) is dict else json.loads(ganalytics) - is_enable = False if ganalytics["enable"] == 'False' else True + is_enable = ganalytics["enable"] != "False" tracking_settings.ganalytics = Ganalytics( # type: ignore[name-defined] is_enable, UtmSource(ganalytics["utm_source"]), # type: ignore[name-defined] @@ -552,7 +548,7 @@ def send_mail(args: dict, sg_from_email: str, sg_sender_name: str, sg): bcc_mail_set = args.get('BccSettings') if bcc_mail_set: bcc_mail_set = bcc_mail_set if type(bcc_mail_set) is dict else json.loads(bcc_mail_set) - is_enable = False if bcc_mail_set["enable"] == 'False' else True + is_enable = bcc_mail_set["enable"] != "False" mail_settings.bcc_settings = BccSettings( # type: ignore[name-defined] is_enable, BccSettingsEmail(bcc_mail_set["email"])) # type: ignore[name-defined] @@ -560,7 +556,7 @@ def send_mail(args: dict, sg_from_email: str, sg_sender_name: str, sg): footer = args.get('Footer') if footer: footer = footer if type(footer) is dict else json.loads(footer) - is_enable = False if footer["enable"] == 'False' else True + is_enable = footer["enable"] != "False" mail_settings.footer_settings = FooterSettings( # type: ignore[name-defined] is_enable, FooterText(footer["text"]), # type: ignore[name-defined] @@ -569,7 +565,7 @@ def send_mail(args: dict, sg_from_email: str, sg_sender_name: str, sg): spam_check = args.get('SpamCheck') if spam_check: spam_check = spam_check if type(spam_check) is dict else json.loads(spam_check) - is_enable = False if spam_check["enable"] == 'False' else True + is_enable = spam_check["enable"] != "False" mail_settings.spam_check = SpamCheck( # type: ignore[name-defined] is_enable, SpamThreshold(spam_check["threshold"]), # type: ignore[name-defined] @@ -577,12 +573,12 @@ def send_mail(args: dict, sg_from_email: str, sg_sender_name: str, sg): sandbox_mode = args.get('SandboxMode') if sandbox_mode: - sandbox_mode = False if sandbox_mode == 'False' else True + sandbox_mode = sandbox_mode != "False" mail_settings.sandbox_mode = SandBoxMode(sandbox_mode) # type: ignore[name-defined] bypass_list_management = args.get('BypassListManagement') if bypass_list_management: - bypass_list_management = False if bypass_list_management == 'False' else True + bypass_list_management = bypass_list_management != "False" mail_settings.bypass_list_management = BypassListManagement(bypass_list_management) # type: ignore[name-defined] message.mail_settings = mail_settings @@ -653,9 +649,8 @@ def get_all_lists(args: dict, sg): rBody = response.body body = json.loads(rBody.decode("utf-8")) ec = {'Sendgrid.Lists.Result': body['result'], 'Sendgrid.Lists.Metadata': body['_metadata']} - if headers: - if isinstance(headers, str): - headers = headers.split(",") + if headers and isinstance(headers, str): + headers = headers.split(",") md = tableToMarkdown('Lists information was fetched successfully: ', body['result'], headers) return { 'ContentsFormat': formats['json'], @@ -673,7 +668,7 @@ def get_list_by_id(args: dict, sg): params = {} contactSample = args.get('contact_sample') if contactSample: - params['contact_sample'] = False if contactSample == 'False' else True + params['contact_sample'] = contactSample != "False" response = sg.client.marketing.lists._(listID).get(query_params=params) if response.status_code == 200: @@ -759,7 +754,7 @@ def delete_list(args: dict, sg): params = {} deleteContacts = args.get('delete_contacts') if deleteContacts: - params['delete_contacts'] = False if deleteContacts == 'False' else True + params['delete_contacts'] = deleteContacts != "False" response = sg.client.marketing.lists._(listID).delete(query_params=params) if response.status_code == 200: diff --git a/Packs/SendGrid/Integrations/SendGrid/SendGrid.yml b/Packs/SendGrid/Integrations/SendGrid/SendGrid.yml index e61738965645..b3fda1eb6452 100644 --- a/Packs/SendGrid/Integrations/SendGrid/SendGrid.yml +++ b/Packs/SendGrid/Integrations/SendGrid/SendGrid.yml @@ -24,7 +24,7 @@ script: - description: A CSV list of to email recipients. Make sure To, Cc and Bcc emails are unique. name: ToEmails required: true - - description: Email subject + - description: Email subject. name: Subject required: true - description: html content of email. @@ -34,25 +34,25 @@ script: name: RawBody - description: Reply To email. name: ReplyTo - - description: 'List of categories. For example: cake,pie,baking' + - description: 'List of categories. For example: cake,pie,baking.' name: Categories - description: An ID representing a batch of emails to be sent at the same time. name: BatchID - - description: 'An UTC time allowing you to specify when you want your email to be delivered. Delivery cannot be scheduled more than 72 hours in advance. ISO format(UTC timezone): 2021-04-23T12:07:44' + - description: 'An UTC time allowing you to specify when you want your email to be delivered. Delivery cannot be scheduled more than 72 hours in advance. ISO format(UTC timezone): 2021-04-23T12:07:44.' name: SendAt - - description: 'An object allowing you to specify how to handle unsubscribes. For example: {"group_id": 12345,"groups_to_display":[1,2,3]}' + - description: 'An object allowing you to specify how to handle unsubscribes. For example: {"group_id": 12345,"groups_to_display":[1,2,3]}.' name: Asm - description: The IP Pool that you would like to send this email from. name: IPPoolName - - description: 'Allows you to track if a recipient clicked a link in your email. For ex: {"enable": "True","enable_text": True}' + - description: 'Allows you to track if a recipient clicked a link in your email. For ex: {"enable": "True","enable_text": True}.' name: ClickTracking - - description: 'Allows you to enable tracking provided by Google Analytics. For ex: {"enable": "True","utm_campaign": "[NAME OF YOUR REFERRER SOURCE]","utm_content": "[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]","utm_medium": "[NAME OF YOUR MARKETING MEDIUM e.g. email]","utm_name": "[NAME OF YOUR CAMPAIGN]","utm_term": "[IDENTIFY PAID KEYWORDS HERE]","utm_source":"[Name of the referrer source]"}' + - description: 'Allows you to enable tracking provided by Google Analytics. For ex: {"enable": "True","utm_campaign": "[NAME OF YOUR REFERRER SOURCE]","utm_content": "[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]","utm_medium": "[NAME OF YOUR MARKETING MEDIUM e.g. email]","utm_name": "[NAME OF YOUR CAMPAIGN]","utm_term": "[IDENTIFY PAID KEYWORDS HERE]","utm_source":"[Name of the referrer source]"}.' name: GAnalytics - - description: 'Allows you to track if the email was opened by including a single pixel image in the body of the content. When the pixel is loaded, Twilio SendGrid can log that the email was opened. For ex: {"enable": "True","substitution_tag": "%opentrack"}' + - description: 'Allows you to track if the email was opened by including a single pixel image in the body of the content. When the pixel is loaded, Twilio SendGrid can log that the email was opened. For ex: {"enable": "True","substitution_tag": "%opentrack"}.' name: OpenTracking - - description: 'Allows you to insert a subscription management link at the bottom of the text and HTML bodies of your email. If you would like to specify the location of the link within your email, you may use the substitution_tag. For ex: {"enable": "True","html": "If you would like to unsubscribe and stop receiving these emails <% clickhere %>.","substitution_tag": "<%click here%>","text": "If you would like to unsubscribe and stop receiving these emails <% click here %>."}' + - description: 'Allows you to insert a subscription management link at the bottom of the text and HTML bodies of your email. If you would like to specify the location of the link within your email, you may use the substitution_tag. For ex: {"enable": "True","html": "If you would like to unsubscribe and stop receiving these emails <% clickhere %>.","substitution_tag": "<%click here%>","text": "If you would like to unsubscribe and stop receiving these emails <% click here %>."}.' name: SubscriptionTracking - - description: 'Bcc email settings. For ex: {"email": "ben.doe@example.com", "enable": True }' + - description: 'Bcc email settings. For ex: {"email": "ben.doe@example.com", "enable": True }.' name: BccSettings - auto: PREDEFINED description: Allows you to bypass all unsubscribe groups and suppressions to ensure that the email is delivered to every single recipient. @@ -66,15 +66,15 @@ script: predefined: - 'True' - 'False' - - description: 'The default footer that you would like included on every email. For ex: {"enable": "True","html": "
ThanksThe SendGrid Team
","text": "Thanks,/n The SendGrid Team"}' + - description: 'The default footer that you would like included on every email. For ex: {"enable": "True","html": "ThanksThe SendGrid Team
","text": "Thanks,/n The SendGrid Team"}.' name: Footer - - description: 'Spam Check allows you to test the content of your email for spam. For ex: {"enable": "True","post_to_url": "http://example.com/compliance","threshold": 3}' + - description: 'Spam Check allows you to test the content of your email for spam. For ex: {"enable": "True","post_to_url": "http://example.com/compliance","threshold": 3}.' name: SpamCheck - - description: 'A collection of JSON key/value pairs allowing you to specify handling instructions for your email. You may not overwrite the following headers: x-sg-id, x-sg-eid, received, dkim-signature, Content-Type, Content-Transfer-Encoding, To, From, Subject, Reply-To, CC, BCC. For ex: {"key1":"value1","key2":"value2","key3":"value3"}' + - description: 'A collection of JSON key/value pairs allowing you to specify handling instructions for your email. You may not overwrite the following headers: x-sg-id, x-sg-eid, received, dkim-signature, Content-Type, Content-Transfer-Encoding, To, From, Subject, Reply-To, CC, BCC. For ex: {"key1":"value1","key2":"value2","key3":"value3"}.' name: Headers - description: An email template ID. A template that contains a subject and content — either text or html — will override any subject and content values specified at the personalisations or message level. name: TemplateID - - description: 'Values that are specific to this personalization that will be carried along with the email and its activity data. Substitutions will not be made on custom arguments, so any string that is entered into this parameter will be assumed to be the custom argument that you would like to be used. This field may not exceed 10,000 bytes. For Ex: {"marketing": "true","activationAttempt": "1","customerAccountNumber": "1234"}' + - description: 'Values that are specific to this personalization that will be carried along with the email and its activity data. Substitutions will not be made on custom arguments, so any string that is entered into this parameter will be assumed to be the custom argument that you would like to be used. This field may not exceed 10,000 bytes. For Ex: {"marketing": "true","activationAttempt": "1","customerAccountNumber": "1234"}.' name: CustomArgs - description: 'A CSV list of War Room entry IDs that contain files, and are used to attach files to the outgoing email. For example: attachIDs=15@8,19@8.' name: AttachIDs @@ -103,7 +103,7 @@ script: required: true - description: The end date of the statistics to retrieve. Defaults to today. Must follow format YYYY-MM-DD. name: end_date - - description: 'Table headers to use the human readable output (if none provided, will show all table headers). Available headers: blocks,bounce_drops,bounces,clicks,date,deferred,delivered,invalid_emails,opens,processed,requests,spam_report_drops,spam_reports,unique_clicks,unique_opens,unsubscribe_drops,unsubscribes' + - description: 'Table headers to use the human readable output (if none provided, will show all table headers). Available headers: blocks,bounce_drops,bounces,clicks,date,deferred,delivered,invalid_emails,opens,processed,requests,spam_report_drops,spam_reports,unique_clicks,unique_opens,unsubscribe_drops,unsubscribes.' name: headers description: Retrieves all of your global email statistics between a given date range. name: sg-get-global-email-stats @@ -126,11 +126,11 @@ script: - day - week - month - - description: 'The number of results to include. default: 500 maximum: 500' + - description: 'The number of results to include. default: 500 maximum: 500.' name: limit - description: The number of results to skip. name: offset - - description: 'Table headers to use the human readable output (if none provided, will show all table headers). Available headers: blocks,bounce_drops,bounces,clicks,date,deferred,delivered,invalid_emails,opens,processed,requests,spam_report_drops,spam_reports,unique_clicks,unique_opens,unsubscribe_drops,unsubscribes' + - description: 'Table headers to use the human readable output (if none provided, will show all table headers). Available headers: blocks,bounce_drops,bounces,clicks,date,deferred,delivered,invalid_emails,opens,processed,requests,spam_report_drops,spam_reports,unique_clicks,unique_opens,unsubscribe_drops,unsubscribes.' name: headers description: Retrieves all of your email statistics for each of your categories. name: sg-get-category-stats @@ -153,7 +153,7 @@ script: - week - month - auto: PREDEFINED - description: 'The metric that you want to sort by. Must be a single metric. default: delivered' + description: 'The metric that you want to sort by. Must be a single metric. default: delivered.' name: sort_by_metric predefined: - blocks @@ -173,14 +173,14 @@ script: - unsubscribe_drops - unsubscribes - auto: PREDEFINED - description: 'The direction you want to sort. Allowed Values: desc, asc default: desc' + description: 'The direction you want to sort. Allowed Values: desc, asc default: desc.' name: sort_by_direction predefined: - asc - desc - description: The point in the list to begin retrieving results. name: offset - - description: 'Table headers to use the human readable output (if none provided, will show all table headers). Available headers: blocks,bounce_drops,bounces,clicks,date,deferred,delivered,invalid_emails,opens,processed,requests,spam_report_drops,spam_reports,unique_clicks,unique_opens,unsubscribe_drops,unsubscribes' + - description: 'Table headers to use the human readable output (if none provided, will show all table headers). Available headers: blocks,bounce_drops,bounces,clicks,date,deferred,delivered,invalid_emails,opens,processed,requests,spam_report_drops,spam_reports,unique_clicks,unique_opens,unsubscribe_drops,unsubscribes.' name: headers description: 'Retrieves the total sum of each email statistic for every category over the given date range. By default it returns only 5 categories. Use limit= argument to define the number of categories to return. ' name: sg-get-all-categories-stats @@ -190,9 +190,9 @@ script: - arguments: - description: Allows you to perform a prefix search on this particular category. name: category - - description: 'The number of categories to display per page. Default: 50' + - description: 'The number of categories to display per page. Default: 50.' name: limit - - description: 'The point in the list that you would like to begin displaying results. Default: 0' + - description: 'The point in the list that you would like to begin displaying results. Default: 0.' name: offset description: Retrieves a list of all of your categories. name: sg-list-categories @@ -257,12 +257,12 @@ script: name: sg-delete-scheduled-send - arguments: - defaultValue: '10' - description: The number of messages returned. This parameter must be greater than 0 and less than or equal to 1000 + description: The number of messages returned. This parameter must be greater than 0 and less than or equal to 1000. name: limit required: true - description: 'Use the query syntax to filter your email activity. For example: query to get email list for category - "Last Login": query=`(Contains(categories,"Last Login"))` Document link for query samples: https://docs.sendgrid.com/for-developers/sending-email/getting-started-email-activity-api#query-reference' name: query - - description: 'Table headers to use the human readable output (if none provided, will show all table headers). Available headers: clicks_count,from_email,last_event_time,msg_id,opens_count,status,subject,to_email' + - description: 'Table headers to use the human readable output (if none provided, will show all table headers). Available headers: clicks_count,from_email,last_event_time,msg_id,opens_count,status,subject,to_email.' name: headers description: "Retrieves the email activity list associated with the messages matching your query. If no query provided, it returns a list of most recent emails you've sent. NOTE: This Email Activity API returns email list up to last 30 days." name: sg-get-email-activity-list @@ -270,26 +270,26 @@ script: - contextPath: Sendgrid.EmailList description: Email activity list associated with the messages matching your query. - arguments: - - description: 'Maximum number of elements to return. returns 1000 max. default: 100' + - description: 'Maximum number of elements to return. returns 1000 max. default: 100.' name: page_size - - description: 'Token corresponding to a specific page of results, as provided by metadata. default: None' + - description: 'Token corresponding to a specific page of results, as provided by metadata. default: None.' name: page_token - - description: 'Table headers to use the human readable output (if none provided, will show all table headers). Available headers: id, name, contact_count, _metadata' + - description: 'Table headers to use the human readable output (if none provided, will show all table headers). Available headers: id, name, contact_count, _metadata.' name: headers description: Retrieves all of your recipient lists. If you don't have any lists, an empty array will be returned. name: sg-get-all-lists outputs: - contextPath: Sendgrid.Lists.Result - description: Array of your contact lists + description: Array of your contact lists. - contextPath: Sendgrid.Lists.Metadata - description: Metadata of returned set of result + description: Metadata of returned set of result. - arguments: - - description: ID of contact list + - description: ID of contact list. name: list_id required: true - auto: PREDEFINED defaultValue: 'False' - description: Setting the optional parameter contact_sample=true returns the contact_sample in the response body. Up to fifty of the most recent contacts uploaded or attached to a list will be returned, sorted alphabetically, by email address. Default:False + description: Setting the optional parameter contact_sample=true returns the contact_sample in the response body. Up to fifty of the most recent contacts uploaded or attached to a list will be returned, sorted alphabetically, by email address. Default:False. name: contact_sample predefined: - 'True' @@ -298,54 +298,54 @@ script: name: sg-get-list-by-id outputs: - contextPath: Sendgrid.List - description: Contact list details + description: Contact list details. - arguments: - - description: Name for your list + - description: Name for your list. name: list_name required: true - description: Creates a new contacts list + description: Creates a new contacts list. name: sg-create-list outputs: - contextPath: Sendgrid.NewList - description: Newly created List details + description: Newly created List details. - arguments: - - description: ID of contact list + - description: ID of contact list. name: list_id required: true - description: Returns the number of contacts on a specific list + description: Returns the number of contacts on a specific list. name: sg-get-list-contact-count-by-id outputs: - contextPath: Sendgrid.ListCount - description: List contact count details + description: List contact count details. - arguments: - - description: ID of contact list + - description: ID of contact list. name: list_id required: true - - description: New name for your list + - description: New name for your list. name: updated_list_name required: true - description: Updates the name of a list + description: Updates the name of a list. name: sg-update-list-name outputs: - contextPath: Sendgrid.updatedList - description: Updated list details + description: Updated list details. - arguments: - - description: ID of contact list or job Id + - description: ID of contact list or job Id. name: list_id required: true - auto: PREDEFINED defaultValue: 'False' - description: 'Flag indicates that all contacts on the list are also to be deleted. default: False' + description: 'Flag indicates that all contacts on the list are also to be deleted. default: False.' name: delete_contacts predefined: - 'True' - 'False' - description: Deletes a specific list + description: Deletes a specific list. name: sg-delete-list outputs: - contextPath: Sendgrid.DeleteListJobId - description: 'Job id of the async job' - dockerimage: demisto/py3-tools:1.0.0.49572 + description: 'Job id of the async job.' + dockerimage: demisto/py3-tools:1.0.0.73969 script: '' subtype: python3 type: python diff --git a/Packs/SendGrid/ReleaseNotes/1_1_3.md b/Packs/SendGrid/ReleaseNotes/1_1_3.md new file mode 100644 index 000000000000..2c71c2a27b87 --- /dev/null +++ b/Packs/SendGrid/ReleaseNotes/1_1_3.md @@ -0,0 +1,6 @@ + +#### Integrations + +##### SendGrid + +Updated the Docker image to: *demisto/py3-tools:1.0.0.73969*. diff --git a/Packs/SendGrid/pack_metadata.json b/Packs/SendGrid/pack_metadata.json index cdc9e7e30bfa..225cfe5517cc 100644 --- a/Packs/SendGrid/pack_metadata.json +++ b/Packs/SendGrid/pack_metadata.json @@ -2,7 +2,7 @@ "name": "SendGrid", "description": "SendGrid provides a cloud-based service that assists businesses with email delivery. It allows companies to track email opens, unsubscribes, bounces, and spam reports. Our SendGrid pack utilize these SendGrid use cases to help you send and manage your emails.", "support": "community", - "currentVersion": "1.1.2", + "currentVersion": "1.1.3", "author": "Sharat Patil", "url": "", "email": "",