diff --git a/components/site/analystHomePageContent.tsx b/components/site/analystHomePageContent.tsx index 163069aca..3ada9a6ee 100644 --- a/components/site/analystHomePageContent.tsx +++ b/components/site/analystHomePageContent.tsx @@ -22,7 +22,7 @@ const gettingStarted = { }, { url: '/analyst/competitive-tracker/', - title: 'Competitve Tracker', + title: 'Competitive Tracker', desc: 'Guides for optimizing your use of Competitive Tracker', linkText: 'Learn More', }, @@ -59,7 +59,7 @@ const help = { ), content: [ - { text: 'Submit a ticket', url: 'mailto:support@emailanalyst.com', Icon: Feedback }, + { text: 'Submit a ticket', url: 'mailto:support@edatasource.com', Icon: Feedback }, ], }; diff --git a/components/site/analystNavigation.tsx b/components/site/analystNavigation.tsx index c2ccd5bdf..ea5ba9fbb 100644 --- a/components/site/analystNavigation.tsx +++ b/components/site/analystNavigation.tsx @@ -15,7 +15,7 @@ const AnalystNavigation = (props: NavigationProps): JSX.Element | null => { return ( - + diff --git a/content/analyst/inbox-and-design-tracker/how-to-use-account-ip-management.md b/content/analyst/inbox-and-design-tracker/how-to-use-account-ip-management.md new file mode 100644 index 000000000..474731b54 --- /dev/null +++ b/content/analyst/inbox-and-design-tracker/how-to-use-account-ip-management.md @@ -0,0 +1,81 @@ +--- +lastUpdated: '06/22/2023' +title: 'How to Use Account IP Management' +description: 'This is an account-level setting. The platform will automatically detect your sending IPs based on the traffic from your sending domains. Those IPs will appear in the “Likely IPs” section. You may customize this by creating static groups of IPs. As you add or remove IPs from your sending infrastructure, you must make those changes in your IP groups as well.' +--- + + +*This is an account-level setting. The platform will automatically detect your sending IPs based on the traffic from your sending domains. Those IPs will appear in the “Likely IPs” section. You may customize this by creating static groups of IPs. As you add or remove IPs from your sending infrastructure, you must make those changes in your IP groups as well.* + +**Note:** You must have a Manager role to be able to access the Account IP Management page. + + +## Add a new IP Address to a new IP Group + +Select the User Cog + +Under Account Settings, select Account IP Management + +![](media/how-to-use-account-ip-management/it-dropdown-menu.png) + +Select New + +![](media/how-to-use-account-ip-management/new-ip-group.png) + +Enter the name of your new IP Group and then select Create + +![](media/how-to-use-account-ip-management/create-ip-group.png) + +Enter the IP Address and then select Add IP Address + +![](media/how-to-use-account-ip-management/add-ip-address.png) + +## Add a new IP Address to an existing IP Group + +Select the User Cog + +Under Account Settings, select Account IP Management + +![](media/how-to-use-account-ip-management/it-dropdown-menu.png) + +Select View All and then select the IP Group + +![](media/how-to-use-account-ip-management/view-all-select.png) + +Enter the IP Address and then select Add IP Address + +![](media/how-to-use-account-ip-management/add-ip-address.png) + +## Add Bulk Upload of IP Addresses + +Select Select File and choose your list to upload. + +![](media/how-to-use-account-ip-management/select-file.png) + +The file upload only supports .txt format + +The file shall only have 1 IP Address per line in the format 10.10.0.1 + +![](media/how-to-use-account-ip-management/process-file.png) + +Select Process File + +## Remove an IP Group + +Select the User Cog + +Under Account Settings, select Account IP Management + +![](media/how-to-use-account-ip-management/it-dropdown-menu.png) + +Select View All and then select the IP Group + +![](media/how-to-use-account-ip-management/view-all-select.png) + +Select Delete + +![](media/how-to-use-account-ip-management/delete-ip-group.png) + +Select Delete to confirm + +![](media/how-to-use-account-ip-management/confirm-delete.png) diff --git a/content/analyst/inbox-and-design-tracker/how-to-use-analytics-tracker.md b/content/analyst/inbox-and-design-tracker/how-to-use-analytics-tracker.md index 0d2b08704..2dbfefe72 100644 --- a/content/analyst/inbox-and-design-tracker/how-to-use-analytics-tracker.md +++ b/content/analyst/inbox-and-design-tracker/how-to-use-analytics-tracker.md @@ -1,63 +1,58 @@ --- -lastUpdated: "02/23/2023" +lastUpdated: "05/02/2023" title: How to Use Analytics Tracker description: Interested to learn more about your subscribers? Create a tracking pixel to include in your email campaigns. --- -## Place the EDS engagement pixel in the HTML of your next email campaign to find out: +## Use the tracking pixel in your next email campaign to find out: -* How much time subscribers spend reading the email -* What browser or device they open with -* Where in the world they're located when they interact with the campaign +* What browser or device are used to open the email +* What regions recipients are located in when they interact with the email -**Navigate to Analytics Tracker and select “New Tracking Code”** +Watch this short [video to learn how to use Analytics Tracker](https://www.veed.io/view/b458f788-07e1-4553-b743-2d469a356ba2?panel=share). -![](media/how_to_use_analytics_tracker/image_0.png) +## Create a new tracking code: ## -**Follow the simple steps to create the tracking code:** +### 1. Navigate to Analytics Tracker and select “New Analytics Campaign” -1. Enter a name that you will recognize and connect to the email campaign -2. Select the sending domain that you will use for the email campaign -3. Set an expiration date when we should stop collecting new engagement data for this campaign +![](media/how_to_use_analytics_tracker/newanalyticscampaign.png) -![](media/how_to_use_analytics_tracker/image_1.png) +### 2. Name Your Tracking Code - Next, select your email deployment software (If you don’t see your ESP in the list, select “Other” and input the merge tag that your provider uses to dynamically publish the recipient’s email address into your email content. Example: %%emailaddr%%) +- Enter a tracking code name +- Set an expiration date for tracking this campaign +- Click "Select your marketing software" button to proceed to the next step. -![](media/how_to_use_analytics_tracker/image_2.png) +![](media/how_to_use_analytics_tracker/trackingcode.png) - Copy the tracking code and place it into your HTML. Once added, send a preview of your email campaign to the test address shown (Pro Tip: If this isn’t your first rodeo, “Skip this” to end the tracking code setup): +### 3. Place the Tracking Code in Your Email -![](media/how_to_use_analytics_tracker/image_3.png) +- From the pulldown, select your email deployment software. If you don’t see your ESP in the list, select “Other” and input the merge tag that your provider uses to dynamically publish the recipient’s email address into your email content. Example: `%%emailaddr%%` +- Copy the tracking code, paste it into your HTML, and select Done. If you want to verify the tracking code before deployment select the "Verify Code" button. +- After you email the campaign, come back to Analytics Tracker and view the results for the campaign. - Once you’ve mailed the campaign, come back to Analytics Tracker and view the results for the campaign. Each time one of your subscriber's opens the email containing the pixel, that is one Analytics event. Data will continue to be collected until the expiration date that you defined in the tracking code setup. +![](media/how_to_use_analytics_tracker/trackingcode2.png) -## Scheduled Analytics Exports - - We've made exporting Analytics campaigns a whole lot easier! You can now schedule an events export for 'daily' or 'weekly' during an active campaign, or 'upon expiration' of the campaign tracking. - - Here is a look at the all the export options that are available: +*Note: Each time one of your subscriber's opens the email containing the pixel, that is one Analytics event. Data will continue to be collected until the expiration date that you defined in the tracking code setup.* -![](media/how_to_use_analytics_tracker/image_4.png) - - Use your findings to prioritize optimization of your email template across email clients, browser and devices. Understand where your subscribers are located throughout the world and how much time they spend viewing your email. - -![](media/how_to_use_analytics_tracker/image_5.png) +## Scheduled Analytics Exports +We've made exporting Analytics campaigns a whole lot easier! You can now schedule an events export for 'daily' or 'weekly' during an active campaign, or 'upon expiration' of the campaign tracking. -![](media/how_to_use_analytics_tracker/image_6.png) +Here are all the available export options: +![](media/how_to_use_analytics_tracker/export.png) -![](media/how_to_use_analytics_tracker/image_7.png) +Use your findings to prioritize optimization of your email template across email clients, browser and devices. Understand where your subscribers are located throughout the world and how much time they spend viewing your email. +![](media/how_to_use_analytics_tracker/counts.png) -![](media/how_to_use_analytics_tracker/image_8.png) +![](media/how_to_use_analytics_tracker/engagement.png) -![](media/how_to_use_analytics_tracker/image_9.png) +![](media/how_to_use_analytics_tracker/emailclients.png) -![](media/how_to_use_analytics_tracker/image_10.png) +![](media/how_to_use_analytics_tracker/geolocation.png) -![](media/how_to_use_analytics_tracker/image_11.png) diff --git a/content/analyst/inbox-and-design-tracker/how-to-use-design-tracker.md b/content/analyst/inbox-and-design-tracker/how-to-use-design-tracker.md new file mode 100644 index 000000000..bc035f9fa --- /dev/null +++ b/content/analyst/inbox-and-design-tracker/how-to-use-design-tracker.md @@ -0,0 +1,52 @@ +--- +lastUpdated: "08/23/2023" +title: How to Use Design Tracker +description: Design Tracker lets you see what your email looks like in common inboxes and devices. Use this to find rendering issues before you send your email. +--- + +Design Tracker lets you see what your HTML email looks like in common email clients and devices. Use these email previews to catch rendering issues before you send your campaign. + +Available with all Inbox Tracker accounts. Watch this short video on [how to use Design Tracker](https://www.veed.io/view/3efe7959-d835-4a00-948c-93e4a0394871?panel=share) to test your emails. + +**Note**: This feature is currently in **Beta** and available to all Inbox Tracker accounts. + +## Test a new email campaign + +There are two ways to test an email in Design Tracker: +- Send an email to a static email address +- Paste an email's HTML into a field and submit it + +### Send an email to a static email address +- Enable your static email address. + - In the Design Tracker tab, click on the **Configure** button in the top-right corner and select **Manage static email address**. + - Click the **Enable** button in the module provided. + - Copy the static email address. +- You can now send your email to the static email address from wherever you create your campaign. + +### Paste an email's HTML into a field and submit it +- In the Design Tracker tab, click the **New Email Preview Test** button in the top right corner. +- Fill in the internal **Test Name** field. +- Select the preview options you want to test your email with. +- Paste an email's HTML into the **Email HTML** field. +- Scroll down to click **Test Email Design**. You can leave the page while the test is running. + +## Retest an email campaign +You can use either method of testing to retest the same email. Design Tracker will group emails based on Subject Line, so if you previously submitted your HTML directly but would now like to send to the static email, use the same Subject Line to have both test results appear in the same **Email Previews Dashboard**. You can then go between them using the drop-down menu that appears when an email has more than one test. + +![Retested Email Results drop-down](media/how-to-use-design-tracker/retest-email-results-dropdown.png) + +### Retest an email campaign using the static email address +- Send your updated email to your static email address. +- If the subject line remains the same, the new previews will show up in the same-named test. + +### Retest an email campaign by pasting and submitting the HTML +- From the _Email Previews Dashboard_ of a tested email, click the **Retest Email** button in the top-right corner. +- Paste the email's new HTML into the HTML field. +- Scroll down to click **Submit Test**. You can leave the page while the test is running. + +## Other features +- Use the _Approved / Not Approved_ buttons to indicate whether the previewed email looks good or not. + - This is an account-wide indicator. If another user looks at the _Email Preview Test Results_ after you've made a selection, they will see that selection. +- Export email test results using the **Export Results** button on the _Email Preview Test Results_ screen. +- Use the **Archive Test** button to hide tests from the _Email Previews Dashboard_. See archived tests by clicking the **Show** button next to **View Archived**, above the list of tests. +- Manage which email client/device options are used for tests made by the static email address in **Configure** >> **Manage Default Test Clients**. diff --git a/content/analyst/inbox-and-design-tracker/media/how-to-use-account-ip-management/add-ip-address.png b/content/analyst/inbox-and-design-tracker/media/how-to-use-account-ip-management/add-ip-address.png new file mode 100644 index 000000000..eaf42ed7d Binary files /dev/null and b/content/analyst/inbox-and-design-tracker/media/how-to-use-account-ip-management/add-ip-address.png differ diff --git a/content/analyst/inbox-and-design-tracker/media/how-to-use-account-ip-management/confirm-delete.png b/content/analyst/inbox-and-design-tracker/media/how-to-use-account-ip-management/confirm-delete.png new file mode 100644 index 000000000..b7c3913c8 Binary files /dev/null and b/content/analyst/inbox-and-design-tracker/media/how-to-use-account-ip-management/confirm-delete.png differ diff --git a/content/analyst/inbox-and-design-tracker/media/how-to-use-account-ip-management/create-ip-group.png b/content/analyst/inbox-and-design-tracker/media/how-to-use-account-ip-management/create-ip-group.png new file mode 100644 index 000000000..06f6b71fe Binary files /dev/null and b/content/analyst/inbox-and-design-tracker/media/how-to-use-account-ip-management/create-ip-group.png differ diff --git a/content/analyst/inbox-and-design-tracker/media/how-to-use-account-ip-management/delete-ip-group.png b/content/analyst/inbox-and-design-tracker/media/how-to-use-account-ip-management/delete-ip-group.png new file mode 100644 index 000000000..55dfc6aa2 Binary files /dev/null and b/content/analyst/inbox-and-design-tracker/media/how-to-use-account-ip-management/delete-ip-group.png differ diff --git a/content/analyst/inbox-and-design-tracker/media/how-to-use-account-ip-management/it-dropdown-menu.png b/content/analyst/inbox-and-design-tracker/media/how-to-use-account-ip-management/it-dropdown-menu.png new file mode 100644 index 000000000..29cfc97ba Binary files /dev/null and b/content/analyst/inbox-and-design-tracker/media/how-to-use-account-ip-management/it-dropdown-menu.png differ diff --git a/content/analyst/inbox-and-design-tracker/media/how-to-use-account-ip-management/new-ip-group.png b/content/analyst/inbox-and-design-tracker/media/how-to-use-account-ip-management/new-ip-group.png new file mode 100644 index 000000000..e6501f507 Binary files /dev/null and b/content/analyst/inbox-and-design-tracker/media/how-to-use-account-ip-management/new-ip-group.png differ diff --git a/content/analyst/inbox-and-design-tracker/media/how-to-use-account-ip-management/process-file.png b/content/analyst/inbox-and-design-tracker/media/how-to-use-account-ip-management/process-file.png new file mode 100644 index 000000000..9a51c517d Binary files /dev/null and b/content/analyst/inbox-and-design-tracker/media/how-to-use-account-ip-management/process-file.png differ diff --git a/content/analyst/inbox-and-design-tracker/media/how-to-use-account-ip-management/select-file.png b/content/analyst/inbox-and-design-tracker/media/how-to-use-account-ip-management/select-file.png new file mode 100644 index 000000000..4ea47a4e3 Binary files /dev/null and b/content/analyst/inbox-and-design-tracker/media/how-to-use-account-ip-management/select-file.png differ diff --git a/content/analyst/inbox-and-design-tracker/media/how-to-use-account-ip-management/view-all-select.png b/content/analyst/inbox-and-design-tracker/media/how-to-use-account-ip-management/view-all-select.png new file mode 100644 index 000000000..85a8f8c18 Binary files /dev/null and b/content/analyst/inbox-and-design-tracker/media/how-to-use-account-ip-management/view-all-select.png differ diff --git a/content/analyst/inbox-and-design-tracker/media/how-to-use-design-tracker/retest-email-results-dropdown.png b/content/analyst/inbox-and-design-tracker/media/how-to-use-design-tracker/retest-email-results-dropdown.png new file mode 100644 index 000000000..8ebaba744 Binary files /dev/null and b/content/analyst/inbox-and-design-tracker/media/how-to-use-design-tracker/retest-email-results-dropdown.png differ diff --git a/content/analyst/inbox-and-design-tracker/media/how_to_use_analytics_tracker/counts.png b/content/analyst/inbox-and-design-tracker/media/how_to_use_analytics_tracker/counts.png new file mode 100644 index 000000000..dedb4d95c Binary files /dev/null and b/content/analyst/inbox-and-design-tracker/media/how_to_use_analytics_tracker/counts.png differ diff --git a/content/analyst/inbox-and-design-tracker/media/how_to_use_analytics_tracker/emailclients.png b/content/analyst/inbox-and-design-tracker/media/how_to_use_analytics_tracker/emailclients.png new file mode 100644 index 000000000..52683d8e9 Binary files /dev/null and b/content/analyst/inbox-and-design-tracker/media/how_to_use_analytics_tracker/emailclients.png differ diff --git a/content/analyst/inbox-and-design-tracker/media/how_to_use_analytics_tracker/engagement.png b/content/analyst/inbox-and-design-tracker/media/how_to_use_analytics_tracker/engagement.png new file mode 100644 index 000000000..31782c339 Binary files /dev/null and b/content/analyst/inbox-and-design-tracker/media/how_to_use_analytics_tracker/engagement.png differ diff --git a/content/analyst/inbox-and-design-tracker/media/how_to_use_analytics_tracker/export.png b/content/analyst/inbox-and-design-tracker/media/how_to_use_analytics_tracker/export.png new file mode 100644 index 000000000..2ea104c14 Binary files /dev/null and b/content/analyst/inbox-and-design-tracker/media/how_to_use_analytics_tracker/export.png differ diff --git a/content/analyst/inbox-and-design-tracker/media/how_to_use_analytics_tracker/geolocation.png b/content/analyst/inbox-and-design-tracker/media/how_to_use_analytics_tracker/geolocation.png new file mode 100644 index 000000000..85f14b5fb Binary files /dev/null and b/content/analyst/inbox-and-design-tracker/media/how_to_use_analytics_tracker/geolocation.png differ diff --git a/content/analyst/inbox-and-design-tracker/media/how_to_use_analytics_tracker/newanalyticscampaign.png b/content/analyst/inbox-and-design-tracker/media/how_to_use_analytics_tracker/newanalyticscampaign.png new file mode 100644 index 000000000..7e5a263bb Binary files /dev/null and b/content/analyst/inbox-and-design-tracker/media/how_to_use_analytics_tracker/newanalyticscampaign.png differ diff --git a/content/analyst/inbox-and-design-tracker/media/how_to_use_analytics_tracker/trackingcode.png b/content/analyst/inbox-and-design-tracker/media/how_to_use_analytics_tracker/trackingcode.png new file mode 100644 index 000000000..6d27f96ee Binary files /dev/null and b/content/analyst/inbox-and-design-tracker/media/how_to_use_analytics_tracker/trackingcode.png differ diff --git a/content/analyst/inbox-and-design-tracker/media/how_to_use_analytics_tracker/trackingcode2.png b/content/analyst/inbox-and-design-tracker/media/how_to_use_analytics_tracker/trackingcode2.png new file mode 100644 index 000000000..59cb79e9a Binary files /dev/null and b/content/analyst/inbox-and-design-tracker/media/how_to_use_analytics_tracker/trackingcode2.png differ diff --git a/content/docs/getting-started/getting-started-sparkpost.md b/content/docs/getting-started/getting-started-sparkpost.md index 9943f39c9..61784356b 100644 --- a/content/docs/getting-started/getting-started-sparkpost.md +++ b/content/docs/getting-started/getting-started-sparkpost.md @@ -115,7 +115,7 @@ Here are migration guides for other popular Email Services: ## Sending Email -If you'd like to dive right in, you can read the [API reference documentation](https://developers.sparkpost.com/api/) and we have a [collection](https://www.postman.com/run-collection/81ee1dd2790d7952b76a) for [Postman](https://www.postman.com/) to help you experiment with manual API calls. +If you'd like to dive right in, you can read the [API reference documentation](https://developers.sparkpost.com/api/) and we have a [collection](https://god.postman.co/run-collection/ee44dcd644445e8bd864?action=collection%2Fimport) for [Postman](https://www.postman.com/) to help you experiment with manual API calls. In case you need it, SparkPost also supports [SMTP-based email delivery](#header-SMTP) with a few modern twists. @@ -221,7 +221,7 @@ Beyond the basics, SparkPost also has a slew of additional capabilities which ma ### Email Templates And Personalization -If you're sending similar content to lots of people, Templates let you write the message once using substitution variables and logic for personalization. You can create and edit templates on your account in the [Templates](https://app.sparkpost.com/templates) ([EU](https://app.eu.sparkpost.com/templates)) page. Check the SparkPost [template language](https://developers.sparkpost.com/api/template-language/) for information on how to personalize your emails. +If you are sending similar content to lots of people, Templates let you write the message once using substitution variables and logic for personalization. You can create and edit templates on your account in the [Templates](https://app.sparkpost.com/templates) ([EU](https://app.eu.sparkpost.com/templates)) page. Check the SparkPost [template language](https://developers.sparkpost.com/api/template-language/) for information on how to personalize your emails. ### Service Providers - Subaccounts diff --git a/content/docs/my-account-and-profile/sso.md b/content/docs/my-account-and-profile/sso.md index fec07b7b8..91a973b4f 100644 --- a/content/docs/my-account-and-profile/sso.md +++ b/content/docs/my-account-and-profile/sso.md @@ -1,10 +1,10 @@ --- -lastUpdated: "01/25/2022" +lastUpdated: "07/17/2023" title: "Single Sign-On (SSO)" description: "How to enable Single Sign-On (SSO) in SparkPost." --- -Single sign-on (SSO) allows you login to your account using your company's preffered identify provider. You can enable SSO through any provider that supports SAML. You can also set up [SCIM user provisioning through OKTA](https://support.sparkpost.com/docs/my-account-and-profile/scim/). +Single sign-on (SSO) allows you to login to your account using your company's preffered identify provider. You can enable SSO through any provider that supports SAML. You can also set up [SCIM user provisioning through OKTA](https://support.sparkpost.com/docs/my-account-and-profile/scim/). Check this [article](https://support.sparkpost.com/docs/faq/difference-between-starter-and-premier/) to verify that your account's plan level supports SSO. @@ -16,24 +16,24 @@ Enabling SSO is a 3-step process: Go to your [Account Settings page](https://app.sparkpost.com/account/settings)([EU](https://app.eu.sparkpost.com/account/settings)) and click on "Provision SSO" to upload your SAML configuration file. Copy the callback URL to configure your identity provider. ### 2. Configure your identity provider with the callback URL: -Configure your identity provider with the callbackURL from the previous step. Refer to your identity provider documentation for instructions on where to submit this information. +Configure your identity provider with the callback URL from the previous step. Refer to your identity provider documentation for instructions on where to submit this information. ### 3. Re-invite your users: -Users have to be re-invited in order to start signing in with SSO. You can delete current users and re-invite them from the [Users](https://app.sparkpost.com/account/users)([EU](https://app.eu.sparkpost.com/account/users)) page. +Users have to be re-invited in order to start signing in with SSO. You can delete current users and re-invite them from the [Users](https://app.sparkpost.com/account/users)([EU](https://app.eu.sparkpost.com/account/users)) page. ## Disable Single Sign-On Disabling SSO is a 2-step process: ### 1. Disable for account: -Go to your [Account Settings](https://app.sparkpost.com/account/settings)([EU](https://app.eu.sparkpost.com/account/settings)) and click on "Provision SSO" to upload your SAML configuration file. Once provisioned, you can enable SSO for the account. +Go to your [Account Settings](https://app.sparkpost.com/account/settings)([EU](https://app.eu.sparkpost.com/account/settings)) and click on "Disable SSO". ### 2. Re-invite your users: -Users have to be re-invited in order to set their passwords. You can delete current users and re-invite them from the [Users](https://app.sparkpost.com/account/users)([EU](https://app.eu.sparkpost.com/account/users)) page. +Users have to be re-invited in order to set their passwords. You can delete current users and re-invite them from the [Users](https://app.sparkpost.com/account/users)([EU](https://app.eu.sparkpost.com/account/users)) page. ## FAQ -### What do I need to provide to my idendity provider? -The specifics for configuring SSO in your idendity provider varies by provider, so we recommend you reference their documentation for full details. In general, you will need to provide the callback URL as described above. You may also be asked for metadata in some cases. If so, here is the metadata you can provide to your idendity provider: +### What do I need to provide to my identity provider? +The specifics for configuring SSO in your identity provider varies by provider, so we recommend you reference their documentation for full details. In general, you will need to provide the callback URL as described above. You may also be asked for metadata in some cases. If so, here is the metadata you can provide to your identity provider: *Note: the entity ID for legacy SAML configurations is `passport-saml`.* @@ -94,8 +94,8 @@ No, there is no default user role - role is decided by the admin user when addin ### Can the user role be changed after a SSO user has been created? Yes, an admin user can change the user role for any user (including SSO users) at any time. -### Is there a way to bypass SSO once its enabled? -An admin can enable or disable SSO for each user at any time. However, there is no way to bypass SSO if it is enabled for a specific user - the admin must disable for that user in order to login via password. +### Is there a way to bypass SSO once it's enabled? +An admin can disable SSO by following the steps in the "Disable Single Sign-On" section above. ### Can I use both SSO and multi-factor authentication (MFA)? No. Users can only use either MFA or SSO. diff --git a/content/docs/tech-resources/enabling-https-engagement-tracking-on-sparkpost.md b/content/docs/tech-resources/enabling-https-engagement-tracking-on-sparkpost.md index b30b19bce..ccf40a148 100644 --- a/content/docs/tech-resources/enabling-https-engagement-tracking-on-sparkpost.md +++ b/content/docs/tech-resources/enabling-https-engagement-tracking-on-sparkpost.md @@ -1,5 +1,5 @@ --- -lastUpdated: "12/22/2021" +lastUpdated: "07/10/2023" title: "Enabling HTTPS Engagement Tracking on SparkPost" description: "SparkPost supports HTTPS engagement tracking for customers via self-service for all SparkPost customers. To enable SSL engagement tracking for a domain, additional configuration for SSL keys is required." --- @@ -67,23 +67,21 @@ After configuring your CDN, you need instruct SparkPost to encode your links usi --- ## Step by Step Guide with CloudFlare -_Updated December 2021. Uses a simpler forwarding method without the need for custom page rules. Images and descriptions follow the current CloudFlare web UI._ +_Updated for Cloudflare web UI as of June 2023._ > CloudFlare requires you to use their nameservers, i.e. to give them control over routing for the entire organizational domain. That means it works differently to the other CDNs listed here. 1. Create (or log in to your existing) CloudFlare account. -1. Go to the "websites" option in the navigation menu on the CloudFlare UI. +1. In CloudFlare, select the **Websites** management menu on the left. If your organizational domain is already shown on the app, click on it. Otherwise choose **Add a Site**. Enter your domain and confirm. - ![](media/enabling-https-engagement-tracking-on-sparkpost/cloudflare_UI.png) - - If your organizational domain is already shown here, you can skip this step. Otherwise choose "Add a Site". + ![](media/enabling-https-engagement-tracking-on-sparkpost/cloudflare-2023-add-site.png) CloudFlare will scan your existing DNS provider to collect records, and prompt you to change to use specifically-named CloudFlare nameservers (yours may be different to the example shown below). You will require a login to your existing DNS provider to be able to change them; beyond the scope of this document. - Wait for the changes to take effect. You can monitor this in the CloudFlare UI. + Wait for the changes to take effect. You can monitor this in the CloudFlare dashboard. - ![](media/enabling-https-engagement-tracking-on-sparkpost/cloudflare_ns_change.png) + ![](media/enabling-https-engagement-tracking-on-sparkpost/cloudflare-2023-add-nameservers.png) Note that (as the above screen mentions) the old nameservers may still be cached in the Internet and will take time to update. You can check the nameservers that a machine sees using `dig NS`: @@ -102,8 +100,8 @@ _Updated December 2021. Uses a simpler forwarding method without the need for cu ;myexample.com. IN NS ;; ANSWER SECTION: - myexample.com. 300 IN NS athena.ns.cloudflare.com. - myexample.com. 300 IN NS sam.ns.cloudflare.com. + myexample.com. 300 IN NS clay.ns.cloudflare.com. + myexample.com. 300 IN NS coco.ns.cloudflare.com. ;; Query time: 8 msec ;; SERVER: 172.31.0.2#53(172.31.0.2) @@ -113,31 +111,41 @@ _Updated December 2021. Uses a simpler forwarding method without the need for cu 1. Check, and if necessary add the tracking domain CNAME. - In CloudFlare, go to the "DNS" management menu. If you already have a plain (HTTP) tracking domain set up with SparkPost, it should be already present in the records. Check that it's set to "Proxied". + In CloudFlare, go to the **DNS** management menu. If you already have a plain (HTTP) tracking domain set up with SparkPost, it should be already present in the records. Check that it's set to "Proxied". If you are setting up a new tracking domain, then select the "Add record" option: - * Select record type "CNAME". - * Enter the subdomain you have chosen (in our example, this is `track`). Enter just the subdomain part. - * Specify the target as the correct SparkPost tracking endpoint address for your service, see [here](#sparkpost-tracking-endpoints). - * Ensure Proxy status is enabled. + * Select **CNAME** as record type. + * Enter the subdomain you have chosen (in our example, this is _`track`_) in the **Name** field. + * Specify the **Target** as the correct SparkPost tracking endpoint address for your service. See the possible endpoint addresses [here](#sparkpost-tracking-endpoints). + * Ensure *Proxy status* is **enabled**. - ![](media/enabling-https-engagement-tracking-on-sparkpost/cloudflare_create_cname.png) - * Select "Save". + ![](media/enabling-https-engagement-tracking-on-sparkpost/cloudflare-2023-add-cname.png) + * Select **Save**. 1. Check that CloudFlare is set to use HTTPS. - In CloudFlare, go to the "SSL/TLS" management menu. You should see an Overview screen showing the encryption mode as "Full". - - ![](media/enabling-https-engagement-tracking-on-sparkpost/cloudflare_SSL_full.png) + In CloudFlare, go to the **SSL/TLS** management menu. You should see an Overview screen showing the encryption mode as **Full**. + ![](media/enabling-https-engagement-tracking-on-sparkpost/cloudflare-2023-ssl-full.png) - More information on CloudFlare SSL options can be found in [this article](https://support.cloudflare.com/hc/en-us/articles/200170416). + More information on CloudFlare SSL options can be found in [this article](https://developers.cloudflare.com/ssl/origin-configuration/ssl-modes#available-encryption-modes). After a few minutes, you can verify that the routing is correct using `ping` to your tracking domain. See also [troubleshooting tips](#troubleshooting-tips). - Cloudflare does not offer control of cache "time to live" (TTL) on free accounts. This may mask repeat opens/clicks, as described [here](#cache-time-to-live-ttl-settings). If you have a paid account, under Caching, check and set your TTL value. + Cloudflare does not offer control of cache "time to live" (TTL) on free accounts. This may mask repeat opens/clicks, as described [here](#cache-time-to-live-ttl-settings). If you have a paid account, under **Caching** on the left side menu, check and set your TTL value. + +1. Confirm that `User-Agent` and `Host` HTTP headers from original requests are correctly forwarded to SparkPost. In CloudFlare, go to the **Rules** management menu. + + ![](media/enabling-https-engagement-tracking-on-sparkpost/cloudflare-2023-rules.png) + + In **Page Rules**, be sure that there are no configured page rules with the *Host Header Override* setting. + In **Transform Rules**, be sure that there are no configured transform rules that modify the `User-Agent` and `Host` headers. + + In **Origin Rules**, be sure that there are no origin rules configured to rewrite the `Host` header. + + If your CloudFlare account has Load Balancing enabled, go to **Traffic** management menu on the left and select **Load Balancing**. Be sure that the option to override the `Host` header is disabled in your load balancer. 1. Follow [these steps](#switch-tracking-domain-to-secure-and-validate) to update and verify your tracking domain. @@ -237,11 +245,15 @@ For up to date information on creating a distribution via CloudFront, please ref * Enable forwarding of the `User-Agent` header. Type in `User-Agent` and click "Add". This allows `User-Agent` data to be present in your engagement events received from SparkPost. + ![](media/enabling-https-engagement-tracking-on-sparkpost/cloudfront_cache5.png) + + * Enable forwarding of the `Host` header. Type in `Host` and click "Add". This allows `Host` data to be present in your engagement events received from SparkPost. + ![](media/enabling-https-engagement-tracking-on-sparkpost/cloudfront_cache6.png) * Leave Query string and Cookies set to defaults (None). Your origin request settings should now look like this. - ![](media/enabling-https-engagement-tracking-on-sparkpost/cloudfront_cache5.png) + ![](media/enabling-https-engagement-tracking-on-sparkpost/cloudfront_cache7.png) * Click "Create" (on first time) / "Save Changes" (if modifying). @@ -335,217 +347,220 @@ Once your CNAME is set up with your DNS provider, instead of providing an existi --- ## Step by Step Guide with Fastly +_Updated June 2023. Images and descriptions follow the current Fastly web UI._ -Sign up for Fastly or log in to an existing account. +Sign up for [Fastly](https://www.fastly.com/) or log in to an existing account. -1. Select the **Configure** tab on the Dashboard, then "Create Service". Give your service a name, and add your tracking domain under "Domains". +1. Select the **Deliver** tab on the Dashboard, then click the **Create a delivery service** button. Give your service a name in the _Options_ menu by clicking **Edit service name**. - ![](media/enabling-https-engagement-tracking-on-sparkpost/fastly-create-service.png) + ![](media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-create-a-delivery-service.png) +1. In the **Domains** section, insert your tracking domain into the provided field and click **Add**. A subdomain (like *click*.domain.com, rather than just domain.com) is recommended. -1. Select "Origins" on the left. Add the correct endpoint address for your service, see [here](#sparkpost-tracking-endpoints). + ![](media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-add-domain.png) - ![](media/enabling-https-engagement-tracking-on-sparkpost/fastly-origin-hosts.png) +1. Select **Origins** in the left-side menu. In the **Hosts** section, add the correct tracking endpoint for your service (also known as hostname), see possible values [here](#sparkpost-tracking-endpoints). + + ![](media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-add-host.png) - Fastly detects that SparkPost supports TLS, and shows the host entry like this. Optionally you can use the "pencil" edit icon to set a meaningful name. + Fastly detects that SparkPost supports TLS, and shows the host entry like below. Optionally you can use the "pencil" edit icon to set a meaningful name. - ![](media/enabling-https-engagement-tracking-on-sparkpost/fastly-origin.png) + ![](media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-host-added.png) - Fastly default settings pass the `user_agent` and `ip_address` through to SparkPost engagement tracking as expected. + Fastly default settings pass the `User-Agent` and `X-Forwarded-For` HTTP headers through to SparkPost engagement tracking as expected. -1. On "Settings", "Cache Settings", set the "Fallback TTL" to ten seconds (explanation [here](#cache-time-to-live-ttl-settings)). +1. Click **Settings** in the left-side menu, and scroll down to the **Fallback TTL** section. Click on the "pencil" icon to set the Fallback TTL to **10** seconds. - ![](media/enabling-https-engagement-tracking-on-sparkpost/fastly-ttl.png) + ![](media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-fallback-ttl.png) -## Issue a certificate with Fastly - -1. Select the "HTTPS and network" tab, then "Get Started". +1. Still in the **Settings** page, be sure the **Override host** option is **disabled**. For each CDN request, the `Host` HTTP header should be forwarded to SparkPost in order for your domain to be identified by engagement tracking. If this option is enabled, requests to SparkPost won't contain your host value. - ![](media/enabling-https-engagement-tracking-on-sparkpost/fastly-cert1.png) + ![](media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-override-host.png) +1. Activate your service by clicking on the **Activate** button in the top right corner of the page. -1. Enter your tracking domain. Let's Encrypt certificates are free, and can be auto-renewed by Fastly, via an additional CNAME record that you will need to create with your DNS provider. +## Issue a certificate with Fastly - ![](media/enabling-https-engagement-tracking-on-sparkpost/fastly-cert2.png) +1. Under the *Secure* tab, select *TLS management*. If you have no TLS domains, click **Get started**. Otherwise, click the **Secure another domain** in the upper-right corner of the page. - Other options are to use GlobalSign, or to upload your own private key & certificate. + ![](media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-tls-get-started.png) -1. For Let's Encrypt option: copy the information shown and create a CNAME record in your DNS provider's account. +1. Enter your tracking domain and click **Add**. Let's Encrypt certificates are free, and can be auto-renewed by Fastly via an additional CNAME record that you will need to create with your DNS provider. You can upload your own private key & certificate instead of using Let's Encrypt. - ![](media/enabling-https-engagement-tracking-on-sparkpost/fastly-cert-letsencrypt-cname.png) + ![](media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-submit-tls-domain.png) -1. After you create the CNAME, Fastly requests the certificate. + Once finished, click **Submit**. - ![](media/enabling-https-engagement-tracking-on-sparkpost/fastly-cert-letsencrypt2.png) +1. For Let's Encrypt option: verify your domain ownership creating a CNAME record with your DNS provider using the values provided by Fastly. - After a short time, you should see + ![](media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-tls-pending.png) - ![](media/enabling-https-engagement-tracking-on-sparkpost/fastly-cert-letsencrypt3.png) +1. After you create the CNAME, Fastly will request the certificate to Let's Encrypt. -1. Select "More Details .." and look for "CNAME records". This is the address the Fastly will use to serve your incoming requests. + ![](media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-tls-issuing.png) - ![](media/enabling-https-engagement-tracking-on-sparkpost/fastly-service-cname.png) + After a short time, the certificate should be issued as below: -1. Create the CNAME record within your DNS service (this will be specific to your provider). If you have a TTL (time to live) field, we suggest to set this to 1 hour. + ![](media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-tls-issued.png) - ![](media/enabling-https-engagement-tracking-on-sparkpost/fastly-cname.png) +1. Select *More Details...* and look for **CNAME records**. This is the address the Fastly will use to serve your incoming requests. - _Example DNS provider CNAME setup_ + ![](media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-cname-records.png) - You can verify that the routing is successful using `ping` on your created record. +1. Create the CNAME record for the tracking domain within your DNS service (this will be specific to your provider) pointing to the CNAME address provided by Fastly (as seen above). If you have a TTL (time to live) field, we suggest to set this to 1 hour. You can verify that the routing is successful using `ping` on your created record. 1. Follow [these steps](#switch-tracking-domain-to-secure-and-validate) to update and verify your tracking domain. Fastly keeps previous versions of your configuration, and can show the "diff" between them. You can also set up advanced routing rules using the VCL language, and monitor statistics on served requests. -![](media/enabling-https-engagement-tracking-on-sparkpost/fastly-stats.png) - --- ## Step by Step Guide with Google Cloud Platform +_Updated for Google Cloud Platform as of July 2023._ + Unlike some other services, [Google Cloud Platform](https://cloud.google.com/) (GCP) can route tracking domains to SparkPost via an ["external" HTTPS load-balancer](https://cloud.google.com/load-balancing/docs/https), with certificate and routing rules. This is conceptually simpler than using a CDN in front of SparkPost tracking, as there is no caching [Time to Live](#cache-time-to-live-ttl-settings) to consider. GCP organizes resources under named projects. 1. From the top menu, select an existing project, or create a new project. - ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-new-project.png) + ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-new-project.png) -1. On the main menu (top left), scroll down and select "Network Services" then "Load balancing". +1. On the main menu (top left), scroll down and select **Network Services** then **Load balancing**. + + ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-network-services.png) It will take a few minutes for a new project to become ready for adding services. >You may see a message such as "_Compute Engine is getting ready_". Refresh your browser to continue. - ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-network-services.png) - - 1. Choose "Create load balancer". +1. Click the **Create load balancer** button at the top. - ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-load-balancing.png) + ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-create-load-balancer.png) -1. You will see three options. + You will see three options as below. Choose **Aplication Load Balancer (HTTP/S)** and Start configuration. - ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-https-lb.png) + ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-https-lb.png) - Choose "HTTP(S) Load Balancing" and Start configuration. +1. On the question *Internet facing or internal only*, choose **From Internet to my VMs or serverless services**. -1. On the question "Internet facing or internal only", choose "From Internet to my VMs" and continue. + ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-lb-internet-facing.png) - ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-lb1.png) + Regarding *Global or Regional*, choose the best option for your application. In this guide, we will proceed with a **Global external Application Load Balancer**. Select **Continue**. 1. Give your load balancer a meaningful name. - ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-name.png) + ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-lb-name.png) Note the remaining setup steps: - * Backend (which will be SparkPost's engagement tracking endpoint) - * Host and Path Rules, and - * Frontend configuration (which includes the certificate). + * Frontend configuration (which includes the certificate); + * Backend configuration (which will be SparkPost's engagement tracking endpoint) and + * Routing rules. We now configure each of these, then create the load-balancer. -1. Backend configuration: +1. Frontend configuration - ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-backend1.png) + * Enter a name. - Choose Backend services / Create a backend service. + For Protocol, select **HTTPS (includes HTTP/2)**. - * Give the backend service a name, e.g. "sparkpost-engagement-tracking". - * For "Backend type", choose "Internet network endpoint group". - * For Protocol, choose "HTTPS". Leave "Named port" and "Timeout" at defaults. + ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-lb-frontend.png) - ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-new-backend-group.png) + * Select the **Certificate** field and click on **Create new certificate**. Choose a name to identify your certificate. If you have an existing certificate for your tracking domain, you can upload it via this dialog. + + ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-lb-frontend-cert.png) + + Otherwise choose the **Create Google-managed certificate** option. This has the advantage that GCP will handle your renewals. Under *Domains*, enter your tracking domain and select **Create**. - * In the "New backend" dialog, choose "Create Internet network endpoint group". This will open a new browser tab. + ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-lb-create-cert.png) -1. Give your "Network Endpoint Group" a name: + * For a new Google-managed certificate, [additional steps](#issue-a-certificate-with-google-cloud) are necessary after you review and finalize. The certificate will be available only after you point your domain to the frontend service. - ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-create-network-endpoint-group.png) +1. Backend configuration - * Set Default port to 443. - * On "Add through", leave this set at "Fully qualified domain name and port". - * On "Fully qualified domain name", add the correct endpoint address for your service, see [here](#sparkpost-tracking-endpoints). - * Select "Create". - You should now see your "Network Endpoint Group" exists. + * Choose **Backend services & backend buckets** / **Create a backend service**. + + ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-lb-backend.png) + + Give the backend service a name, e.g. "sparkpost-engagement-tracking". - ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-network-endpoint-group-exists.png) + For *Backend type*, choose **Internet network endpoint group**. - Close this tab, and **return to your previous tab**. Unfortunately this does not auto-refresh; however, start typing the name of the Network Endpoint Group you just created, and it will appear. + For *Protocol*, choose **HTTPS**. Leave *Named port* and *Timeout* at defaults. + * In the *New backend* dialog, choose **Create Internet network endpoint group**. This will open a new browser tab. - ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-choose-backend-group.png) + ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-create-backend-service.png) - Choose "Done". + * Give your *Network Endpoint Group* a name: - * Leave "Enable Cloud CDN" unchecked and the other settings at defaults. + ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-new-endpoint-group.png) - * Scroll to the end of the page and select "Create". + Set Default port to 443. - ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-backend-create.png) + On *Add through*, leave this set at **Fully qualified domain name and port**. - * This returns you to the "New HTTP(S) load balancer" view, showing with blue check marks that "Backend configuration" and "Host and path rules" are done. + On *Fully qualified domain name*, add the correct endpoint address for your service, see [here](#sparkpost-tracking-endpoints). - ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-https-lb-step2.png) + * Select **Create**. You should now see your "Network Endpoint Group" exists. - For "Host and path rules": the above default configuration (shown in gray) passes all traffic on the load balancer through to our back end; this is sufficient. + ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-network-endpoint-group-exists.png) -1. Frontend configuration + * Close this tab, and **return to your previous tab**. + + Unfortunately this does not auto-refresh; however, start typing the name of the Network Endpoint Group you just created, and it will appear. Click on **Done**. - * Enter a name. - * For Protocol, select "HTTPS (includes HTTP/2)". + ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-choose-backend-group.png) - ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-front-end-config.png) + * Leave *Enable Cloud CDN* unchecked and the other settings at defaults. - * If you have an existing certificate for your tracking domain, you can upload it via this dialog. Otherwise choose "Create a new certificate". This has the advantage that GCP will handle your renewals. + * Scroll to the end of the page and select **Create**. This returns you to the *Create a new global external load balancer* view, showing with blue check marks that *Frontend configuration*, *Backend configuration* and *Routing rules* are done. - ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-front-end-cert.png) + ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-routing-rules.png) - * For a new certificate, [additional steps](#issue-a-certificate-with-google-cloud) are necessary after you review and finalize. The certificate will be available only after you point your domain to the frontend service. + * For *Routing rules* mode, leave **Simple host and path rule** option selected. This default configuration passes all traffic on the load balancer through to our back end; this is sufficient. -1. Review and finalize + * Be sure that no Load Balancer configurations are set up to change the `Host` HTTP header in client requests. Both `Host` and `User-Agent` headers must be forwarded to SparkPost for Engagement Tracking to work as expected. - Select "Review and Finalize". Your configuration should now look like this: +1. Review and finalize - ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-review-finalize.png) + Select **Review and Finalize**. Your configuration should now look like this: - Ensure your load balancer has a valid name. + ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-review.png) - Choose "Create". After a few seconds, you should see the following status. + Choose **Create**. After a few seconds, you should see the following status. - ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-lb-created.png) + ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-lb-created.png) ## Issue a certificate with Google Cloud -Creating a new certificate is done through the HTTP(S) load balancer configuration. On the main menu (top left), navigate to "Network Services" then "Load balancing". Select your load balancer by clicking on its name. +Creating a new certificate is done through the HTTP(S) load balancer configuration. On the main menu (top left), navigate to **Network Services** then **Load balancing**. Select your load balancer by clicking on its name. -If you don't have a named certificate present under the "Frontend" section, follow step "Frontend configuration" above to begin the process. +1. If you don't have a named certificate present under the *Frontend* section, follow step [Frontend configuration](#step-by-step-guide-with-google-cloud-platform) above to begin the process. -Once you have a named certificate on your frontend, it should look like this. It may take a few minutes after creating the load balancer for the `IP:Port` to appear. +1. Once you have a named certificate on your frontend, it should look like this. It may take a few minutes after creating the load balancer for the `IP:Port` to appear. -![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-front-end-got-ip-port.png) + ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-frontend-ip-port.png) -The gray (i) indicates the certificate is in the "provisioning" state, not yet fully active. + Click on the certificate name (underlined in blue). You should see the status similar to this: -* Click on the certificate name (underlined in blue). You should see the status similar to this. + ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-provisioning-cert.png) - ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-front-end-cert-provisioning.png) +1. Take the IP address from the `IP:Port` value above, and use it to create your DNS record. -2. Take the IP address from the `IP:Port` value above, and use it to create your DNS record. - - * Point your tracking domain toward the load-balancer frontend with an [A record](https://en.wikipedia.org/wiki/List_of_DNS_record_types). The entry will vary depending on your DNS provider; for example, on GoDaddy, you omit the organizational domain from the "Host" field, i.e. type in only the subdomain part (here, we're using the subdomain "gcp"). + Point your tracking domain toward the load-balancer frontend with an [A record](https://en.wikipedia.org/wiki/List_of_DNS_record_types). The entry will vary depending on your DNS provider; for example, on GoDaddy, you omit the organizational domain from the "Host" field, i.e. type in only the subdomain part (here, we're using the subdomain "gcp"). ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-lb-dns-a-record.png) - Save your record. It will typically take from a few minutes up to several hours before the record is published and visible. While you're waiting, Google Cloud Platform will show the Domain Status with a yellow warning triangle; this is expected. - - ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-lb-dns-warning.png) + Save your record. It will typically take from a few minutes up to several hours before the record is published and visible. While you're waiting, Google Cloud Platform will show the Domain Status as *FAILED_NOT_VISIBLE* with a yellow warning icon; this is expected. If your A record is correct, Google Cloud Platform will activate the certificate and make it visible on the screen. The green check mark indicates the domain/certificate is active. - ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-cert-success.png) + ![](media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-active-cert.png) It can take a further few minutes after this before the certificate is fully active on the endpoint. You can check this using the [troubleshooting tips](#troubleshooting-tips). @@ -567,48 +582,52 @@ The steps below are based on [this guide](https://docs.microsoft.com/en-us/azure ![](media/enabling-https-engagement-tracking-on-sparkpost/azure-select-resource-group.png) -1. From the home page or the Azure menu, select Create a resource. Select Networking > See All > Front Door. +1. From the home page or the Azure menu, select Create a resource. Select Media > Front Door and CDN profiles. ![](media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door1.png) - Choose Create. + Choose Explore other offerings, choose Azure Front Door (classic) and then Continue. ![](media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door2.png) Select your resource group. Select "Next: Configuration". + ![](media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door3.png) + 1. In Frontends/domains, select `+` to open "Add a frontend host". Give your host a name - this needs to be a valid, unique subdomain of the domain `.azurefd.net`. Choosing a name based on your custom tracking domain should help to ensure uniqueness; you should see a green check mark appear on the right. (We will change this later to be your actual custom domain.) - ![](media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door3.png) + ![](media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door4.png) 1. Next, we create a backend pool that contains just the SparkPost tracking domain. In Backend pools, select + to open Add a backend pool. Give this a name. - ![](media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door4.png) + ![](media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door5.png) 1. Select "Add a backend". Set the backend host type to be "Custom host". Set the backend host name to be the correct endpoint address for your service, see [here](#sparkpost-tracking-endpoints). - ![](media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door5.png) + ![](media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door6.png) * The backend host header field will be automatically filled in for you. Leave the HTTP port and HTTPS port settings at defaults. Click Add. * Leave the Health probe inactive, as there is only one backend. + * This will forward the `Host` and `User-Agent` HTTP headers to SparkPost properly, which is necessary for Engagement Tracking to work as expected. + 1. On "Routing rules", select `+`. Give your rule a name. Leave "Accepted protocol" as the default "HTTP and HTTPS". Ensure your "Frontends/domains" setting is your previously configured subdomain name. Set the Path to `/*` to match all incoming requests. Leave Route type set to the default "Forward", and set Forwarding Protocol to "Match request". Select "Add". - ![](media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door6.png) + ![](media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door7.png) 1. Select "Review + create", then "Create". - ![](media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door7.png) + ![](media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door8.png) You should see "Deployment is in progress", followed by a "deployment complete" message. - ![](media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door8.png) + ![](media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door9.png) Your front door is now active on the subdomain we set up, and can be checked using `curl` with added path `/f/a/b/c/d`, for example: diff --git a/content/docs/tech-resources/extended-error-codes.md b/content/docs/tech-resources/extended-error-codes.md index 1106e844d..c5b0d53f8 100644 --- a/content/docs/tech-resources/extended-error-codes.md +++ b/content/docs/tech-resources/extended-error-codes.md @@ -54,6 +54,7 @@ The following table is a complete list of extended error code responses, organiz | | 2004 | No draft version of template exists | 422 | | | | 2005 | No published version of template exists | 422 | | | | 2006 | Transmission record in invalid state | 409 | | +| | 2007 | Metadata size too large | 422 | | | | 2101 | Exceed Sending Limit (hourly) | 420 | | | | 2102 | Exceed Sending Limit (daily) | 420 | | | | 2103 | Exceed Sending Limit (sandbox) | 420 | | diff --git a/content/docs/tech-resources/inbound-email-relay-webhook.md b/content/docs/tech-resources/inbound-email-relay-webhook.md index 7564aa91e..7e381ae2d 100644 --- a/content/docs/tech-resources/inbound-email-relay-webhook.md +++ b/content/docs/tech-resources/inbound-email-relay-webhook.md @@ -28,7 +28,7 @@ Best practice recommendations for use of a relay webhook are simple and short.  Before you start you will need the following: * A Relay Webhook consumer: This is code that you write and host. This is what will process inbound emails relayed through SparkPost. You will need to have this ready before you set up your Relay Webhook. For testing, you could use a service like requestbin.com (https://requestbin.com) to set up a temporary consumer. -* An API key with "Inbound Domains: Read/Write" and "Relay Webhooks: Read/Write" permissions. You're going to make some API calls, so you might want to download [Postman](https://www.postman.com) and get the free [SparkPost Postman collection](https://www.postman.com/run-collection/81ee1dd2790d7952b76a) to make this easier. +* An API key with "Inbound Domains: Read/Write" and "Relay Webhooks: Read/Write" permissions. You're going to make some API calls, so you might want to download [Postman](https://www.postman.com) and get the free [SparkPost Postman collection](https://god.postman.co/run-collection/ee44dcd644445e8bd864?action=collection%2Fimport) to make this easier. Once you have these, there are three steps to setting up your Relay Webhook: @@ -79,7 +79,7 @@ You can check your MX record propagation [here](https://www.whatsmydns.net/#MX) ## Create an Inbound Domain -This is the domain that users will send email to. You can send a POST request to https://api.sparkpost.com/api/v1/inbound-domains or use our [Postman collection](https://www.postman.com/run-collection/81ee1dd2790d7952b76a) to create your [Inbound Domain](https://developers.sparkpost.com/api/inbound-domains.html). Make sure to set your API key as the Authorization header under the "headers" tab and to set your domain under the "body" tab. +This is the domain that users will send email to. You can send a POST request to https://api.sparkpost.com/api/v1/inbound-domains or use our [Postman collection](https://god.postman.co/run-collection/ee44dcd644445e8bd864?action=collection%2Fimport) to create your [Inbound Domain](https://developers.sparkpost.com/api/inbound-domains.html). Make sure to set your API key as the Authorization header under the "headers" tab and to set your domain under the "body" tab. ## Create a Relay Webhook diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door1.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door1.png index dc4dbb2cb..21236570e 100644 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door1.png and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door1.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door2.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door2.png index d455165ec..e0fd1d8b2 100644 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door2.png and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door2.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door3.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door3.png index cb1fb34cd..f4d090846 100644 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door3.png and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door3.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door4.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door4.png index 58cf458cd..468a9942d 100644 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door4.png and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door4.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door5.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door5.png index d6cec5313..3331be1a4 100644 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door5.png and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door5.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door6.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door6.png index 71580b515..d6cec5313 100644 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door6.png and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door6.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door7.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door7.png index 45ba73a77..a91b71799 100644 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door7.png and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door7.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door8.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door8.png index e8666ab0d..d985880fd 100644 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door8.png and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door8.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door9.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door9.png new file mode 100644 index 000000000..7d3ebf913 Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/azure-front-door9.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudflare-2023-add-cname.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudflare-2023-add-cname.png new file mode 100644 index 000000000..bb424fbbc Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudflare-2023-add-cname.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudflare-2023-add-nameservers.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudflare-2023-add-nameservers.png new file mode 100644 index 000000000..c4a17e4de Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudflare-2023-add-nameservers.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudflare-2023-add-site.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudflare-2023-add-site.png new file mode 100644 index 000000000..f84f11ce7 Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudflare-2023-add-site.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudflare-2023-rules.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudflare-2023-rules.png new file mode 100644 index 000000000..badbdc12c Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudflare-2023-rules.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudflare-2023-ssl-full.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudflare-2023-ssl-full.png new file mode 100644 index 000000000..ebff075d0 Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudflare-2023-ssl-full.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudflare_SSL_full.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudflare_SSL_full.png deleted file mode 100644 index d2b5a8c3a..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudflare_SSL_full.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudflare_UI.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudflare_UI.png deleted file mode 100644 index 29a5f9152..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudflare_UI.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudflare_create_cname.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudflare_create_cname.png deleted file mode 100644 index 816e9b07c..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudflare_create_cname.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudflare_ns_change.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudflare_ns_change.png deleted file mode 100644 index b59111d33..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudflare_ns_change.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudfront_cache5.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudfront_cache5.png index f2d7d4e98..e7f198c06 100644 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudfront_cache5.png and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudfront_cache5.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudfront_cache6.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudfront_cache6.png index e7f198c06..e25a7e095 100644 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudfront_cache6.png and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudfront_cache6.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudfront_cache7.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudfront_cache7.png new file mode 100644 index 000000000..89c77c735 Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/cloudfront_cache7.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-add-domain.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-add-domain.png new file mode 100644 index 000000000..b67576f4d Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-add-domain.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-add-host.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-add-host.png new file mode 100644 index 000000000..3441a6137 Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-add-host.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-cname-records.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-cname-records.png new file mode 100644 index 000000000..843cc9b0c Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-cname-records.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-create-a-delivery-service.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-create-a-delivery-service.png new file mode 100644 index 000000000..f92594fca Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-create-a-delivery-service.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-fallback-ttl.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-fallback-ttl.png new file mode 100644 index 000000000..5092a8aca Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-fallback-ttl.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-host-added.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-host-added.png new file mode 100644 index 000000000..a38b8637f Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-host-added.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-override-host.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-override-host.png new file mode 100644 index 000000000..c6453aa56 Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-override-host.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-submit-tls-domain.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-submit-tls-domain.png new file mode 100644 index 000000000..45f426164 Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-submit-tls-domain.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-tls-get-started.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-tls-get-started.png new file mode 100644 index 000000000..41c47d776 Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-tls-get-started.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-tls-issued.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-tls-issued.png new file mode 100644 index 000000000..14756d712 Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-tls-issued.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-tls-issuing.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-tls-issuing.png new file mode 100644 index 000000000..869766014 Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-tls-issuing.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-tls-pending.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-tls-pending.png new file mode 100644 index 000000000..73805db70 Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-2023-tls-pending.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-cert-letsencrypt-cname.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-cert-letsencrypt-cname.png deleted file mode 100644 index 93f82cfb1..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-cert-letsencrypt-cname.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-cert-letsencrypt2.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-cert-letsencrypt2.png deleted file mode 100644 index c9677d5a2..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-cert-letsencrypt2.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-cert-letsencrypt3.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-cert-letsencrypt3.png deleted file mode 100644 index eba95959c..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-cert-letsencrypt3.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-cert1.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-cert1.png deleted file mode 100644 index b83e63e0d..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-cert1.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-cert2.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-cert2.png deleted file mode 100644 index 6e670fa68..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-cert2.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-cname.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-cname.png deleted file mode 100644 index 33725a636..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-cname.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-create-service.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-create-service.png deleted file mode 100644 index e2aa1f864..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-create-service.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-origin-hosts.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-origin-hosts.png deleted file mode 100644 index 074645b7c..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-origin-hosts.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-origin.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-origin.png deleted file mode 100644 index e4c5952f3..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-origin.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-service-cname.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-service-cname.png deleted file mode 100644 index aa30b7967..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-service-cname.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-stats.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-stats.png deleted file mode 100644 index 2a6c32890..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-stats.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-ttl.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-ttl.png deleted file mode 100644 index 6fb3041a2..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/fastly-ttl.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-active-cert.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-active-cert.png new file mode 100644 index 000000000..edd70643f Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-active-cert.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-choose-backend-group.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-choose-backend-group.png new file mode 100644 index 000000000..b26e6635c Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-choose-backend-group.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-create-backend-service.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-create-backend-service.png new file mode 100644 index 000000000..fdd8e7415 Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-create-backend-service.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-create-load-balancer.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-create-load-balancer.png new file mode 100644 index 000000000..01d526ab8 Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-create-load-balancer.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-frontend-ip-port.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-frontend-ip-port.png new file mode 100644 index 000000000..a70456435 Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-frontend-ip-port.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-https-lb.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-https-lb.png new file mode 100644 index 000000000..892b41ff6 Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-https-lb.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-lb-backend.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-lb-backend.png new file mode 100644 index 000000000..ccd85caae Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-lb-backend.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-lb-create-cert.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-lb-create-cert.png new file mode 100644 index 000000000..a2b8510f2 Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-lb-create-cert.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-lb-created.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-lb-created.png new file mode 100644 index 000000000..9d5705e12 Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-lb-created.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-lb-frontend-cert.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-lb-frontend-cert.png new file mode 100644 index 000000000..4f4a40756 Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-lb-frontend-cert.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-lb-frontend.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-lb-frontend.png new file mode 100644 index 000000000..babaf8a0b Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-lb-frontend.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-lb-internet-facing.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-lb-internet-facing.png new file mode 100644 index 000000000..fe8cccff0 Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-lb-internet-facing.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-lb-name.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-lb-name.png new file mode 100644 index 000000000..437d82556 Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-lb-name.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-network-endpoint-group-exists.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-network-endpoint-group-exists.png new file mode 100644 index 000000000..dfb4a6a60 Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-network-endpoint-group-exists.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-network-services.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-network-services.png new file mode 100644 index 000000000..8c4790d64 Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-network-services.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-new-endpoint-group.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-new-endpoint-group.png new file mode 100644 index 000000000..ba56fe220 Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-new-endpoint-group.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-new-project.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-new-project.png new file mode 100644 index 000000000..a1676a3c5 Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-new-project.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-provisioning-cert.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-provisioning-cert.png new file mode 100644 index 000000000..785816bcb Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-provisioning-cert.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-review.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-review.png new file mode 100644 index 000000000..a9aff6433 Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-review.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-routing-rules.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-routing-rules.png new file mode 100644 index 000000000..7ea4a694f Binary files /dev/null and b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-2023-routing-rules.png differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-backend-create.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-backend-create.png deleted file mode 100644 index 1f73a137f..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-backend-create.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-backend1.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-backend1.png deleted file mode 100644 index 53230e929..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-backend1.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-cert-success.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-cert-success.png deleted file mode 100644 index 7a1a6f932..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-cert-success.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-choose-backend-group.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-choose-backend-group.png deleted file mode 100644 index 49b10ccaa..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-choose-backend-group.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-create-network-endpoint-group.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-create-network-endpoint-group.png deleted file mode 100644 index d4721b844..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-create-network-endpoint-group.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-front-end-cert-provisioning.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-front-end-cert-provisioning.png deleted file mode 100644 index ea9fbb43e..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-front-end-cert-provisioning.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-front-end-cert.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-front-end-cert.png deleted file mode 100644 index b72325801..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-front-end-cert.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-front-end-config.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-front-end-config.png deleted file mode 100644 index ab8162fb6..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-front-end-config.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-front-end-got-ip-port.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-front-end-got-ip-port.png deleted file mode 100644 index 1fbab1bc0..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-front-end-got-ip-port.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-https-lb-step2.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-https-lb-step2.png deleted file mode 100644 index 0fb458523..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-https-lb-step2.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-https-lb.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-https-lb.png deleted file mode 100644 index f664d0688..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-https-lb.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-lb-created.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-lb-created.png deleted file mode 100644 index b74a8e564..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-lb-created.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-lb-dns-warning.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-lb-dns-warning.png deleted file mode 100644 index 8cb8dede0..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-lb-dns-warning.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-lb1.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-lb1.png deleted file mode 100644 index 45eb2b2e3..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-lb1.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-load-balancing.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-load-balancing.png deleted file mode 100644 index e521851e5..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-load-balancing.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-name.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-name.png deleted file mode 100644 index e0181b3f3..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-name.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-network-endpoint-group-exists.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-network-endpoint-group-exists.png deleted file mode 100644 index 38319ebde..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-network-endpoint-group-exists.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-network-services.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-network-services.png deleted file mode 100644 index b1b10ad1a..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-network-services.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-new-backend-group.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-new-backend-group.png deleted file mode 100644 index 62747b78d..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-new-backend-group.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-new-cert.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-new-cert.png deleted file mode 100644 index f0ca6f2cf..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-new-cert.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-new-project.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-new-project.png deleted file mode 100644 index fa53638d7..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-new-project.png and /dev/null differ diff --git a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-review-finalize.png b/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-review-finalize.png deleted file mode 100644 index edef2cd7a..000000000 Binary files a/content/docs/tech-resources/media/enabling-https-engagement-tracking-on-sparkpost/gcp-review-finalize.png and /dev/null differ diff --git a/content/docs/tech-resources/using-proxy-https-tracking-domain.md b/content/docs/tech-resources/using-proxy-https-tracking-domain.md index d414d6cb6..8e8483fe6 100644 --- a/content/docs/tech-resources/using-proxy-https-tracking-domain.md +++ b/content/docs/tech-resources/using-proxy-https-tracking-domain.md @@ -1,5 +1,5 @@ --- -lastUpdated: "04/13/2021" +lastUpdated: "05/03/2023" title: "Using a Reverse Proxy for HTTPS Tracking Domain" description: "SparkPost supports HTTPS engagement tracking for customers via self-service for all SparkPost customers. To enable SSL engagement tracking for a domain, additional configuration for SSL keys is required. This resource outlines the use of a reverse proxy to host SSL certificates" --- @@ -54,7 +54,11 @@ sudo apt-get install nginx On a Debian distribution, this command will install nginx with a sample configuration, located at **/etc/nginx/**. To enable a reverse proxy back to SparkPost for your tracking domain, see the sample configuration file below (sample tracking domain is click.nddurant.com). +Note: you must store `spgo.io` in a variable so that nginx re-resolves the domain when its TTL expires. You also have to include the `resolver` directive to explicitly specify a DNS server to resolve the hostname. By including the `valid` parameter to the directive, you can tell nginx to ignore the TTL and to re‑resolve names at a specified frequency. In the sample below, nginx re‑resolves names every 10 seconds. + ```apacheconf +resolver 10.0.0.2 valid=10s; + server { # simple reverse-proxy listen 80; listen 443 ssl; @@ -62,7 +66,8 @@ server { # simple reverse-proxy # pass requests for dynamic content to rails/turbogears/zope, et al location / { - proxy_pass https://spgo.io; + set $backend "spgo.io"; + proxy_pass https://$backend; } } ``` @@ -211,6 +216,8 @@ curl -v https://click.nddurant.com/f/a/MV0K99nv-x6425iJtSb-qg~~/AALoUwA~/RgResx- The updated configuration file is: ```apacheconf +resolver 10.0.0.2 valid=10s; + server { # simple reverse-proxy listen 80; listen 443 ssl http2; @@ -225,7 +232,8 @@ server { # simple reverse-proxy # pass all other requests through to SparkPost engagement tracking location / { - proxy_pass https://spgo.io; + set $backend "spgo.io"; + proxy_pass https://$backend; proxy_set_header X-Forwarded-For $remote_addr; # pass the client IP to the open & click tracker server_tokens off; # suppress NGINX giving version/OS information on error pages } diff --git a/content/docs/user-guide/managing-users.md b/content/docs/user-guide/managing-users.md index 30877a60f..de119c51a 100644 --- a/content/docs/user-guide/managing-users.md +++ b/content/docs/user-guide/managing-users.md @@ -25,7 +25,7 @@ Admin users can add new users to their account by from the [Manage Users](https: ![](media/user-management/add-user.png) -5. The new user will receive an email to join your account similar to the one below. +5. The new user will receive an email to join your account similar to the one below. The invite link expires in 72 hours. ![](media/user-management/invitation-email.png) diff --git a/content/docs/user-guide/migrating-from-sendgrid.md b/content/docs/user-guide/migrating-from-sendgrid.md index d7d24ee50..0f3ce0145 100644 --- a/content/docs/user-guide/migrating-from-sendgrid.md +++ b/content/docs/user-guide/migrating-from-sendgrid.md @@ -4,7 +4,7 @@ title: "Migrating From SendGrid" description: "Changing email providers can be a time consuming process, but if you're coming from SendGrid, we've got you covered. Many differences between SendGrid and SparkPost can be attributed to terminology and approach, both of which you can get help with by referring to our..." --- -Changing email providers can be a time consuming process, but if you're coming from SendGrid, we've got you covered. Many differences between SendGrid and SparkPost can be attributed to terminology and approach, both of which you can get help with by referring to our [SendGrid Migration Guide.](https://www.sparkpost.com/migration-guides/sendgrid/) +Changing email providers can be a time consuming process, but if you're coming from SendGrid, we've got you covered. Many differences between SendGrid and SparkPost can be attributed to terminology and approach, both of which you can get help with by referring to our [SendGrid Migration Guide.](https://messagebird.com/migration-guides/sendgrid) If you're in a hurry, though, and you don’t have time to read this SendGrid Migration Guide and just want the gritty details, check out our [DevHub](https://developers.sparkpost.com/?_ga=2.57180074.1255629289.1508772206-1202146721.1501712582), [API docs](https://developers.sparkpost.com/api/?_ga=2.57180074.1255629289.1508772206-1202146721.1501712582), or [pricing](https://www.sparkpost.com/pricing/). If you have general questions, take a look through our [support articles](https://www.sparkpost.com/docs/), or if you just want to chat, [join our community on Slack](https://slack.sparkpost.com/?_ga=2.22115515.1255629289.1508772206-1202146721.1501712582). diff --git a/content/momentum/4/console-commands/4-mailq.md b/content/momentum/4/console-commands/4-mailq.md index afdd5cbc5..bebc1fb29 100644 --- a/content/momentum/4/console-commands/4-mailq.md +++ b/content/momentum/4/console-commands/4-mailq.md @@ -1,5 +1,5 @@ --- -lastUpdated: "03/26/2020" +lastUpdated: "05/08/2023" title: "mailq" description: "mailq show the status of the mail queues mailq domain d domain name binding b binding name limit l number When issued with no arguments this command shows counts for the active queue and the delayed queues sorted by binding groups and bindings Sample output is shown below The Group..." --- @@ -28,4 +28,8 @@ default/#mmove gmail.com 0 0 The `Group/Binding` column shows the group and the binding that a domain belongs to. The `default/#move` entry under the `Group/Binding` column is the cluster message movement binding in the `default` binding. This is a virtual binding for moving messages between nodes. `AQ` shows the items in the active queue and `DQ` shows the items in the delayed queue. -Use this command with the `--domain` *`domain_name`* argument to show the statistics for a specific domain. Any number of domains may be specified. The `--binding` option is used in the same way. Limit the output by using the --limit *`number`* option. The default value for `--limit` is `20`. \ No newline at end of file +Use this command with the `--domain` *`domain_name`* argument to show the statistics for a specific domain. Any number of domains may be specified. The `--binding` option is used in the same way. Limit the output by using the --limit *`number`* option. The default value for `--limit` is `20`. + +## Attention + +On a busy system, if this command is run frequently, it may result in a Momentum watchdog restart. If `mailq` data is needed multiple times per hour then it is recommended to use the [mailq HTTP endpoint](/momentum/4/http-api-stats/queues-mailq.md) instead. diff --git a/content/momentum/4/console-commands/summary.md b/content/momentum/4/console-commands/summary.md index 982f0b850..d00c73179 100644 --- a/content/momentum/4/console-commands/summary.md +++ b/content/momentum/4/console-commands/summary.md @@ -1,5 +1,5 @@ --- -lastUpdated: "03/26/2020" +lastUpdated: "05/08/2023" title: "summary" description: "summary show global metrics summary with mobile Perhaps the most common and useful command for the console summary will produce global metrics such as queue sizes message counts and throughput rates since startup or the last reset of statistics If you have configured your control listener to listen on the..." --- @@ -207,4 +207,8 @@ Use the `with-mobile` option to display the status of SMPP and MM7 message queue ## See Also -[binding summary](/momentum/4/console-commands/binding-summary), [summary reset](/momentum/4/console-commands/summary-reset) \ No newline at end of file +[binding summary](/momentum/4/console-commands/binding-summary), [summary reset](/momentum/4/console-commands/summary-reset) + +## Attention + +On a busy system, if this command is run frequently, it may result in a Momentum watchdog restart. If `summary` data is needed multiple times per hour then it is recommended to use the [summary HTTP endpoint](/momentum/4/http-api-stats/summary.md) instead. diff --git a/content/momentum/4/http-api-stats.md b/content/momentum/4/http-api-stats.md new file mode 100644 index 000000000..bbe2c0b1d --- /dev/null +++ b/content/momentum/4/http-api-stats.md @@ -0,0 +1,23 @@ +--- +lastUpdated: "05/08/2023" +title: "Stats HTTP API" +description: "Welcome to the HTTP API section" +--- + +Welcome to the HTTP API section. You can find here the description of the HTTP API implemented by the `msys.gc_stats` library. This API is supported by Momentum 4.4.1 or later. + +Before using it you must make sure you have correctly set up the HTTP listener to the TCP port 2081 and Momentum is loading the library that implements the API. A sample of this configuration is shown below: + +``` +HTTP_listener { + Listen ":2081" { } +} + +scriptlet "scriptlet" { + script "http_api_stats" { + source = "msys.gc_stats" + } +} +``` + +This API is only supported when Supercharger is enabled and a `Maintainer_Pool` `EventLoop` is set up. diff --git a/content/momentum/4/http-api-stats/queues-mailq.md b/content/momentum/4/http-api-stats/queues-mailq.md new file mode 100644 index 000000000..eaf4104f7 --- /dev/null +++ b/content/momentum/4/http-api-stats/queues-mailq.md @@ -0,0 +1,98 @@ +--- +lastUpdated: "05/08/2023" +title: "Mail Queue" +description: "/stats/queues/mailq show the status of the mail queues When issued with no arguments this command shows counts for the active queue and the delayed queues sorted by binding groups and bindings This request shall be done to the port 2081 using any..." +--- + + +## Name + +`/stats/queues/mailq` — show the status of the mail queues + +## Synopsis + +`GET /stats/queues/mailq` + +`GET /stats/queues/mailq?domain=some.domain` + +`GET /stats/queues/mailq?binding=ip_1.2.3.4` + +## Description + +When issued with no arguments this command shows counts for the active queue and the delayed queues sorted by binding groups and bindings. + +The data is formatted as a JSON object and you might want to use the `curl` command to do the request (e.g. `curl -sS localhost:2081/stats/queues/mailq`). + +Sample output is shown below: + +```json +{ + "QueueSummary": [ + { + "group": "bg_new", + "binding": "ip_23.45.67.89", + "domain": "a.random.domain", + "aq": 1, + "dq": 284, + "receptions": 1048, + "permfails": 1056, + "transfails": 11612, + "deliveries": 0 + }, + { + "group": "spc:123456:foobar_1", + "binding": "ip_12.34.56.78", + "domain": "some.other.domain", + "aq": 0, + "dq": 0, + "receptions": 0, + "permfails": 0, + "transfails": 0, + "deliveries": 0 + } + ] +} +``` + +The `group` and `binding` fields shows the group and the binding that a domain belongs to. `aq` shows the items in the active queue and `aq` shows the items in the delayed queue. The number of receptions, permanent failures, transient failures, and deliveries are shown in the `receptions`, `permfails`, `transfails`, and `deliveries` fields respectively. + +Use this request with the `domain=a.specific.domain` argument to show the statistics for a specific domain, and the `binding=name` can be used in the same way to show a specific binding. The output cannot be limited or split into multiple pages. + +Examples of using the optional arguments: + +```bash +# Check the queue for the "gmail.com" domain +curl -sS "localhost:2081/stats/queues/mailq?domain=gmail.com" + +# Check the queue for the "gmail.com" domain related to the IP 1.2.3.4 +curl -sS "localhost:2081/stats/queues/mailq?domain=gmail.com&binding=ip_1.2.3.4" +``` + +The output might be a somewhat large JSON array, so to make it easier to read, you can try using `jq` and `column` to convert it to a table: + +```bash +# Table with just bindings, domains, AQ and DQ +curl -sS "localhost:2081/stats/queues/mailq" | \ + jq -r '(["BINDING","DOMAIN","AQ","DQ"]|(.,map(length*"-"))),(.QueueSummary|.[]|[.binding,.domain,.aq,.dq])|@tsv' | \ + column -t + +# Table with all fields +curl -sS "localhost:2081/stats/queues/mailq" | \ + jq -r '(["GROUP","BINDING","DOMAIN","AQ","DQ","RECEPTIONS","PERMFAILS","TRANSFAILS","DELIVERIES"]|(.,map(length*"-"))),(.QueueSummary|.[]|[.group,.binding,.domain,.aq,.dq,.receptions,.permfails,.transfails,.deliveries])|@tsv' | \ + column -t +``` + +And the output will be something like this: + +``` +GROUP BINDING DOMAIN AQ DQ RECEPTIONS PERMFAILS TRANSFAILS DELIVERIES +----- ------- ------ -- -- ---------- --------- ---------- ---------- +amet:1:lorem ip_1.2.3.4 gmail.com 5 0 14107 1 10 14092 +consectetur:1:ipsum ip_2.3.4.5 hotmail.com 5 0 224 0 0 215 +adipiscing:1:dolor ip_3.4.5.6 yahoo.com 5 0 181 23 153 0 +elit:1:sit ip_4.5.6.7 hotmail.com 4 0 223 0 0 216 +``` + +## Note + +This command was implemented in Momentum 4.4.1. diff --git a/content/momentum/4/http-api-stats/summary.md b/content/momentum/4/http-api-stats/summary.md new file mode 100644 index 000000000..c0c9bf149 --- /dev/null +++ b/content/momentum/4/http-api-stats/summary.md @@ -0,0 +1,257 @@ +--- +lastUpdated: "05/08/2023" +title: "Summary" +description: "stats summary show global metrics Perhaps the most common API command stats summary will produce global metrics such as queue sizes message counts and throughput rates since startup or the last reset of statistics" +--- + + +## Name + +`/stats/summary` — show global metrics + +## Synopsis + +`GET /stats/summary` + +## Description + +Perhaps the most common API command, `/stats/summary` will produce global metrics such as queue sizes, message counts and throughput rates since startup or the last reset of statistics. + +The data is formatted as a JSON object and you might want to use the `curl` command to do the request (e.g. `curl -sS localhost:2081/stats/summary`). + +Sample output is shown below: + +```json +{ + "OutboundConcurrency": 209, + "InboundConcurrency": 1340, + "ActiveDomains": 8253, + "ActiveQueueSize": 39, + "DelayedQueueSize": 2, + "TotalQueueSize": 47, + "DNSResolver": "ares", + "DNSAQueries": 6307067, + "DNSAAAAQueries": 0, + "DNSMXQueries": 5361180, + "DNSQueryRate": 2.25, + "ResidentMessages": 120, + "DiskQueueProgress": " 29/ 29", + "DeliveredMessages": 516030153, + "FailedMessages": 6406412, + "TransientFailures": 7533966, + "RejectedMessages": 0, + "ReceivedMessages": 522356470, + "DeliveryRate": 100.85, + "ReceptionRate": 100.84, + "RejectionRate": 0, + "RejectionPercentage": 0, + "StatisticsLastReset": 5180099, + "Uptime": 510923 +} +``` + +The report fields are as follows: + +
+ +
OutboundConcurrency
+ +
+ +The current number of established outbound sessions. + +
+ +
InboundConcurrency
+ +
+ +The current number of established inbound sessions. + +
+ +
ActiveDomains
+ +
+ +The number of domains in the DNS cache. + +
+ +
ActiveQueueSize
+ +
+ +The number of messages in the system that require immediate delivery attempts. + +
+ +
DelayedQueueSize
+ +
+ +The number of messages in the system that have been delayed. A message is delayed due to transient delivery failures (4xx SMTP codes) and a retry time is calculated for the message. When that retry time is reached, the message will be moved from the delayed queue to the active queue. + +
+ +
TotalQueueSize
+ +
+ +The sum of all queues. + +
+ +
DNSResolver
+ +
+ +The library used to resolve DNS queries. + +
+ +
DNSAQueries
+ +
+ +The total number of A type queries issued since startup or last summary reset. + +
+ +
DNSAAAAQueries
+ +
+ +The total number of AAAA type queries issued since startup or last summary reset. + +
+ +
DNSMXQueries
+ +
+ +The total number of MX type DNS queries issued since startup or last summary reset. + +
+ +
DNSQueryRate
+ +
+ +The average number of DNS queries/second performed since startup or last summary reset. + +
+ +
ResidentMessages
+ +
+ +The number of message bodies held in memory. + +
+ +
DiskQueueProgress
+ +
+ +The message spool in progress. + +
+ +
DeliveredMessages
+ +
+ +The number of messages successfully delivered by Momentum since it was started or since the last summary reset. + +
+ +
FailedMessages
+ +
+ +The number of outbound messages permanently failed since it was started or since the last summary reset. + +
+ +
TransientFailures
+ +
+ +The number of outbound messages transiently failed since it was started or since the last summary reset. + +
+ +
RejectedMessages
+ +
+ +The number of messages rejected by Momentum since it was started or since the last summary reset. + +
+ +
ReceivedMessages
+ +
+ +The number of messages received by Momentum for deliver since it was started or since the last summary reset. + +
+ +
DeliveryRate
+ +
+ +The average number of messages/second delivered (successful and unsuccessful) since Momentum was started or since the last summary reset. + +
+ +
ReceptionRate
+ +
+ +The average number of messages/second received for delivery since Momentum was started or since the last summary reset. + +
+ +
RejectionRate
+ +
+ +The average number of messages/second rejected since Momentum was started or since the last summary reset. + +
+ +
RejectionPercentage
+ +
+ +The percentage of messages rejected by Momentum since it was started or since the last summary reset. + +
+ +
StatisticsLastReset
+ +
+ +The number of seconds since statistics were reset using the "summary reset" command (see below). + +
+ +
Uptime
+ +
+ +The number of seconds that Momentum has been running continuously. + +
+ +
+ +## See Also + +[summary reset](/momentum/4/console-commands/summary-reset) + +## Note + +This command was implemented in Momentum 4.4.1. diff --git a/content/momentum/4/index.md b/content/momentum/4/index.md index a08a552f4..2e35bceb3 100644 --- a/content/momentum/4/index.md +++ b/content/momentum/4/index.md @@ -1,5 +1,5 @@ --- -lastUpdated: "03/26/2020" +lastUpdated: "05/08/2023" title: "Momentum 4.x" description: "Message Systems Inc Copyright 2014 Message Systems Inc Confidential Proprietary Abstract This book documents Momentum 4 Document generated on 2018 Aug 28 Table of Contents Preface 1 Typographical Conventions Used in This Document I Introduction to Momentum 1 Components 2 Life of A Message 3 Roles and Behaviors 4 Licensed..." --- @@ -22,6 +22,7 @@ Document generated on: 2018-Aug-28 ### Momentum 4.x Changelogs +- [Momentum 4.4.1 Changelogs](/momentum/changelog/4/4-4-1) - [Momentum 4.4.0 Changelogs](/momentum/changelog/4/4-4-0) - [Momentum 4.3.1 Changelogs](/momentum/changelog/4/4-3-1) - [Momentum 4.3.0 Changelogs](/momentum/changelog/4/4-3-0) diff --git a/content/momentum/changelog/4/4-4-1.md b/content/momentum/changelog/4/4-4-1.md new file mode 100644 index 000000000..ff644b7d7 --- /dev/null +++ b/content/momentum/changelog/4/4-4-1.md @@ -0,0 +1,64 @@ +--- +lastUpdated: "05/08/2023" +title: "Momentum 4.4.1 Changelog" +description: "Momentum 4.4.1 was released on 2023-01-31. This section will list all of the major changes that happened with the release of Momentum 4.4.1 Depending on installation type, all changes may not be applicable" +--- + +This section will list all of the major changes that happened with the release of **Momentum 4.4.1**. Depending on installation type, all changes may not be applicable + + + +| Type | Ticket | Description | +| --- | --- | --- | +| Fix | SD-2935 | Crash when outbound_throttle_messages is configured at the same time as core_mailq_throttle_message hook | +| Fix | SD-2995 | soft_bounce functionality periodically tries using an invalid connection handle causing a crash | +| Fix | SD-3070 | Fix transmission_id truncation when calling msg_gen_check_transmission_expiration_hook | +| Fix | SD-3167 | Fixed stack overflow in http2clnt module | +| Fix | SD-3263 | DKIM Oversigning to Avoid Replay Attacks | +| Fix | SD-3288 | Transmission API does not sanity check recipient list for empty array | +| Fix | SD-3335, SD-3374, SD-3775 | Files created from lu_pull are now all owned by ecuser | +| Fix | SD-3497 | DSNs are not Generated when RCPTO is Upper Case | +| Fix | SD-3535 | extract_sender_from_msg moved to msys namespace | +| Fix | SD-3606 | rcpt_to incorrect for "Unconfigured sending domain" rejection events for multi-recipient SMTP injections | +| Fix | SD-3619 | Fix crashes in Sieve when creating new messages | +| Fix | SD-3649 | Upgrade to latest jlog package | +| Fix | SD-3685 | Invalid write in outbound smtp auth when base64 encoded username + password is length of a power of 2 | +| Fix | SD-3702 | Incorrect DKIM signature for some large body messages | +| Fix | SD-3755 | Fixed bug that prevented more than one redirect lookup on SPF records | +| Security Fix | SD-2871 | Fix Error "Inconsistent nullness check" | +| Security Fix | SD-2873 | Fix Error " Dead code due to goto or break statement" alert | +| Security Fix | SD-2870 | Fix Error "Duplicate include guard" alert in Momentum | +| Security Fix | SD-2846 | Fix Critical "Non-constant format string" alerts in Momentum | +| Security Fix | SD-2847 | Fix Critical "Use of potentially dangerous function" alerts in Momentum | +| Security Fix | SD-2848 | Fix Critical "Unbounded write" alerts in Momentum | +| Security Fix | SD-2849 | Fix Critical "Potentially overrunning write" alerts in Momentum | +| Security Fix | SD-2850 | Fix critical "Static array access may cause overflow" alerts in Momentum | +| Security Fix | SD-2851 | Fix Critical "Potentially unsafe use of strcat" alerts in Momentum | +| Security Fix | SD-3099 | Fix Critical "Unbounded write" codeQL alert | +| Security Fix | SD-2866 | Fix High "Not enough memory allocated for array of pointer type" alert | +| Security Fix | SD-2863 | Fix High "Overflow in uncontrolled allocation size" | +| Security Fix | SD-2864 | Fix High "Time-of-check time-of-use filesystem race condition" | +| Security Fix | SD-2855 | Fix High "Use of a broken or risky cryptographic algorithm" alert in Momentum | +| Security Fix | SD-2856 | Fix High "Multiplication result converted to larger type" alert | +| Security Fix | SD-2857 | Fix High "Call to alloca in a loop" alert | +| Security Fix | SD-2858 | Fix High "Potentially uninitialized local variable" alerts | +| Security Fix | SD-2867 | Fix High "Array offset used before range check" alert in Momentum | +| Security Fix | SD-2868 | Fix High "Incorrect 'not' operator usage" alert | +| Security Fix | SD-2872 | Fix Warning " Unsigned comparison to zero" alert | +| Security Fix | SD-3074 | Fix Warning "Lossy function result cast" | +| Security Fix | SD-2876 | Fix Warning "Ambiguously signed bit-field member" alert | +| Security Fix | SD-2875 | Fix Warning "Comparison result is always the same" alert | +| Feature | SD-2751 | Adjust threshold for triggering automated memory/thread stats collection in panic log | +| Feature | SD-2764 | HTTP endpoints to retrieve queue sizes | +| Feature | SD-3061 | Update sk_tool so it works with auth login for SP | +| Feature | SD-3081 | Add millisecond precision to SMTP tracing | +| Feature | SD-3087 | Momentum summary HTTP endpoint | +| Feature | SD-3093 | Run lua object -> json string serialization for http responses into a thread pool | +| Feature | SD-3170 | Momentum Transmissions API: Allow blank or empty subject header and customer supplied header values | +| Feature | SD-3206 | Issues with behavior when STARTTLS is issued on an in-use connection | +| Feature | SD-3503 | Prevent protocol deviations related to openssl without the performance impact of SD-2734 | +| Feature | SD-3622 | Move JSON parsing and utf-8 validation out of CPU thread pool to dedicated thread pool | +| Feature | SD-3623 | Improve transmissions API sampling capabilities | +| Feature | SD-3633 | Move ET link processing out of CPU thread pool to dedicated thread pool | +| Feature | SD-3559 | Only pull necessary fields when validating stored templates for transmissions requests | +| Feature | SD-3661 | Empty header fields are stripped from generated messages | diff --git a/content/momentum/changelog/4/index.md b/content/momentum/changelog/4/index.md index c81eac8d0..21682f35b 100644 --- a/content/momentum/changelog/4/index.md +++ b/content/momentum/changelog/4/index.md @@ -1,11 +1,12 @@ --- -lastUpdated: "10/13/2021" +lastUpdated: "05/08/2023" title: "Category File" type: "custom" name: "Momentum 4.x Changelogs" description: "Momentum 4.x Changelogs" --- +* [Momentum 4.4.1 Changelogs](/momentum/changelog/4/4-4-1) * [Momentum 4.4.0 Changelogs](/momentum/changelog/4/4-4-0) * [Momentum 4.3.1 Changelogs](/momentum/changelog/4/4-3-1) * [Momentum 4.3.0 Changelogs](/momentum/changelog/4/4-3-0) diff --git a/content/momentum/navigation.yml b/content/momentum/navigation.yml index d4e58c6db..03bea5ce8 100644 --- a/content/momentum/navigation.yml +++ b/content/momentum/navigation.yml @@ -511,6 +511,13 @@ title: Sending Emails as CC and BCC - link: /momentum/4/complex-template title: Using Complex Templates + - link: /momentum/4/http-api-stats + title: Stats HTTP API + items: + - link: /momentum/4/http-api-stats/summary + title: Summary + - link: /momentum/4/http-api-stats/queues-mailq + title: Mail Queue - link: /momentum/4/p-analytics title: Reporting and Engagement Tracking items: @@ -1958,6 +1965,8 @@ - link: /momentum/changelog/4 title: Momentum 4.x Changelog items: + - link: /momentum/changelog/4/4-4-1 + title: Momentum 4.4.1 Changelog - link: /momentum/changelog/4/4-4-0 title: Momentum 4.4.0 Changelog - link: /momentum/changelog/4/4-3-1 diff --git a/cypress/integration/subpage.spec.ts b/cypress/integration/subpage.spec.ts index f3b2c80a1..8a6af5dfa 100644 --- a/cypress/integration/subpage.spec.ts +++ b/cypress/integration/subpage.spec.ts @@ -26,13 +26,13 @@ describe('Sub section page', () => { it('Should work as expected for internal links', () => { cy.visit('/momentum/1st-level/test'); cy.contains('Internal Link').click(); - cy.location('pathname').should('eq', '/momentum/1st-level/'); + cy.location('pathname').should('eq', '/momentum/1st-level'); }); it('Should allow for relative links in the current directory', () => { cy.visit('/momentum/1st-level/test'); cy.contains('Relative to current directory Link').click(); - cy.location('pathname').should('eq', '/momentum/1st-level/relative-link-test/'); + cy.location('pathname').should('eq', '/momentum/1st-level/relative-link-test'); }); }); }); diff --git a/next.config.js b/next.config.js index 9035c7922..b0e964d2a 100644 --- a/next.config.js +++ b/next.config.js @@ -4,7 +4,7 @@ const SentryPlugin = require('@sentry/webpack-plugin'); module.exports = { reactStrictMode: true, swcMinify: true, - trailingSlash: true, + trailingSlash: false, // Sourcemaps are enabled to be uploaded to Sentry // Warning: Can significantly increase build times diff --git a/pages/docs/[...slug].tsx b/pages/docs/[...slug].tsx index 84719883e..89070dc20 100644 --- a/pages/docs/[...slug].tsx +++ b/pages/docs/[...slug].tsx @@ -14,6 +14,7 @@ import DocumentationContent from 'components/site/documentationContent'; import DocsIndexListPageContent from 'components/site/docsIndexListPageContent'; import type { NavigationItemProps } from 'components/site/baseNavigation'; import { useRouter } from 'next/router'; +import { useEffect } from 'react'; type PostPageProps = { content: string; @@ -31,6 +32,14 @@ const PostPage = (props: PostPageProps): JSX.Element => { const { content, data, navigationData, isIndex, categoryData } = props; const router = useRouter(); + useEffect(() => { + const [path, queryParams] = router.asPath.split('?'); + const tagId = router.asPath.split('#')[1]; + + router.push(path + (tagId && queryParams ? '#' + tagId : '')) + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + // This is to check for a url that either contains a trailing slash or not (since netlify will show either) const trailingSlashOrNo = (navData: NavigationItemProps): boolean => { const linkComponents = navData.link.split('/'); @@ -39,6 +48,7 @@ const PostPage = (props: PostPageProps): JSX.Element => { return link === router.asPath || link + '/' === router.asPath; }; + return (