> This is part 1 of 3 of the full documentation (pages 1–100 of 207).
> The content is paginated: fetch every part to see all of it.
> Next part: https://docs.emaildelivery.com/docs/llms-full.txt/1
> Page index: https://docs.emaildelivery.com/docs/llms.txt

# FAQ

&#x20;🚨 **Urgent:** 🚨 **Upgrade your legacy EmailDelivery.com installation IMMEDIATELY to keep the Premium editor working.**

A mandatory upgrade is needed which will cause the Premium editor to stop working until you've upgraded to the latest version of EmailDelivery.com.

The following does NOT apply to the Community Edition open-source version; only the original version. EmailDelivery.com Community Edition already meets the latest Premium Editor requirements.&#x20;

To be upgraded to the latest version, run the upgrade script on your VPS or dedicated server in the installation directory:&#x20;

`cd edcom-install`

.`/upgrade.sh`

**How does the Community Edition open-source release impact existing customers?**

{% hint style="danger" %}
This release includes important new performance and stability improvements.&#x20;
{% endhint %}

The EmailDelivery.com platform is now free and open source under the MIT license.&#x20;

You can [download and install](https://github.com/emaildelivery/edcom-ce) it on unlimited servers, as a license is no longer required.&#x20;

Our only paid feature is the Premium HTML Email Builder, with all capabilities unlocked. &#x20;

All license holders with any commercial license key version can enable Premium HTML Email Builder on their Community Edition open-source installation.&#x20;

This release includes important new performance and stability improvements.&#x20;

All prior commercially licensed versions are being deprecated; we recommend migrating to Community Edition as soon as possible.   &#x20;

**What is the Premium Email Builder, and how does it differ from the native editors?**

The Premium Email Builder is the gold standard third-party email builder embedded into most enterprise ESPs.&#x20;

Our native drag-and-drop editor is solid, but the Premium Email Builder is developed by a company where the editor is the entire product, and perfecting the editor is the sole focus.

It's a considerable engineering challenge to reach parity with a specialized plugin when you're building a comprehensive ESP platform with countless other components and capabilities.

The EmailDelivery.com platform with the integrated email builder is the premium "it does everything I want, the way that I want it" experience.&#x20;

**I have a question about cold email...**

We have nothing against cold email or any other regular business activity, but this product was created and designed for customers who are sending primarily or only wanted email.&#x20;

We can not support cold email and can not entertain any questions related to cold email, no exceptions can be made at this time.&#x20;

This includes questions about why we are unable to support cold email, it's like asking why we can't make you a turkey sandwich at a delicatessen.&#x20;

We're a wanted email product, not a cold email product, you do not want to use our software for the things it doesn't do. &#x20;

**Can I resell this to others? Can I use this to make money as an agency, consultant, etc?**

Yes, we strongly encourage this use case.&#x20;

**What does it mean to be self-hosted?**

This is not a SaaS, unless you decide to start one with it.&#x20;

Our software runs on your own Ubuntu Linux VPS in total privacy, just like WordPress.&#x20;

You can use it for in-house email marketing or to launch your own SaaS as an ESP or email marketing agency.

**Explain this product in a few sentences.**&#x20;

Our platform is exactly the same as having a copy of MailerLite, Brevo, ConvertKit, or a similar ESP running on a server you own and control.&#x20;

You are the owner, postmaster, and administrator, and can sell email marketing accounts to customers, or use them only for yourself.&#x20;

When you sign up for an ESP account as a customer, the vast majority of the time, they're really just leasing you their email marketing software as SaaS.&#x20;

Behind the scenes, they connect to a 3rd-party email delivery API service such as Mailgun, SparkPost, SendGrid, or Amazon SES, which delivers the email on their behalf.&#x20;

With EmailDelivery.com's self-hosted platform, now that's you.&#x20;

**What are the white-label and branding capabilities?**

You can change the colors to match your brand by directly editing CSS inside the platform and uploading your own logo and favicon.

Your sending domains, message template tracking, and message image links are always branded with any domain of your choosing.&#x20;

**Is this good for managing multiple internal brands?**

Yes.

You can silo each brand into its own customer account with separate contact lists, campaigns, email sequences, forms, integrations, webhooks, and assets.&#x20;

Use administrator impersonation to open tabs for all your customer accounts in the same browser window, then flip through tabs to efficiently manage all your brands in one place.&#x20;

**Can someone install this for me?**

We offer professional services.&#x20;

**Can I change servers? Start on staging, move to production?**&#x20;

Yes, see [moving to a new server](/docs/post-installation/moving-to-a-new-server).

**Does it run on ARM?**

Yes, there are ARM and x86 builds.&#x20;

**Does this do a "shared warmup" like Instantly.ai?**

We're not like Instantly, our automated warmup features are the traditional ones used in a regular ESP or with an MTA that predates the cold email era.&#x20;

**Can I use it for cold email?**

We don't have any of the features you'd find in a cold email system.&#x20;

Compare Mailchimp to Instantly: two completely different platforms that do completely different things, we're more of a Mailchimp.&#x20;

We've heard that some of our customers have integrated us into their cold email ecosystem by using our platform as their SMTP Relay endpoint, but beyond that, we really don't have much to offer cold emailers.&#x20;

**Are you integrated with Pabbly?**

Yes, we have a comprehensive white-label integration with both triggers and actions, including sending email directly from Pabbly through your emaildelivery.com platform. The link is in the documentation under the [Integrations](/docs/integrations/pabbly-connect) category.&#x20;

**Explain the backends and frontends concept**

A customer account uses the frontend, the frontend is an email marketing platform just like ConvertKit, Brevo, AWeber, Mailjet, or Mailchimp. &#x20;

An administrator account uses the backend, the backend is a control panel where you add connections to email delivery services like Mailgun, SparkPost, Amazon SES, SMTP Relays such as SMTP.com, and SendGrid, or use our included MTA to send over your own IP addresses on your own servers.&#x20;

This video shows you each account type inside of the platform:&#x20;

{% embed url="<https://docs.emaildelivery.com/docs/introduction/backend-frontend-customers-users>" %}

**Why can't this just run in a shared hosting environment?**

The EmailDelivery.com platform is a collection of pre-configured immutable Docker containers using Docker orchestration, which includes containers for a web server, database, cron, and everything else the software needs to run right out of the box.&#x20;

You can't share an IP address with other applications, as the ports the platform needs in order to work such as 80 and 443 will be blocked and it will fail to start.&#x20;

{% hint style="info" %}
You can run on the same **server** as other applications using ports 80 and 443, but the platform needs its own *IP address* on that server in order for this to work.&#x20;
{% endhint %}

This is powerful software that can send millions of messages. It's capable of handling complex data manipulation and segmenting operations on lists containing millions of contacts, and it does it all on an inexpensive VPS while staying fast.&#x20;

Hate to use a buzzword here, but it's "Enterprise Grade".&#x20;

Shared hosting environments are commonly slow even for simple tasks.&#x20;

Our platform is more demanding than a simple PHP script, but engineered well enough to take advantage of an inexpensive dedicated/non-shared environment to deliver an experience in line with the enterprise-grade expectations of a SaaS someone would pay $1 CPM to use.

**Does this have an inbox like Roundcube, Zoho, or Gmail?**&#x20;

One way to accomplish this is to use Cloudflare Email Routing or mxroute.com as your MX server and forward replies to your Gmail account. &#x20;

To get a dedicated inbox, you would use a product like migadu.com or Google Workspace; we don't have one built into the platform.&#x20;

Receive replies at your dedicated inbox by using a separate Reply-To email address in your email marketing campaigns.

When someone hits the reply button to comment or ask a question, that Reply-To email could go to your migadu.com, Google Workspace, Roundcube, or Zoho.  &#x20;

You've probably noticed it's very common for email marketing campaigns from large senders to use 'noreply' email addresses.

This means they don't accept replies from subscribers because they don't want an inbox for their email marketing, they want customers to reach out with any questions through another support channel that can handle customer inquiries in a more organized way.&#x20;

Whether you use an inbox for replies or not will probably depend on what sort of list you're running and how personalized it is:&#x20;

Course creators, bloggers, ebook authors, coaches, and people who sell things on Gumroad and similar platforms often will want to receive replies and read them.&#x20;

**Can this run on multiple servers?**

Velocity MTA can be installed on unlimited servers and integrated with a single or multiple ESP installations.

The ESP platform installation is portable, meaning you don't need to "reinstall" on a new server; you can copy over the installation directory, and your platform will resume from its last saved state.&#x20;

**Do I have to use this Velocity MTA thing? It scares me.**

Nope! You can completely ignore it.&#x20;

Velocity MTA is entirely optional and is installed separately from the ESP platform.&#x20;

**Do you support any non-English languages?**

We're working on internationalization; you'll be able to directly edit the translation files and customize your installation when this is released.&#x20;

**Are you GDPR compliant?**

Yes.

We even offer a GDPR region option for our [recommended VPS](/docs/faq/recommended-vps).

**Where's the roadmap?**&#x20;

Currently being reworked for the recent Community Edition open-source release.&#x20;

**Do you support my preferred email composer style?**

Yes.

We have four email template editors:&#x20;

* Embedded Beefree (our only paid feature, requires a license)
* High-performance drag-and-drop composer we created from scratch.
* WYSIWYG via integrated TinyMCE.
* Raw HTML for uploading and editing your own original code.&#x20;

You can also skip all of the editors and use the API or SMTP Relay instead.&#x20;


# Enabling Premium Email Builder in Community Edition

To use the Premium HTML Email Builder with your EmailDelivery.com ESP platform, first [purchase a license key](https://emaildelivery.com/) if you don't already have one. &#x20;

All existing license holders with any commercial license key version can enable Premium Email Builder on their Community Edition open-source installation, regardless of which tier your license was previously under.&#x20;

### Activation Instructions:

1. Add your license key to `edcom-install/config/commercial_license.key`&#x20;
2. Run `./restart.sh` in `edcom-install` &#x20;


# Explainer Video

{% embed url="<https://emailteam.wistia.com/medias/xjuxiqnyvr>" %}


# Why go self-hosted?

**What are some of the advantages of self-hosting?**&#x20;

{% hint style="success" %}
No plans. No gates. No unlocks. No upsells. No monthly minimums.
{% endhint %}

If you send 1,000 messages a day or 1,000,000, all of the features of the software are available from day one.

No monthly billing just to maintain future access.&#x20;

No SaaS sales team breathing down your neck as you scale, looking for a whale.

{% hint style="success" %}
Resell it to others at minimal cost to yourself.&#x20;
{% endhint %}

When you white-label an ESP, you pay the ESP a fixed CPM, and then you charge someone else more than that, pocketing the difference.&#x20;

Your ESP may require contracts, mandatory minimums, monthly commitments to lower the CPM you pay, and additional charges for bundled services and technology; as a white-labeler of an Enterprise ESP, you may be expected to buy into the entire infrastructure.&#x20;

With EmailDelivery.com, you can charge your ESP customers a CPM to send over dedicated IPs that cost you $2 a month running on a VPS that costs $35 a year, and they'll never know the difference.&#x20;

{% hint style="success" %}
Freedom! You set the content rules.&#x20;
{% endhint %}

The list of prohibited verticals at ESPs can be quite lengthy:&#x20;

Loans, mortgages, cryptocurrencies, nutraceuticals, investments, stocks, and trading, dating, adult content, debt, credit repair, gambling, lead generation, affiliate marketing, and many other restrictions placed on lawful areas of business they disfavor.&#x20;

This is your ESP, where you run the show.&#x20;

You set the content policies, not a faceless compliance team firewalled behind corporate gatekeepers and capricious gobbledegook.&#x20;

{% hint style="success" %}
Privacy.&#x20;
{% endhint %}

No one has access to your ESP but you and those who you grant access to it, not even us. &#x20;

{% hint style="success" %}
Avoid Vendor Lock-in.
{% endhint %}

Swap in and out any email API, SMTP Relay, MTA, and IP addresses from anywhere in the world at will.&#x20;

{% hint style="success" %}
Bring marketing in-house.
{% endhint %}

Slash costs and dependencies on third parties who make surprise pricing and policy changes all the time.&#x20;

{% hint style="success" %}
Direct logs and DB access.
{% endhint %}

There's no middleman between you and your data.&#x20;

{% hint style="success" %}
Continuity and disaster recovery.&#x20;
{% endhint %}

Control and customize your backup and redundancy strategy.&#x20;

{% hint style="success" %}
Compliance.&#x20;
{% endhint %}

Use a server in a GDPR region, or on-premises in your own data center.

Keep sensitive data safe while maintaining established security standards, practices, and policies.&#x20;

{% hint style="success" %}
Portability.&#x20;
{% endhint %}

Move your existing installation between servers, upgrade or downgrade your hardware at will, you decide what server your software runs on and how much it costs, if anything. &#x20;

**Wasn't the SaaS model created to be a superior alternative to self-hosting?**

The SaaS model was created as a business opportunity, but 95%+ of SaaS businesses fail and shut down.&#x20;

Our software is yours forever.&#x20;

No waking up to an announcement in your inbox one day about the impending loss of your investment with a deadline for getting your data out before it's deleted.&#x20;

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F37IpJFYXM21U79RaJUGP%2FScreenshot%202024-01-24%20at%2012.22.17%E2%80%AFPM.png?alt=media&amp;token=c091d7a8-b593-4756-9f3f-b78348aa312d" alt=""><figcaption></figcaption></figure>

Even without future updates, our software would continue to work for as long as the underlying technology it relies on remains available. This could be as long as a decade.  &#x20;

Until fairly recently in internet history, everything was self-hosted; It's how all of us got here.&#x20;

**Can someone install this for me?**

We offer professional services.

**What's the installation like?**

To install the ESP platform yourself, you connect to an Ubuntu Linux VPS using SSH on macOS or PuTTY on Windows, then copy and paste the 5 commands shown in our installation documentation, which includes screenshots of each step.&#x20;

The Digital Ocean Droplet Console is excellent and can be used as an alternative to SSH.&#x20;

Once the installation is complete, you need to create a DNS record pointing to the IP address of your VPS, just like if you were naming your WordPress site in Cloudflare, Namecheap, or GoDaddy.&#x20;

**How does backup and restore work?**&#x20;

Thanks to the magic of Docker, everything in the ESP platform lives under one directory called edcom-install.&#x20;

To back up your ESP you just shut it down and move the edcom-install directory somewhere.&#x20;

That somewhere could be an external disk, another VPS, a secure backup service like SpiderOak, a Dropbox, or whatever works.&#x20;

To restore your ESP, you just install docker on your VPS and retrieve the edcom-install directory from your backup; that's it.&#x20;

It's also common for hosting providers to have a native backup solution or snapshot capabilities for a small fee.&#x20;

**What are the maintenance requirements?** &#x20;

This section will be updated soon.


# Recommended VPS

**Many customers have used this Racknerd starter VPS:**&#x20;

Racknerd offers a VPS option pre-configured to run our software for $35 per year. There's also a GDPR region option in Strasbourg, France.&#x20;

{% embed url="<https://my.racknerd.com/cart.php?a=add&pid=787>" %}

**Can someone install this for me?**

We offer professional services.

**What are the hardware requirements?**

For best performance, we recommend a dedicated VPS with 2 CPUs/4GB RAM/NVMe disk.

Choose a geographically close data center location for the fastest UI speed.&#x20;

Customers are always surprised by how fast the UI is; a low-latency connection can be as responsive as a desktop application.&#x20;

Each individual's requirements will depend on the size of the contact list, the number of records sent per day, the number of resource-intensive tasks you have running, and how quickly you want them completed.&#x20;

**How much would it cost to scale hardware up to the highest sending volumes?**

This 32 CPU 128 RAM 1TB NVMe server from Hivelocity is $200/mo.&#x20;

Sending 1 million contacts in a campaign from this server shows 10% utilization in the Glances tool on Ubuntu Linux.&#x20;

Always make sure you **upgrade to NVMe from SSD** on **any** server running our software, it's a $19 upgrade on this server.&#x20;

{% embed url="<https://store.hivelocity.net/product/633/customize/>" %}

Similar high-end servers at similar pricing can also be found at InterServer:

{% embed url="<https://www.interserver.net/dedicated/24-core-dedicated-servers.html>" %}


# Velocity MTA FAQ

**Is Velocity MTA free?**

Yes, it comes included with the EmailDelivery.com platform at no additional cost.&#x20;

**How does the MTA license work?**

Velocity MTA is licensed separately from the ESP platform, and you can install Velocity MTA on unlimited servers with unlimited IP addresses.&#x20;

You can run Velocity MTA on remote servers or on the same server as the ESP platform.&#x20;

All of the Velocity MTA installations can point back to the same single ESP platform installation for unified management and reporting.&#x20;

**What is an MTA?**&#x20;

MTA is an acronym that stands for Message Transfer Agent or Mail Transfer Agent.&#x20;

Ultimately, MTAs undergird all of the email delivery happening across the entire internet every day.&#x20;

No matter which ESP you're using, the final step in the email delivery process happens when an MTA connects out from an ESP to the mailbox provider your message is being delivered to at Gmail, Yahoo, Outlook, iCloud, or anywhere else a contact has an email address.  &#x20;

An MTA is simply a software package that conforms to the [SMTP standard](https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol) and can deliver email through any IP address on the server it's installed on without any third-party dependencies.&#x20;

MTAs handle email delivery autonomously and don't use external services like an ESP, API, or SMTP Relay, in fact, the reverse is true: ESPs, APIs, and SMTP Relays need an MTA.

The "gold standard" commercial MTA for ESPs and high-volume senders has long been PowerMTA, with some well-known competitors being MailerQ and Green Arrow, all three of which are priced to extract tens of thousands of dollars from their customers.&#x20;

**What is Velocity MTA?**&#x20;

Velocity MTA is a PowerMTA alternative that comes integrated with the ESP platform for end-to-end interoperability at every level.&#x20;

Velocity MTA enables you to purchase inexpensive IP addresses from your preferred hosting provider and to use them exactly like a dedicated IP from an email service provider that was charging you exorbitant monthly fees.&#x20;

**Is SMTP Relay in the ESP platform handled by Velocity MTA?**

All of the SMTP Relay implementations in the ESP platform work independently of Velocity MTA, and unless you explicitly install it, Velocity MTA is not even running.&#x20;

Velocity MTA is integrated with the ESP platform through a special connection, does not accept SMTP Relay connections directly, and must be connected to a Customer Account using a Postal Route to be used for SMTP Relay just like any other Connection Type such as Amazon SES, SparkPost, or Mailgun.&#x20;

**Can I pay someone to install and configure Velocity MTA for me?**&#x20;

We provide extensive documentation on every aspect of Velocity MTA installation, configuration, and reporting. Most people with a reasonably technical background should be able to follow them.&#x20;

We also offer professional services.

**What are the benefits of using Velocity MTA?**

Eliminate monthly IP leasing and plan costs from an ESP where you're paying for every message sent, every contact stored, and for access to 'special' features with additional sales pressure on upsells, consulting, monitoring, AI, and various other snake oil.&#x20;

Sending from your own IP addresses is like sending for free.&#x20;

The only "fingerprint" is you, your sender reputation isn't dragged down by your ESP and questionable customers that have snuck onto their network over time. If you're a good sender, it's even arguable that an ESP's established reputation can only hurt you.&#x20;

When you run the MTA, you're the one in control:&#x20;

Use 1 IP or 10 IPs, use 1 domain or 10 domains, stick with a preferred provider for all of your IP addresses, or purchase 1 IP at a time from 10 different networks and spread your infrastructure out, all of these choices are yours alone as the sole postmaster and administrator.&#x20;

You can assign different IPs for transactional, marketing, and real-time triggered automation mail, and use custom warmup schedules, caps, and throttles on a per-ip basis.&#x20;

And, of course, with EmailDelivery.com, you can also become the vendor, which means you can be the one who leases dedicated IPs to your own customers and clients and charges them for every message sent and every contact stored.&#x20;

**How does using the MTA with my own IP addresses differ from sending through an ESP?**

ESPs start you out on a shared IP pool that has had thousands of people sending on it for years,  they've already established a sender reputation with mailbox providers like Gmail, Yahoo, Outlook, and iCloud.&#x20;

The ESP has staff that does *some* level of quality enforcement on the mail being sent by their customers to try and maintain that sending reputation, although the effort put into this varies greatly between ESPs and even between different IP pools at the same ESP. &#x20;

As a new sender at an ESP, you inherit the benefits of their sender reputation: your email will be accepted by the mailbox providers, delivered quickly, and go to the inbox more often than the spam folder.

This is an initial benefit of hiding in the herd. You're a drop in the ocean of thousands or tens of thousands of other senders, and unless you do something especially egregious, the mailbox providers are going to let your messages sail through and pay you no mind.&#x20;

However, this carefully maintained balance can be disrupted if an individual sender grows too large, with their sender reputation having an outsized influence on the combined reputation of the herd, stamping the entire IP pool with their fingerprint.&#x20;

This is one reason why it's common for senders who exceed a certain sending volume at an ESP to be moved to dedicated IPs. This threshold can be as low as 25,000 messages per month on some ESPs, or as high as 300,000 per month on others. Most are somewhere in the middle.&#x20;

The ESP doesn't want the reputation of one large sender to overpower the rest of the senders because if that lone sender screws up, and no one is minding the store, they can take the entire IP pool down and the rest of the senders down with them.

The reverse is also true:

The largest sender can have their sender reputation harmed by the bad senders in the herd and random spammers signing up to every ESP daily with fake blogs and products that don't exist.

Moving someone to a dedicated IP is also where sales can get involved to push people into contracts, volume commitments to lower their CPM, and upsells for dedicated deliverability specialists with dubious promises, jargon, and mumbo jumbo.  All the stuff our self-hosted platform was created to help you avoid.

Once an ESP moves you over to dedicated IPs, this is pretty similar to using your own IP addresses with Velocity MTA.&#x20;

You may or may not receive some extra reputational benefit from a dedicated IP at an ESP if the ESP continues to use their established domain(s) for the return-path and DKIM double signs your mail, but any potential benefit here will wear off as sending volume increases.&#x20;

**Where can I get my own IP addresses to use with Velocity MTA?**

Many large hosting companies such as Digital Ocean and Vultr do not allow their IP addresses to be used for email marketing. You can host the ESP platform there, but you need to put the MTA on an external hosting provider who allows email marketing from their IP addresses.

Default blocking of outgoing port 25 is not uncommon, depending on the policies of any given hosting provider. You may be able to request port 25 access by opening a support ticket, potentially with justification of who you are, how you will use it, and how you'll prevent abuse.&#x20;

Hosting providers popular with our customers who are using Velocity MTA:

Racknerd - $15/year per IP address\
Contabo - $2/mo per IP address\
Namecheap - $4/mo per IP address\
OVH\
Hetzner - $2/mo per IP address\
Amazon Lightsail\
Oracle Cloud\
Servermania

**How do I guarantee I get a clean IP? What about blacklists?**&#x20;

If you're buying inexpensive IP addresses off the shelf from VPS providers, more likely than not you'll be on a couple of inconsequential blacklists no matter who your host is.&#x20;

Even major hosting providers like Digital Ocean who block port 25 and disallow all email from their network have most of their IP ranges listed by the same blacklists as hosting providers who freely allow email marketing without any due diligence applied to their customers in this regard. &#x20;

If you pay real money for a block of portable IP addresses and become the owner of that network, such as a /24 that you're going to have routed on your behalf at a datacenter, you should of course expect those IPs to be completely clean with no blacklists, prior history of abuse, or email marketing sending history.

However, at a VPS hosting company with thousands of no-strings-attached customers who come and go daily where you're paying $1 or $2 for an IP address, you're going to have to set your expectations appropriately.&#x20;

You're getting an IP randomly assigned out of a giant pool and the hosting provider doesn't necessarily keep an inventory of who had what IP and what they were doing with it, and in all reality probably doesn't even have a way to know that to begin with.

Hosting providers that freely allow email marketing can attract bad senders, so their pool of IP addresses will be a mix of pristine IPs with no prior sending history at all, and IPs that have been stepped on by Godzilla, King Kong, Hydra, Mothra, and Cthulhu in rotation and all at the same time during a house fire stampede on Thanksgiving caused by deep frying a turkey the size of the Chrysler Building.&#x20;

For this reason, Racknerd allows you to swap out a bad IP for free within 72 hours if you got one splattered with turkey grease:&#x20;

{% embed url="<https://my.racknerd.com/index.php?rp=/knowledgebase/18/Can-I-request-IP-replacement.html>" %}

**Increasing your odds of winning the IP lotto 🎲**

If you can form a trusted relationship with a hosting provider who is closer to a Digital Ocean type of company that is willing to work with professionals, and doesn't just allow anyone and everyone to email from their network, you'll get far more consistent results than with a cowboy provider who operates fast and lose and doesn't really care what anyone is doing as long as they're not attracting attention and high profile blacklisting.

There are off the beaten path and under the radar hosting providers that allow email marketing from their network who have near perfect chain of custody on all of their IP addresses, their IPs are directly owned by them or their parent company, and have never had their network abused by legions of organized professional spammers.&#x20;

These providers have a high likelihood of assigning you an IP with no prior sending history the first time.&#x20;

However, you have to find them yourself via trial and error, and when you find them, don't share them with others, this is how they stay that way.&#x20;

**How do I know if a blacklist is 'inconsequential'? How do I determine if my IP is 'bad' or 'good' ?**

Inconsequential blacklists are those that seem to list almost every IP they can find on the entire commercial internet.&#x20;

They look up every IP owned by every hosting provider, reseller, and datacenter and just block everyone and everything accumulating millions of IPs in their blocklist.&#x20;

In general, if a blacklist isn't being used by the most important mailbox providers like Google, Yahoo, Microsoft, Apple, broadband providers like Comcast and AT\&T and whatever the domains are that comprise over 80% of your contact list, you gotta just not care about that blacklist if you're paying $2 for an IP address.&#x20;

Sometimes email marketers can become preoccupied by delivery perfection and obsessively monitor and litigate every nickel and dime blacklisting that will never earn them a nickel or a dime even if it were removed anyway.&#x20;

Our advice: don't make perfect the enemy of the good.&#x20;

If there are no issues with your technical setup, and you're sending from a domain either without prior sending history, or with an established positive sending reputation, and you're sending on an IP without any prior sending history, your messages should start out in the Gmail inbox even if you're on 5 blacklists that list 20 million IPs each.&#x20;

If you get one of these dreaded messages, and there are no other obvious potential explanations, most likely it's either caused by your IP address or your domain already having established a negative reputation with Gmail directly, and not because of any other unrelated blacklisting by Tinpot Terry's IPs of Terror:

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FiqbiNtm5tMQnUwBcrgDs%2Fimage.png?alt=media&amp;token=819789be-43b1-4bbd-a1eb-62e3ecf2f147" alt=""><figcaption></figcaption></figure>

**What's an IP warmup schedule like?**

If you research IP warmup schedules, most of the "advice" is from outer space. 🛸

You'll notice these warmup pages and PDFs are commonly 10 years old or more and tell you that you'll be sending millions of messages in two weeks.&#x20;

Think about how much has changed everywhere else in the last 10 years, how is it possible these documents could still be valid?&#x20;

The next thing you'll notice about public IP warmup strategies is that when they deviate from a sketchy spreadsheet someone spitballed 12 years ago, the guides and recommendations are intentionally vague.&#x20;

More often than not, they say almost nothing.&#x20;

The reason why IP warmup guides are vague is because ESPs feel pressure from customers to make IP warmups happen as quickly as possible, but no one actually knows what 'as quickly as possible' is.&#x20;

The reputation systems at mailbox providers like Gmail, Yahoo, Outlook, and iCloud are opaque, black boxes relying on a combination of manual tuning, machine learning, and third-party software and data from anti-spam security vendors. Even the engineers responsible for maintaining these systems may not fully understand the results they produce.&#x20;

Because of the dual pressures of having only a vague understanding of how these systems work and customer impatience, deliverability experts are mostly making it up as they go along: arbitrary judgment calls, doing more art than science, crossing their fingers, and generally relying on the world's most dangerous words: "in my experience...". 🤞

{% hint style="warning" %}
Realistic advice from Microsoft is that you should set your expectations for a six-week warmup schedule to start establishing a positive sender reputation.&#x20;
{% endhint %}

{% hint style="danger" %}
This advice from Google is a **warning**, they will block your mail if you're a new sender who sends too much, too fast:&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FJhqJuI8QWzN2OmCWeJdc%2FScreenshot%202024-01-05%20at%203.39.50%E2%80%AFPM.png?alt=media&amp;token=817e7e0b-c489-47c6-9bba-490c23ca3695" alt=""><figcaption></figcaption></figure>

As Gmail is the primary domain of concern for email marketers, we'll use it for our example below and throughout the rest of this document.&#x20;

An IP warmup works like compound interest:&#x20;

You start out on day 1 sending a number of messages so small it seems both pointless and hopeless, a mere 54 days later, you'll be sending 300,000 messages per day.&#x20;

A safe, reliable, and realistic warmup schedule is to start by sending a small number of emails on day one to only yourself, colleagues, friends, and family, somewhere between 5 and 20 messages to Gmail.&#x20;

Make sure everyone opens the message.&#x20;

Once you've reached 20 messages total sent in one day, the next day start increasing the number of messages sent by 20% per day.&#x20;

Following a schedule of modest 20% daily increases, you'll see the magic of compounding in action:

<table><thead><tr><th>Day 1</th><th width="105">Day 7</th><th>Day 14</th><th>Day 30</th><th>Day 45</th><th>Day 54</th></tr></thead><tbody><tr><td>20 </td><td>66 </td><td>194</td><td>4,180</td><td>64,600 </td><td>300,000+</td></tr></tbody></table>

Sending over 300,000 messages per day for free - by starting at only 20 messages just last month!

{% hint style="success" %}
With Velocity MTA you can create an [automated warmup schedule](/docs/velocity-mta-basics/ip-warmup-automation) that will enforce these daily limit increases, so you can't accidentally overshoot and blow up all your progress halfway through.
{% endhint %}

During a warmup, start by sending to only your most engaged contacts, only adding less engaged contacts when it becomes necessary to pad your sending volume so it still continues to grow every day.&#x20;

Same-day responders, automated real-time triggers, and transactional email are best for getting started.&#x20;

Gradually add contacts over time based on how recently they've opened or clicked a message: 0 days, 3 days, 7 days, 10 days, 14 days, 21 days, 30 days. &#x20;

It might look something like this:&#x20;

* [ ] Day 1
  * [ ] &#x20;Yourself, colleagues, friends, family.&#x20;
* [ ] Day 2-4
  * [ ] Same day openers and clickers.
* [ ] Day 5-7
  * [ ] Openers and clickers from the last 3 days.
* [ ] Day 7-10
  * [ ] Openers and clickers from the last 7 days.
* [ ] Day 10-15
  * [ ] Openers and clickers from the last 10 days.
* [ ] Day 15-21
  * [ ] Openers and clickers from the last 14 days.
* [ ] Day 21-30
  * [ ] Openers and clickers from the last 21 days.
* [ ] Day 30+
  * [ ] Openers and clickers from the last 30 days, 6 weeks, 60 days, 90 days.

{% hint style="info" %}
Always pull openers *OR* clickers instead of *only* openers, 15%-20% of your clickers won't be in your openers segment because they didn't trigger an open pixel when they clicked.&#x20;
{% endhint %}

That's really all there is to it. You're a deliverability expert now. Welcome to being a brain genius 🧠 💡.&#x20;

The secret ingredient isn't technical ability or esoteric knowledge but actually just consistency and patience.&#x20;

**What are the pitfalls, caveats, and challenges to using an MTA?**&#x20;

You have to send wanted email.&#x20;

You can't warm up an IP address sending cold email or dormant data, there's no herd to hide in, it's just you.&#x20;

Gmail, Yahoo, and other major mailbox providers are processing billions of messages per day and have been doing so for many years, they scan each message for known patterns associated with unwanted mail, and it's all augmented by machine learning.&#x20;

To put it into perspective, see this quote from Google's recent announcement on enhanced Gmail protections:

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FlhdTE3oNxzES1ooTpJDF%2Fimage.png?alt=media&amp;token=72c8e537-a556-4722-925a-a344df538742" alt=""><figcaption></figcaption></figure>

It's like that old canard about the court ruling on obscenity: they know unwanted mail when they see it.&#x20;

And as your sending volume increases, more scrutiny is applied.&#x20;

In an unprecedented move, [Gmail](https://blog.google/products/gmail/gmail-security-authentication-spam-protection/) and [Yahoo](https://blog.postmaster.yahooinc.com/post/730172167494483968/more-secure-less-spam) jointly acknowledged this when they announced starting Feb 1, 2024, they were making public their policies for applying additional requirements on bulk senders for the first time.

Gmail has set the threshold for being identified as a bulk sender at sending 5000 messages in one day.&#x20;

**How is a positive sender reputation established?**&#x20;

{% hint style="success" %}
Your complaint rate is 0.3% or less:&#x20;
{% endhint %}

This means 3 out of 1000 people click the spam button.&#x20;

{% hint style="success" %}
You have a reasonable open rate:
{% endhint %}

No one knows exactly what the right number is and it may be different for each sender. You'll hear estimates like 5%, 8% 11% or 20%.&#x20;

The important thing is just that the mailbox provider is seeing evidence that some of the people want to read this mail some of the time, and that when they open the message, they aren't getting mad at it.&#x20;

{% hint style="warning" %}
If your complaint rate increases with your open rate, the complaint rate will cancel out any positive impact from more engagement.&#x20;
{% endhint %}

For your own well-being ignore the debate, noise, and FUD about the validity of open rates you may be seeing online right now. This is fueled by a mix of the effects of Apple Mail Privacy Protection,  widespread bot problems, plus the usual conspiracy theories, speculation, personal anecdotes, rumors, and misinformation.&#x20;

{% hint style="success" %}
Your sending volume increases slowly over time at a consistent rate:
{% endhint %}

See the warmup section above on this topic.&#x20;

{% hint style="success" %}
You have a low bounce rate:
{% endhint %}

If you use a bounce cleaning service that actually works, like [email oversight](https://emailoversight.com/), your bounce rate on Gmail and other major domains should start around 1%.&#x20;

If you're using emaildelivery.com to send your email marketing campaigns, your bounce rate on major domains should stay well under 1% if you send every day.&#x20;

When you see high bounce rates on your list, that's usually going to be an aggregate number caused by lots of small domains with hygiene issues, delivery problems, and user churn.&#x20;

Large mailbox providers like Gmail Yahoo and iCloud shouldn't have accounts regularly expiring en masse.&#x20;

{% hint style="success" %}
Use the list-unsubscribe header and honor unsubscribes after one click:
{% endhint %}

Don't send even 1 additional message after someone has opted out.&#x20;

Don't send an automated 'you have been unsubscribed' email after someone has unsubscribed.&#x20;

{% hint style="success" %}
Deliver your messages to contacts prioritized in order by who opened and clicked most recently:
{% endhint %}

EmailDelivery.com does this by default, unless you disable it.  &#x20;

{% hint style="info" %}
Create segments and systems for contacts who haven't responded in the last 90 days to move them onto their own separate low-engagement infrastructure:&#x20;
{% endhint %}

Details here are beyond the scope of this document.&#x20;

{% hint style="success" %}
Click 'Show original' on Gmail and 'View raw message' on Yahoo and verify your DKIM, SPF, and DKIM are all marked as 'pass'. &#x20;
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F1fajbJmcpcrZ3Qe54sOR%2FScreenshot%202024-01-07%20at%2012.08.05%E2%80%AFPM.png?alt=media&amp;token=3c9826cc-bc7e-461e-b989-fe2fcf2764e0" alt="" width="340"><figcaption></figcaption></figure></div>

**How do I get insight into my sending reputation?**&#x20;

Most of the advice you see about this topic is silly and useless, such as checking your senderscore, using Talos, and websites that create an arbitrary scoring system for your messages based on spam assassin.&#x20;

It's vital to sign up for [Google Postmaster Tools](https://www.gmail.com/postmaster/), make this the first thing you do.&#x20;

{% hint style="info" %}
Use Google Postmaster Tools as a proxy for how your mail is being scored more generally across all mailbox providers.&#x20;
{% endhint %}

Google Postmaster Tools will simply tell you exactly how Gmail views your sender reputation with reports like these:

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F95RbEZp4LvA6Pie98lxR%2FScreenshot%202024-01-03%20at%206.11.31%E2%80%AFPM.png?alt=media&amp;token=8054e0e6-3406-4b8e-96b6-e4dbcd37a5e3" alt=""><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FShV304xo36In2OqL8M9C%2FScreenshot%202024-01-04%20at%208.59.48%E2%80%AFAM.png?alt=media&amp;token=56cd637b-036b-43af-a622-6893a0294d75" alt="" width="563"><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F99jEU1GesswbUV2tuwXC%2FScreenshot%202024-01-04%20at%208.58.28%E2%80%AFAM.png?alt=media&amp;token=b27f8f5f-57e1-4073-9651-2f480ebcb224" alt="" width="563"><figcaption></figcaption></figure></div>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fxg5afVMoLcdxB8BBh8Ig%2FScreenshot%202024-01-03%20at%206.12.48%E2%80%AFPM.png?alt=media&amp;token=7a6c3d60-2152-4528-a5ff-d32954ee6ceb" alt=""><figcaption></figcaption></figure>

{% hint style="danger" %}
**Be on the lookout for soft bounce error messages from Gmail such as "Our system has detected this message is likely suspicious...."**
{% endhint %}

When you see "*<mark style="background-color:yellow;">Our system has detected...</mark>*" from Gmail, you're in trouble.&#x20;

This means your reputation is in the gutter and unless you pause sending or dial the volume down, it will quickly escalate into a permanent block.&#x20;

Unfortunately, the specifics of these messages are not accurate or reliable. They may tell you that your domain is suspicious, but if you move the same domain to a new IP pool, your reputation will seem to be instantly restored, and everything will run smoothly and without error.&#x20;

Like most things related to email delivery and deliverability, you'll need to experiment and do some research on resolving this issue as there is no single piece of advice that can be given on how to handle it other than "stop doing what you're doing right now".&#x20;

**If I'm doing everything right and not seeing the results I think I should, what can I do?**&#x20;

Most large mailbox providers provide a method for bulk senders to apply to have their sending issues remediated.&#x20;

When you pay a consultant for deliverability help, after they tell you the same thing you've read on the web hundreds of times in your life, they usually just go to these pages and request a pardon or at least a commutation.&#x20;

Google's [sender escalation form](https://support.google.com/mail/contact/gmail_bulk_sender_escalation?visit_id=638145591553162105-3547211821\&rd=1).

Yahoo's [sender support request form](https://senders.yahooinc.com/contact/#sender-support-request).&#x20;

Microsoft [OLC support form](https://olcsupport.office.com/) for outlook.com/hotmail.com/msn.com/live.com.&#x20;

You can also look into [sender certification ](https://www.validity.com/everest/sender-certification/)through Validity and see if it may be right for you.

**How do the upcoming changes at Google and Yahoo affect me and my IPs?**&#x20;

Although there definitely have been some important technical and implementation changes related to the joint [announcement by Google](https://blog.google/products/gmail/gmail-security-authentication-spam-protection/) and [Yahoo](https://blog.postmaster.yahooinc.com/post/730172167494483968/more-secure-less-spam), any negative impact by the new guidelines would mostly affect senders who would have never gotten traction using dedicated IP addresses in the first place.

See more here:

{% embed url="<https://support.google.com/mail/answer/81126#zippy=%2Crequirements-for-all-senders>" %}

In our view, this has actually been a very positive change.&#x20;

Gmail and Yahoo have always adopted a 'security through obscurity' model, maintaining a cloak of secrecy with any advice given on improving deliverability being deliberately vague and ambiguous out of fear of helping the spammers.&#x20;

They didn't wave the white flag on this, but they at least waved a small napkin, admitting the spam problem continues to get worse and being uncooperative with good senders hasn't produced any positive benefits for either side.&#x20;

Bookmark the [Yahoo sender hub](https://senders.yahooinc.com/best-practices/) and [Gmail bulk sender guidelines](https://support.google.com/mail/topic/7279058?hl=en\&ref_topic=3394151\&sjid=15963109417641821830-NC) and check them for updates a couple of times a month.&#x20;

For instance, Gmail just added that TLS  is now a sender *requirement* only a few weeks ago.&#x20;

**Does Velocity MTA do IP rotation?**

Yes.

We get this question a lot and sometimes the thinking behind it can be a bit misguided.&#x20;

Unless you are a sophisticated sender with a proven strategy,  or your domain(s) has a good reputation with an established history of high-volume email delivery, just adding more IP addresses to the same domain and rotating IPs is more likely to get you blocked than increase your sending volume in 2024. &#x20;

If you add 3 new IPs to a new domain and try to do a warmup 3 times faster you'll start seeing responses from Gmail like these after about 1000 messages:&#x20;

"*Our system has detected this message is likely suspicious...."*

**How do I resell my Velocity MTA IP addresses to my customers?**&#x20;

The best way to use Velocity MTA to earn money from your customers is by selling them their own dedicated IPs.&#x20;

ConvertKit charges $250/mo for a dedicated IP by reselling a SendGrid IP address that ConvertKit pays $30/mo for at $220 profit.&#x20;

And that's before any charges for the ConvertKit plan the customer is on.&#x20;

Pro Tip: You could do that too by using SendGrid with your EmailDelivery.com ESP platform, in addition to Velocity MTA.  &#x20;

Charging $50-$150 per month just for a dedicated IP before additional costs is not uncommon at many ESPs.&#x20;

If you pay $15/year for a clean IP address from Racknerd, and charge your customer $100/mo just for the IP before any charges for sending volume and contact list storage, that's already $1185 profit.

Earning $2500/year from a $15/year IP address is not at all unrealistic with the right customer; as always, this is going to come down to your customer acquisition and sales abilities.&#x20;

<mark style="background-color:yellow;">You do not want to resell a shared IP pool or IP addresses you are using for internal email with Velocity MTA unless you really know what you're doing, and even then, you probably still don't.</mark>&#x20;

Even for the most experienced postmasters, running a shared IP pool successfully is very challenging and fraught with danger, peril, and hazards.&#x20;

Some of the most successful ESPs with the biggest budgets and expert staff such as Brevo and Maropost can have shared IP pools with poor delivery.

Here's what [emailtooltester](https://www.emailtooltester.com/en/reviews/brevo/) had to say about the state of Brevo's email deliverability in 2023:

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FkLbh1OPqVnrRfduJ73HX%2FScreenshot%202024-01-07%20at%202.27.38%E2%80%AFPM.png?alt=media&amp;token=7bd7295b-c0fc-46e8-8fc8-4661f4a8ffee" alt="" width="563"><figcaption></figcaption></figure></div>

The point here is not to single out Brevo.&#x20;

Trying to control what other senders are doing and keep them from destroying your sender reputation is like herding cats, times a billion, times infinity. Even if you have so much money you're always the top result in Google Ads for email marketing related search terms every day in every major city around the world like Brevo.&#x20;

Our advice:&#x20;

Stick to low-hanging fruit and keep your senders isolated from one another and from you, unless you're outsourcing shared IP pool delivery to the professionals somewhere like Amazon SES or SparkPost. FYI: Your EmailDelivery.com ESP platform supports that too!

**What is the downside to using an MTA? Why wouldn't everyone do this?**

Usually, the first deterrents are the cost and complexity of the technical implementation.&#x20;

PowerMTA has a 500 page manual, and that's before you've even started contemplating how to integrate it with ESP software so you can actually use it.&#x20;

We've greatly reduced the complexity of running an MTA down to just a couple of settings and pages in the UI, with sane defaults that will cover most use cases.&#x20;

Another deterrent is the off-the-shelf options for email marketing software that can be integrated with an MTA have long been underwhelming, causing many people to attempt to roll their own, which can easily spiral out into a lengthy and expensive boondoggle on its own.&#x20;

Lastly, just like a dedicated IP at an ESP, when you're using your own MTA you're the only one responsible for your sending reputation, you need to build it up from scratch, and the benefits of being on a shared IP pool at an ESP with years of sending history on their IPs and domains are lost.&#x20;

Sending through your own IP addresses with an MTA requires patience and discipline, you need to do a long and slow warmup and carefully establish a positive sender reputation over time with the mailbox providers such as Gmail, Yahoo, Outlook, and iCloud.&#x20;

**Who is Velocity MTA for? How do I know if I should use this?**

You send significant enough volume that an ESP would push you onto dedicated IP addresses.

You have a pristine sender reputation and want to isolate it from the influence of any other senders.&#x20;

You want privacy, control, and to own your tech and keep it in-house or even on-premises.&#x20;

Also, if you're just a geek and like to tinker with stuff and see it work, that's also a totally valid reason.&#x20;


# Amazon SES production access

{% hint style="success" %}
**Amazon SES has the best pricing of any delivery service that allows email marketing.**

Amazon SES is 10 cents per 1000 messages sent, pay-as-you-go, with no minimums or commitments; that's $100 per million messages, only pay for what you send.
{% endhint %}

{% hint style="warning" %}
This bargain basement discount pricing comes with a higher barrier to entry than with other email delivery API or SMTP Relay services which charge more.&#x20;
{% endhint %}

Unlike other vendors, you can't just sign up and start sending.&#x20;

First, you have to [create an account](/docs/introduction/connect-amazon-ses-api) and complete your integration by verifying a domain and connecting it to your [EmailDelivery.com](https://emaildelivery.com) ESP platform; then you're placed into "the sandbox."&#x20;

{% hint style="info" %}
You can only send mail to email addresses that you own while in the Amazon SES sandbox.&#x20;
{% endhint %}

To test your Amazon SES integration while in the sandbox, you have to add and verify each of your personal email addresses one at a time, and that becomes your contact list.

To get out of the sandbox and send mail to your real contact list, you need [to request production access](https://docs.aws.amazon.com/ses/latest/dg/request-production-access.html).&#x20;

{% hint style="warning" %}
You must have a verified domain and have completed and tested your SES integration with your [EmailDelivery.com](https://emaildelivery.com) ESP platform before you request production access.&#x20;
{% endhint %}

If approved to get out of the sandbox, your sending limit will start out at 50,000 messages per day, and you can have the cap lifted once you've established yourself as a reasonable sender.

Amazon will initially throttle your production sending to 14 messages per second, which will automatically increase over time.&#x20;

We have customers who Amazon allows to send hundreds of messages per second.&#x20;

{% hint style="info" %}
**Getting approved for Amazon SES production access**
{% endhint %}

The first thing that Amazon SES is screening for is that many applicants who apply for new email marketing accounts are liars.&#x20;

Fake sites, fake blogs, fake products, fake companies.

{% hint style="info" %}
**Example:** When Mailchimp made drastic changes to Mandril and rolled it into their main product, they said they were canceling 2000 Mandril accounts per day for spam.
{% endhint %}

When the Trust & Safety team evaluates your site and your production access application, this is what they're looking at:

* Does this site, service, or product seem real, professional, and reputable?
* Is there a footer on the site with a privacy policy?&#x20;
* Would this site, service, or product need Amazon SES? Is there a plausible legitimate use case here?
* How will this applicant build their contact list and where did their existing contacts come from?
* If all of the above adds up, will this entity be sending emails that people want to read and that don't upset the reader?&#x20;

{% hint style="info" %}
**Important**\
Make sure your site has the expected footer with a privacy policy.&#x20;
{% endhint %}

{% hint style="info" %}
**Important**\
Only make your application for one site, one brand. Your application must be crystal clear and super easy to understand at a glance for the busy Amazon reviewer.&#x20;
{% endhint %}

{% hint style="info" %}
**Do not apply for multiple websites/brands or mention other customers and clients.** \
Since Amazon only has the ability to vet your site, product, brand, or service, and no ability to vet your current or future customers or clients, this will cause a denial. \
As a general rule if your production access application states you intend to act as an agency for managing the mailing lists of others, you will be denied.&#x20;
{% endhint %}

{% hint style="info" %}
**If you are a responsible sender, you will have no problem adding additional domains to your Amazon SES account once you've been approved.** \
However, during the production access approval process, any ambiguity will cause a denial.&#x20;
{% endhint %}

{% hint style="warning" %}
**This is an example of the type of content Amazon SES isn't going to approve:**&#x20;

We had a customer who ticked every box, but the front page of their website was covered in articles about burning in hell, causing their application and all appeals to be denied.&#x20;
{% endhint %}

And finally:

* Is this otherwise legitimate applicant a competent sender? What are their hygiene practices?&#x20;
* How will they manage bounces, unsubs, and complaints, ensuring they will help maintain or improve Amazon's sender reputation instead of harm it?&#x20;

I've spoken to Amazon about what the trust and safety team wants to see to be reassured a sender knows what they're doing, and isn't going to wildly spam and blow their account up out of negligence.&#x20;

Here's their answer...

{% hint style="success" %}
**Include technical details.**
{% endhint %}

{% hint style="info" %}
Explain how you plan to use Amazon SES to send email:
{% endhint %}

Through an integration with the [EmailDelivery.com](https://emaildelivery.com) ESP platform.  ✅

{% hint style="info" %}
How can recipients opt out of receiving emails from you?
{% endhint %}

[EmailDelivery.com](https://emaildelivery.com) has a one-click unsubscribe in the footer and a one-click list-unsubscribe header is attached as a backup in case the integrated email delivery service doesn't include its own  ✅

{% hint style="info" %}
How do you plan to handle bounces and complaints?
{% endhint %}

The [EmailDelivery.com](https://emaildelivery.com) ESP platform integration uses Amazon SNS and event publishing.  ✅

Real-time reputation metrics are shown prominently in the [EmailDelivery.com](https://emaildelivery.com) platform UI reporting as webhooks come back in live from Amazon.  ✅

Bounces, unsubs, and complaints are suppressed account-wide automatically the first time they're seen.  ✅

We will also be using the [reputation metrics dashboard](https://docs.aws.amazon.com/ses/latest/dg/reputation-dashboard-dg.html) in the Amazon SES console as a sanity check and backup to monitor our bounce and complaint rates and verify the information we're seeing in the [EmailDelivery.com](https://emaildelivery.com) platform is accurate on an ongoing basis.  ✅

{% hint style="info" %}
Amazon recommends you familiarize yourself with these links in order to speak the same language as the Amazon SES trust and safety team.
{% endhint %}

{% embed url="<https://docs.aws.amazon.com/ses/latest/dg/reputation-dashboard-dg.html>" %}

{% embed url="<https://repost.aws/knowledge-center/ses-high-bounce-rate>" %}

{% embed url="<https://docs.aws.amazon.com/ses/latest/dg/sending-email-subscription-management.html>" %}

{% hint style="info" %}
**In summation, heed this direct quote from Amazon:**
{% endhint %}

> The idea would be to include as much specific details on the SES features they will be leveraging so that the AWS Trust and Safety Team are assured that they are aware and will implement best practices

{% hint style="info" %}
Softball:    🥎
{% endhint %}

You'll be asked by Amazon SES to non-specifically state your "Use case".&#x20;

Just answer general questions like these as comprehensively as possible:

* What does your site do?
* How do you plan to build or acquire your mailing list?
* What will you use Amazon SES for?

{% hint style="info" %}
**Provide supporting evidence if possible.**\
This has worked for getting rejected applicants approved on appeal:&#x20;
{% endhint %}

If you're switching from another ESP, attach recent invoices proving you're a valid sender with a regular business relationship with another service.&#x20;

Provide links to social media accounts associated with your verified domain that have a following and organic engagement.&#x20;

Attach examples of emails you plan on sending - these better be good and show an unsubscribe footer with a full name and address for the sender and "you have received this email because you...." memo.&#x20;

{% hint style="success" %}
All of this may sound formidable but it's actually **not** hard to get approved.
{% endhint %}

Bottom line:&#x20;

Just don't look like a spammer.  👍  \ <br>


# From the founder

👋  Greetings to all marketers around the world! 🌎 🌍

👨‍💼  This is Ian, the founder of EmailDelivery.com.

✊  We're proud to join forces and empower you to become the postmaster of your own email service provider.

⚡️ Use our included Velocity MTA to send email for free over your own IP addresses, add unlimited 3rd party SMTP Relay or ESP API accounts at major providers such as Mailgun, SparkPost, Amazon SES, SendGrid, Postmark, or SMTP2GO, and load balance your sending across all of them.

🐧  All you need is a dedicated Linux VPS. This is not a SaaS, you are the host of your own software.

🎉  Unlimited brands, domains, contacts, sending volume, and access to all features without unlocks, caps, or upsells. 🚫 🧢

👨‍💻  We developed our "email service provider in a box" concept to address the following common dilemmas for high-volume email senders:

🐌  Email marketing applications that connect to 3rd party ESP APIs and Relays are typically entry-level frontends with restrictions on the number of domains, brands, contact list size, sending volume limits, and often have unsatisfactory performance. Plus all the other caps, feature locks, and upsells.🧢

📈  As your sending volume increases on ESPs 🚀, they will often push you towards dedicated IP addresses and off of the shared IP pool.

🤷‍♂️  Once you're segregated onto your own dedicated IPs, now you're effectively paying a CPM as merely a software fee since you've already become responsible for managing your entire sending reputation yourself.&#x20;

💸  Sending over dedicated IPs you own at a server hosting provider or in your data center instead of the ESP's dedicated IPs requires a $12k-$25k investment in PowerMTA or an equivalent, but an MTA merely acts as another SMTP relay, you still need ESP software. 😤

🥳  EmailDelivery.com solves all of the above. 🍾 🎊


# AppSumo Sumolings (NEW!)

**How does the open source Community Edition affect AppSumo Sumolings?**

All AppSumo license key tiers unlock the Beefree editor in Community Edition. This is a $1,499 value.&#x20;

I will do a free install and basic setup of Community Edition for any frustrated Sumoling, including those who refunded.&#x20;

Reach out at [freeinstall@emaildelivery.com](/docs).  &#x20;

Basic setup should be understood to mean "within reason", as a comprehensive MTA configuration would be unrealistic, for instance.&#x20;


# ESP Features

<table data-header-hidden><thead><tr><th width="89"></th><th></th></tr></thead><tbody><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FNtJeuPllAgyO9jhflW40%2Fimage.png?alt=media&amp;token=ec6073ce-e7f8-4d14-bc57-46060398c186" alt="" data-size="original"></td><td><strong>Exceptional Deliverability</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FpgjQ5JVUqA4zImRmk640%2Fimage.png?alt=media&amp;token=86cca803-a297-492c-a8ca-bd1d5f685d8d" alt="" data-size="original"></td><td><strong>Campaigns, Email Blasts, and Broadcasts</strong> </td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fctx0zwNwqLWPWbXp8Plj%2Fimage.png?alt=media&amp;token=932a153c-f2f6-4444-98eb-468d658dd823" alt="" data-size="original"></td><td><strong>Email Sequences, Autoresponders, Drip Campaigns, and Funnels</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FxpOo2800tKVmxaifqH55%2Fimage.png?alt=media&amp;token=fdd9a56d-0c09-415d-afc7-5c358a1df156" alt="" data-size="original"></td><td><strong>Transactional SMTP Relay and API</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FbHirmvXrHT1gn2OwgCfs%2Fimage.png?alt=media&amp;token=fccbc273-f112-444b-818b-82bf52ac336a" alt="" data-size="original"></td><td><strong>Tags</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FHZlsAAgebuZDJY3AZiP6%2Fimage.png?alt=media&amp;token=f2ea1245-7475-45c5-afe1-00dbd694b5b8" alt="" data-size="original"></td><td><strong>Contacts Lists</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FMBj3DfGQURwpOlfQEbpt%2Fimage.png?alt=media&amp;token=a53b7ed0-1cbc-4bd1-9e0c-31b93463edb6" alt="" data-size="original"></td><td><strong>Segmenting with Advanced Logic and Subgrouping</strong> </td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FBhysAvsPhc7cP3kN1Bap%2Fimage.png?alt=media&amp;token=4437b3c9-11cd-4b4f-b9dc-c621769e9b9a" alt="" data-size="original"></td><td><strong>Personalization on all Properties</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FZ8DH6iY6P6zWagtwbca2%2Fimage.png?alt=media&amp;token=2f082325-b916-4067-af39-3af1fc5e5fc9" alt="" data-size="original"></td><td><strong>Pop-up Forms with Exit Intent Bounce Detection</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F7ILuVE7x91iXpaZNr0g5%2Fimage.png?alt=media&amp;token=9aefd9d7-1824-4b16-9d0a-de5ea8d16fc7" alt="" data-size="original"></td><td><strong>Slideouts, Floating Bar, and Embedded Forms</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fu2GCN51rBM5hjhvjvRf8%2Fimage.png?alt=media&amp;token=a42d5077-2f66-44a1-86b3-44d7de255f53" alt="" data-size="original"></td><td><strong>Drag and Drop, WYSIWYG, and Pixel Perfect HTML Email Designers</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FBO0auUnw18QfoZLywKDe%2Fimage.png?alt=media&amp;token=bca70e16-0ced-49ef-83dc-5ff0e03a5ac5" alt="" data-size="original"></td><td><strong>Pixabay Integration</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FvZeLVvQCsHgxpTuHSV6J%2Fimage.png?alt=media&amp;token=af0850ec-24ed-4b14-b441-0f12ec5f4883" alt="" data-size="original"></td><td><strong>Drag and Drop Form Designer</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fti5UISWUJmkwz2LtiSGQ%2Fimage.png?alt=media&amp;token=41e82068-1838-4998-bf9d-9c6fc14a62df" alt="" data-size="original"></td><td><strong>Automated Resend to Non-Openers</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FMa4gnGNC6qBmUfi38sGE%2Fimage.png?alt=media&amp;token=d00dcf5e-73d3-4e0f-8c48-fe2cdf6469a7" alt="" data-size="original"></td><td><strong>Comprehensive Reporting on Campaigns and Contact Lists</strong> </td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FjNc5pvIWUjQ5i6gO4V6w%2Fimage.png?alt=media&amp;token=51085175-664d-41d2-b35e-93ce1856e1a2" alt="" data-size="original"></td><td><strong>A/B Testing</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fd7BLdRIBFPdd8LkhnCc3%2Fimage.png?alt=media&amp;token=53d7a124-6e9e-42ba-9d34-3a76823bfdc2" alt="" data-size="original"></td><td><strong>Suppression and Exclusion Lists</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FarFS6hi61k31hOetXR59%2Fimage.png?alt=media&amp;token=6494c629-0920-42f0-9c0a-b7981e43b903" alt="" data-size="original"></td><td><strong>Throttle Sending by Minute/Hour/Day</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FkQxFg4YIXNB35lvXtHZY%2Fimage.png?alt=media&amp;token=573a5eae-40c5-49db-a31a-3e0c52986149" alt="" data-size="original"></td><td><strong>Event Webhooks</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FCJiubH0bNbfb7dzFY8lT%2Fimage.png?alt=media&amp;token=003c6c37-86f9-4b0b-b8e7-965b2e539d04" alt="" data-size="original"></td><td><strong>Powerful API</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FKf5lpH3hELr88Q4Sp4Rm%2Fcheck-icon.png?alt=media&amp;token=7272c8a4-4822-42e6-9a0b-5d10e458418a" alt=""></td><td><strong>Pabbly Integration</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FzbweMNudivbse1nATsfK%2Fimage.png?alt=media&amp;token=438a85a1-0aa9-455a-b76e-a89012c4379a" alt="" data-size="original"></td><td><strong>Zapier Integration</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FoSmFqsuNr1bQNtKxuEoA%2Fimage.png?alt=media&amp;token=866af6c6-2eb6-4962-ad1f-4d4ee4d03790" alt="" data-size="original"></td><td><strong>WordPress Integrations</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FPWlfu19ZJ2MCFwiSyeyQ%2Fimage.png?alt=media&amp;token=66dd69b5-17cc-444f-ae98-4579930ad4ff" alt="" data-size="original"></td><td><strong>Unlimited Domains, ESPs, and MTAs per Customer Account</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FOkkSjndmTdzM6oieIwnn%2Fimage.png?alt=media&amp;token=47a6b86d-363a-45a1-ba50-18104364790b" alt="" data-size="original"></td><td><strong>24x7 Support</strong></td></tr></tbody></table>


# Pabbly Connect

{% hint style="success" %}
**Connect Pabbly to your email marketing platform using our private white-label integration**&#x20;
{% endhint %}

{% embed url="<https://connect.pabbly.com/share-app/CUFVZ1UCAmFUHlU_D2pQdw4aUlZTCghsUksBE1JdBX1SHwZDBEVaMApGVXdWFQloUxoDaVIOAzgNGQIGUAYBcgEYByhTTFYLVmVUEVQLXXcJa1UiVR4COFQFVWYPR1BqDjdSdVMeCFVSXAE8UkkFQ1ILBn0ESVpECkpVPVYZCSNTNANqUgsDIw00>" %}

{% hint style="info" %}
**Pabbly event triggers**
{% endhint %}

**New form submission**\
Triggers when a contact subscribes through a popup, slideout, hellobar, embedded, or 3rd party connected form.

**Contact has been added to a list**\
Triggers when a contact is added to a list.

**Contact has been tagged**\
Triggers when a tag is added to a contact.

**Contact has been untagged**\
Triggers when a tag is removed from a contact.

**Contact was sent a message**\
Triggers when a contact is sent a broadcast, funnel, or transactional message.

**Contact opened a message**\
Triggers when a contact opens a message.

**Contact clicked a link in a message**\
Triggers when a contact clicks a link in a message.

**Contact unsubscribed**\
Triggers when contact has been unsubscribed.

**Contact complained**\
Triggers when contact uses the "spam button" or "junk button" to signal they've received unwanted mail.

**Contact soft-bounced**\
Triggers when contact bounces for temporary reasons such as exceeding their mailbox quota.

**Contact hard-bounce**\
Triggers when retrying delivery to contact in the future will not succeed, usually because the email address doesn't exist.

**Contact opened or clicked**\
Triggered by contact opening a message or clicking a link in a message - two triggers in one event.

**Contact soft-bounced or hard-bounced**\
Triggered when contact is undeliverable for any reason - two triggers in one event.

**Contact unsubscribed or complained**\
Triggered when contact has been unsubscribed or uses the "spam button" or "junk button" - two triggers in one event.

{% hint style="info" %}
**Pabbly Actions**
{% endhint %}

**Create a List**\
Creates a new contact list.

**Create or Update Contact**\
Creates a contact in a contact list with a specified set of properties and property values, if the contact already exists then only the contact's properties will be updated.

**Tag Contact**\
Add a tag to a contact.

**Remove Tag From Contact**\
Removes a tag from a contact, if it is present on that contact.

**Unsubscribe Contact**\
Sets a contact as unsubscribed for all lists, suppressing all future mail to that contact.

**Get Contact Data**\
Retrieves all data for a contact with the given email.

**Remove Contact From List**\
Removes a contact from a list by email address. If the contact is only in one list, this will cause the contact to be deleted from the database entirely.

**Delete All Contact Data (GDPR)**\
Removes all known data for a contact in all lists.

**Delete a List**\
Deletes a contact list. Any contacts not present in other lists will also be deleted.

**Get All Lists**\
Get names and properties of all contact lists in the system.

**Get All Tags**\
List all contact tags in the system.

**Send Email**\
Configure and compose an email to be sent to each contact who goes through this automation. &#x20;


# Event Webhooks

{% hint style="info" %}
Utilize webhooks to receive real-time event notifications to a third-party integration&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fc8vQhxHAMbSWsosQSVgw%2Fimage.png?alt=media&amp;token=6799fc16-680d-405a-8100-26a169dd4d93" alt=""><figcaption></figcaption></figure>

**New form submission**\
Triggers when a contact subscribes through a popup, slideout, hellobar, embedded, or 3rd party connected form.

**Contact has been added to a list**\
Triggers when a contact is added to a list.

**Contact has been tagged**\
Triggers when a tag is added to a contact.

**Contact has been untagged**\
Triggers when a tag is removed from a contact.

**Contact was sent a message**\
Triggers when a contact is sent a broadcast, funnel, or transactional message.

**Contact opened a message**\
Triggers when a contact opens a message.

**Contact clicked a link in a message**\
Triggers when a contact clicks a link in a message.

**Contact unsubscribed**\
Triggers when contact has been unsubscribed.

**Contact complained**\
Triggers when contact uses the "spam button" or "junk button" to signal they've received unwanted mail.

**Contact soft-bounced**\
Triggers when contact bounces for temporary reasons such as exceeding their mailbox quota.

**Contact hard-bounce**\
Triggers when retrying delivery to contact in the future will not succeed, usually because the email address doesn't exist.

**Contact opened or clicked**\
Triggered by contact opening a message or clicking a link in a message - two triggers in one event.

**Contact soft-bounced or hard-bounced**\
Triggered when contact is undeliverable for any reason - two triggers in one event.

**Contact unsubscribed or complained**\
Triggered when contact has been unsubscribed or uses the "spam button" or "junk button" - two triggers in one event.


# Delivery Features

<table data-header-hidden><thead><tr><th width="89"></th><th></th></tr></thead><tbody><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FpgjQ5JVUqA4zImRmk640%2Fimage.png?alt=media&amp;token=86cca803-a297-492c-a8ca-bd1d5f685d8d" alt="" data-size="original"></td><td><strong>SMTP Relay support works with any ESP or MTA</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FNtJeuPllAgyO9jhflW40%2Fimage.png?alt=media&amp;token=ec6073ce-e7f8-4d14-bc57-46060398c186" alt="" data-size="original"></td><td><strong>API Integrations with Amazon SES, SparkPost, and Mailgun</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fctx0zwNwqLWPWbXp8Plj%2Fimage.png?alt=media&amp;token=932a153c-f2f6-4444-98eb-468d658dd823" alt="" data-size="original"></td><td><strong>Send using your own IP Addresses with our included Velocity MTA</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FDegl2FgP445uPIAn6gLk%2Fimage.png?alt=media&amp;token=5c49e7c1-31cd-46f4-aa69-e902dd697b88" alt="" data-size="original"></td><td><strong>Install Velocity MTA on unlimited servers with Unlimited IPs</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FZ8DH6iY6P6zWagtwbca2%2Fimage.png?alt=media&amp;token=2f082325-b916-4067-af39-3af1fc5e5fc9" alt="" data-size="original"></td><td><strong>Automated IP Warmup Throttling guards your Sender Reputation</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FBhysAvsPhc7cP3kN1Bap%2Fimage.png?alt=media&amp;token=4437b3c9-11cd-4b4f-b9dc-c621769e9b9a" alt="" data-size="original"></td><td><strong>Load Balance delivery across APIs, Relays, and MTAs</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FxNF4OUpUt3tzsGJ0uF9h%2Fimage.png?alt=media&amp;token=d6c483c3-1a95-4524-9a11-4ddcc3a4a190" alt="" data-size="original"></td><td><strong>Customize delivery for mailbox providers like Gmail, Yahoo, Outlook, and iCloud</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FqWMmn2n3AA38yOCfiw2c%2Fimage.png?alt=media&amp;token=ecb53318-a3cc-4567-bbd3-06f9683bed24" alt="" data-size="original"></td><td><strong>Partition Customer Accounts into separate IP Pools and ESP Accounts</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FHZlsAAgebuZDJY3AZiP6%2Fimage.png?alt=media&amp;token=f2ea1245-7475-45c5-afe1-00dbd694b5b8" alt="" data-size="original"></td><td><strong>Automatically Pause Customer Accounts for High Bounces or Complaints</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FxpOo2800tKVmxaifqH55%2Fimage.png?alt=media&amp;token=fdd9a56d-0c09-415d-afc7-5c358a1df156" alt="" data-size="original"></td><td><strong>Comprehensive IP and Domain Level Delivery Reporting</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FMBj3DfGQURwpOlfQEbpt%2Fimage.png?alt=media&amp;token=a53b7ed0-1cbc-4bd1-9e0c-31b93463edb6" alt="" data-size="original"></td><td><strong>Dashboard shows Unified View of all Customer Open, Bounce, and Complaint Rates</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fu2GCN51rBM5hjhvjvRf8%2Fimage.png?alt=media&amp;token=a42d5077-2f66-44a1-86b3-44d7de255f53" alt="" data-size="original"></td><td><strong>Automated Complaint Feedback Loop Processing</strong> </td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F5bkOHCDPr6m5rDuduX5x%2Fimage.png?alt=media&amp;token=5936958b-9afe-4f1d-a44d-114db1505b89" alt="" data-size="original"></td><td><strong>Automated Bounce Processing</strong></td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FBO0auUnw18QfoZLywKDe%2Fimage.png?alt=media&amp;token=bca70e16-0ced-49ef-83dc-5ff0e03a5ac5" alt="" data-size="original"></td><td><strong>Full Header Control Including One-Click List-Unsubscribe</strong> </td></tr><tr><td><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fti5UISWUJmkwz2LtiSGQ%2Fimage.png?alt=media&amp;token=41e82068-1838-4998-bf9d-9c6fc14a62df" alt="" data-size="original"></td><td><strong>24x7 Support</strong></td></tr></tbody></table>


# ESP Installation

For best performance, a dedicated Ubuntu VPS with 2 vCPU, 4 GB RAM, and NVMe storage is a good minimum spec.

See the [recommended VPS](/docs/faq/recommended-vps) for suggested providers.

{% hint style="danger" %}
&#x20;Installation must be run as **root**. `sudo` is unsupported.
{% endhint %}

#### Docker Compose is a prerequisite

{% hint style="warning" %}
This optional next step will uninstall any older Docker versions.
{% endhint %}

A Docker install script for Ubuntu is included for convenience:

```bash
./install_docker_on_ubuntu.sh
```

#### Create a subdomain in your DNS provider

Add an A record, such as `esp.yourdomain.com` where your DNS records are hosted (e.g., Cloudflare), and point it to the IP address of your VPS or server.

You'll need to enter this domain and IP address during installation.

#### Download the installation archive and run the setup wizard:

**Intel/AMD:**

```bash
curl -LO https://github.com/emaildelivery/edcom-ce/releases/latest/download/edcom-install-amd64.tgz
tar -xzvf edcom-install-amd64.tgz
cd edcom-install
./ez_setup.sh 
```

**ARM/AArch64:**

```bash
curl -LO https://github.com/emaildelivery/edcom-ce/releases/latest/download/edcom-install-arm64.tgz
tar -xzvf edcom-install-arm64.tgz
cd edcom-install
./ez_setup.sh 
```

#### Common installation issues

Problem? See [this section](/docs/common-installation-issues/dont-use-sudo) in the documentation.

#### Access your ESP platform

Open your web browser to the domain you configured above (e.g., `esp.yourdomain.com`) and log in with the admin account you created during setup.

Follow the "[Getting Ready to Send](/docs/introduction/getting-ready-to-send)" guide to send your first message.

Secure your platform with [HTTPS](/docs/options-for-adding-https/free-native-ssl-via-lets-encrypt).

#### Enable embedded Beefree premium HTML email builder

1. Create a file called `edcom-install/config/commercial_license.key` containing your license key
2. Run `./restart.sh` in `edcom-install`


# Racknerd Installation

{% hint style="warning" %}
Alma Linux is the only version of Linux that is officially unsupported due to issues it consistently causes with Docker, but please use Ubuntu.  &#x20;
{% endhint %}

{% hint style="success" %}
**Here's a preview of the steps we will be taking throughout this document to get your ESP Platform up and running on your Racknerd VPS in only 2 or 3 minutes:**&#x20;
{% endhint %}

* [ ] Find your Racknerd IP Address and root password
* [ ] Connect to your Racknerd VPS using SSH from macOS terminal or PuTTY on Windows&#x20;
* [ ] Install curl
* [ ] Download your software to the Racknerd VPS from your portal at <https://appsumo.emaildelivery.com> using curl&#x20;
* [ ] Exact your software archive like you would a zip or rar file
* [ ] Run our automated installation tool for Docker (Zero effort)
* [ ] Run our automated EZ Setup tool to install your software (1 out of 10 effort)
* [ ] Log into your new ESP platform as the administrator in your web browser
* [ ] Brag to everyone you know about running your own ESP 😎

{% hint style="info" %}
**To access your Racknerd VPS you'll need the IP address and root password**

We'll show you how to use this information to connect to your server using ssh on both macOS and Windows
{% endhint %}

{% hint style="info" %}
**Racknerd should send you the VPS IP and root password via email, if the email never arrives, here's where you can find them on the Racknerd website:**
{% endhint %}

<https://my.racknerd.com/clientarea.php?action=emails>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FPhK0AzWNycddNmGECRTZ%2FScreenshot%202023-10-26%20at%2010.49.11%E2%80%AFPM.png?alt=media&amp;token=c2012f70-b6d9-4c47-82b6-8778a82a1777" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**To connect to your Racknerd server on macOS, you'll open terminal and use the ssh command.**
{% endhint %}

{% hint style="info" %}
**To connect to your Racknerd server on Windows, you'll download a tool called PuTTY:**

<https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html>
{% endhint %}

{% hint style="info" %}
**For this example we'll use macOS to connect to our Racknerd VPS.**&#x20;
{% endhint %}

{% hint style="info" %}
**Copy the IP of your VPS, open terminal, type ssh root@ and paste the IP in after the @, like the screenshot below:**
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F2oi1u4yIfZngY5O5BmRt%2FScreenshot%202023-10-26%20at%2010.54.09%E2%80%AFPM.png?alt=media&amp;token=80e7313b-3186-412e-8dc0-715b28af43fa" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FuOavTqyUVH2Db65KaUuC%2FScreenshot%202023-10-26%20at%2011.27.00%E2%80%AFPM.png?alt=media&amp;token=de8a0283-267d-46e6-96bf-ee906757e799" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Now copy the root password, paste it into the password prompt, and hit enter.**&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fj2l3f28tt4kEOuFPFjKn%2FScreenshot%202023-10-26%20at%2010.54.58%E2%80%AFPM.png?alt=media&amp;token=5e838d26-4aa9-4004-84be-413945e5053e" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Once you're logged in as the root user, the first thing you're going to need to do is install curl with this command:**
{% endhint %}

```
apt-get install -y curl
```

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FUI76wVIiwNsiHg6b1ocs%2FScreenshot%202023-10-26%20at%2011.30.24%E2%80%AFPM.png?alt=media&amp;token=61e37464-aa1d-400b-b4b7-9abaeeabc449" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Once you've installed curl, you're ready to download your ESP platform from the portal at** [https://appsumo.emaildelivery.com ](https://appsumo.emaildelivery.com)
{% endhint %}

{% hint style="info" %}
**Click the clipboard link next to "ESP Platform Download Command", and paste it into your terminal window to download the software.**&#x20;
{% endhint %}

**Copy:**

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FJ3YK0VfyDiMcKKoNZKfR%2FScreenshot%202023-10-26%20at%2010.58.27%E2%80%AFPM.png?alt=media&amp;token=2319b250-18a4-4a20-b87c-becf6f849cb3" alt=""><figcaption></figcaption></figure>

**Paste**&#x20;

{% hint style="info" %}
**Hit enter and wait for the download to complete:**
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FkDg1SlZj1XTqA0M7pZH4%2FScreenshot%202023-10-26%20at%2011.00.30%E2%80%AFPM.png?alt=media&amp;token=f78b9604-2277-44bf-a7f8-a6a0cde5b7e1" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**You've just downloaded our software archive, this is similar to a zip file or a rar, so you're going to need to extract it to access its files.**
{% endhint %}

{% hint style="info" %}
**Run the following command to unpack the platform archive:**
{% endhint %}

```
tar xzvf edcom-install.tgz
```

{% hint style="info" %}
**You'll see output like the following**
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FeyZS75xnFPlbbIsG8YWh%2FScreenshot%202023-10-26%20at%2011.01.17%E2%80%AFPM.png?alt=media&amp;token=f790a5cc-a24d-4164-aa5f-625055ac2154" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Once the extraction process is finished, change directory to edcom-install:**
{% endhint %}

```
cd edcom-install
```

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FKDr74v3mD5vbOoiMEaQO%2FScreenshot%202023-10-27%20at%2012.39.15%E2%80%AFPM.png?alt=media&amp;token=d7f6e439-8490-4163-ba18-7a151ad7e080" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Now run our automated Docker installation script:**
{% endhint %}

<pre><code><strong>./install_docker_on_ubuntu.sh
</strong></code></pre>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FXKUPAzPOKSNtk5qUpSP0%2FScreenshot%202023-10-27%20at%2012.41.25%E2%80%AFPM.png?alt=media&amp;token=c3b57ece-5439-44f5-96a2-0193324e221e" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FQDFrCVMilKjx0Vizicyb%2FScreenshot%202023-10-27%20at%2012.41.45%E2%80%AFPM.png?alt=media&amp;token=fcf67719-40f3-4fdd-82ca-db6252f26474" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Now that Docker is installed, you're ready to run the EZ Setup installer:**
{% endhint %}

```
./ez_setup.sh
```

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FXWIH2oh4JBCYJwyyF1dF%2Fimage.png?alt=media&amp;token=988d5bb1-10f7-4cb2-8312-794fab88e499" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**The EZ Setup script is going to ask you a series of questions it uses to automate the installation, and then you'll be done.**
{% endhint %}

First question:

{% hint style="info" %}
**Do you want to proceed with the automated setup? \[y/n]: y**&#x20;
{% endhint %}

Type **y**

Second question:&#x20;

{% hint style="info" %}
**Is a recent version of Docker already installed on this server (if you don't know the answer, type "n") \[y/n]? y**
{% endhint %}

Type **y**

{% hint style="success" %}
**The Docker images which contain your ESP platform will begin loading:**&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FvJEDJQHpyCwRabkK80Mi%2FScreenshot%202023-10-27%20at%2012.50.24%E2%80%AFPM.png?alt=media&amp;token=78d37d2a-26b5-47ec-89a6-48e5a6791218" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Now you'll be asked for an IP address to use for the ESP, use the same one from Racknerd you connected with over ssh:**
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FwQo2vNqDXhdRBfD7J3Nu%2Fimage.png?alt=media&amp;token=2927efac-eec3-411d-bbe0-2119ee34ee9c" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**It's time to enter the subdomain and domain you're going to create for your ESP after you've completed this installation process.**&#x20;
{% endhint %}

{% hint style="info" %}
**The DNS record doesn't need to exist right now, but you need to tell the platform that you'll be accessing it using that domain in the future.**&#x20;
{% endhint %}

{% hint style="info" %}
**After installation, you'll access your ESP platform using the IP address in a web browser to get started, until you've added DNS.** &#x20;
{% endhint %}

{% hint style="info" %}
**Just make the subdomain "esp" for simplicity.**&#x20;
{% endhint %}

{% hint style="info" %}
**So if your domain name is fivetacofiesta.com, name your platform esp.fivetacofiesta.com**.&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FrD2GxxB5uWccTXULWvRV%2FScreenshot%202023-10-27%20at%2012.53.46%E2%80%AFPM.png?alt=media&amp;token=8b6b2876-3b22-4415-8dd1-07b2b33fb9fd" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**To enter your license key you're going to need to head back over to the portal again:**&#x20;
{% endhint %}

{% hint style="info" %}
**This time copy and paste from the "ESP Platform License Key" up at the top, instead of where you copied it from last time.**&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FWFgLy2yAvEewwsw6jk3b%2FScreenshot%202023-10-27%20at%2012.56.53%E2%80%AFPM.png?alt=media&amp;token=5e2d9bf0-bb9d-4526-b919-a415f4b7f6ad" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fu8O2ar5v9Giw2CdilVWM%2FScreenshot%202023-10-27%20at%2012.58.38%E2%80%AFPM.png?alt=media&amp;token=e4bcd068-e2ee-4eff-9f75-1ea7150a831c" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**We give professional IT people the chance to opt out of a technical optimization used for our software, but you'll want to accept and just hit y when asked about vm.overcommit\_memory.**&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F0hSsmUnPAyWlfcsbOUKO%2Fimage.png?alt=media&amp;token=ba3b42a1-548c-4a0f-8b8c-115ab8dfcdfd" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
**Your platform should boot up now without errors:**
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FFCscjm9rAwhfuwgG3o8s%2Fimage.png?alt=media&amp;token=814a7a93-14f5-4404-be89-740fea08d7a7" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Enter your desired Name, Company Name, and your Administrator Email Address.**

**The administrator email address doesn't have to exist, you can make it up:**
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FI9GWqCv0ezyOAJeFCtW0%2FScreenshot%202023-10-27%20at%201.03.46%E2%80%AFPM.png?alt=media&amp;token=807195fc-9995-401c-8a94-530405b02bbb" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**When you enter the password for your administrator email address, it won't look like you're typing anything, this is fine, it's working.**&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F4JuWsR3TxGXj9JQh29q5%2FScreenshot%202023-10-27%20at%201.04.09%E2%80%AFPM.png?alt=media&amp;token=ad1fb60d-eb69-4cce-979d-2b61db375abe" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FATlneEKIjEBZRpQXbZ4D%2FScreenshot%202023-10-27%20at%201.04.23%E2%80%AFPM.png?alt=media&amp;token=ce5526b3-2638-4de6-b150-78c94d55f46f" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FdABxnaWzkIHtAR2Viw4G%2Fimage.png?alt=media&amp;token=9b16a9dc-5f0f-482b-b9a0-47186ef11174" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
**Your ESP platform is now online and can be accessed in any web browser using it's IP address**
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F2UYZkJ1kKpIDDpcSfGRS%2FScreenshot%202023-10-27%20at%201.16.27%E2%80%AFPM.png?alt=media&amp;token=7427aada-361a-4ef6-a4d8-9bb3e84441df" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Next, we're going to set up DNS for your ESP so you'll be able to access it from your web browser using the domain name you entered earlier, instead of the IP address.**
{% endhint %}

{% hint style="info" %}
**Using Cloudflare in our example, we're going to create a DNS "A" record for the subdomain entered during installation, and point it at our VPS IP.**&#x20;
{% endhint %}

{% hint style="info" %}
**You'll have a similar DNS record creation process on your own DNS hosting provider, however, you should switch to Cloudflare if you can (it's free).**&#x20;
{% endhint %}

Create a new DNS "A" record:

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fp2kePNSxA0ZDr0toRxYA%2FScreenshot%202023-12-09%20at%2012.37.51%E2%80%AFAM.png?alt=media&amp;token=dd7422f5-16ee-44b4-8af9-503a587d8961" alt=""><figcaption></figcaption></figure>

Enter the subdomain you used during the ESP installation and your Racknerd VPS IP address

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F6oaXVnBkpoJLs1Df6BwX%2FScreenshot%202023-12-09%20at%2012.39.09%E2%80%AFAM.png?alt=media&amp;token=43ca4e5f-5c18-4281-9212-c17b42070809" alt=""><figcaption></figcaption></figure>

Save and verify the new DNS record was created successfully.

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F3CtonFS6T8YwsGV2d9iT%2FScreenshot%202023-12-09%20at%2012.39.23%E2%80%AFAM.png?alt=media&amp;token=bb72b29d-5148-42dd-9adb-c4b2dff1580c" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
Access your ESP platform using the DNS record you just created at <http://esp.yourdomainname.com>
{% endhint %}

**\*\*\* Note:** Use the actual domain name you entered during the ESP installation, not esp.yourdomainname.com, it's just a placeholder.&#x20;

{% hint style="warning" %}
**Something to remember for troubleshooting purposes after you've set up DNS is when it seems like your ESP platform might be down, try the IP address as a backup to verify you can still connect ok and it's isolated to a DNS failure or another related issue.**&#x20;
{% endhint %}


# Generic VPS Installation

{% hint style="warning" %}
Alma Linux is the only version of Linux that is officially unsupported due to issues it consistently causes with Docker, but please use Ubuntu.  &#x20;
{% endhint %}

{% hint style="success" %}
**Here's a preview of the steps we will be taking throughout this document to get your ESP Platform up and running on your VPS in only 2 or 3 minutes:**&#x20;
{% endhint %}

* [ ] Find your VPS IP Address and root password
* [ ] Connect to your VPS using SSH from macOS terminal or PuTTY on Windows&#x20;
* [ ] Install curl
* [ ] Download your software to the VPS from your portal at <https://appsumo.emaildelivery.com> using curl&#x20;
* [ ] Exact your software archive like you would a zip or rar file
* [ ] Run our automated installation tool for Docker (Zero effort)
* [ ] Run our automated EZ Setup tool to install your software (1 out of 10 effort)
* [ ] Log into your new ESP platform as the administrator in your web browser
* [ ] Brag to everyone you know about running your own ESP 😎

{% hint style="info" %}
**To access your VPS you'll need the IP address and root password**

We'll show you how to use this information to connect to your server using ssh on both macOS and Windows
{% endhint %}

{% hint style="info" %}
**To connect to your VPS on macOS, you'll open terminal and use the ssh command.**
{% endhint %}

{% hint style="info" %}
**To connect to your VPS on Windows, you'll download a tool called PuTTY:**

<https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html>
{% endhint %}

{% hint style="info" %}
**For this example we'll use macOS.**&#x20;
{% endhint %}

{% hint style="info" %}
**Copy the IP of your VPS, open terminal, type ssh root@ and paste the IP in after the @, like the screenshot below:**
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F2oi1u4yIfZngY5O5BmRt%2FScreenshot%202023-10-26%20at%2010.54.09%E2%80%AFPM.png?alt=media&amp;token=80e7313b-3186-412e-8dc0-715b28af43fa" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FuOavTqyUVH2Db65KaUuC%2FScreenshot%202023-10-26%20at%2011.27.00%E2%80%AFPM.png?alt=media&amp;token=de8a0283-267d-46e6-96bf-ee906757e799" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Now copy the root password, paste it into the password prompt, and hit enter.**&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fj2l3f28tt4kEOuFPFjKn%2FScreenshot%202023-10-26%20at%2010.54.58%E2%80%AFPM.png?alt=media&amp;token=5e838d26-4aa9-4004-84be-413945e5053e" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Once you're logged in as the root user, the first thing you're going to need to do is install curl with this command:**
{% endhint %}

```
apt-get install -y curl
```

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FUI76wVIiwNsiHg6b1ocs%2FScreenshot%202023-10-26%20at%2011.30.24%E2%80%AFPM.png?alt=media&amp;token=61e37464-aa1d-400b-b4b7-9abaeeabc449" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Once you've installed curl, you're ready to download your ESP platform from the portal at** [https://appsumo.emaildelivery.com ](https://appsumo.emaildelivery.com)
{% endhint %}

{% hint style="info" %}
**Click the clipboard link next to "ESP Platform Download Command", and paste it into your terminal window to download the software.**&#x20;
{% endhint %}

**Copy:**

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FJ3YK0VfyDiMcKKoNZKfR%2FScreenshot%202023-10-26%20at%2010.58.27%E2%80%AFPM.png?alt=media&amp;token=2319b250-18a4-4a20-b87c-becf6f849cb3" alt=""><figcaption></figcaption></figure>

**Paste**&#x20;

{% hint style="info" %}
**Hit enter and wait for the download to complete:**
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FkDg1SlZj1XTqA0M7pZH4%2FScreenshot%202023-10-26%20at%2011.00.30%E2%80%AFPM.png?alt=media&amp;token=f78b9604-2277-44bf-a7f8-a6a0cde5b7e1" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**You've just downloaded our software archive, this is similar to a zip file or a rar, so you're going to need to extract it to access its files.**
{% endhint %}

{% hint style="info" %}
**Run the following command to unpack the platform archive:**
{% endhint %}

```
tar xzvf edcom-install.tgz
```

{% hint style="info" %}
**You'll see output like the following**
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FeyZS75xnFPlbbIsG8YWh%2FScreenshot%202023-10-26%20at%2011.01.17%E2%80%AFPM.png?alt=media&amp;token=f790a5cc-a24d-4164-aa5f-625055ac2154" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Once the extraction process is finished, change directory to edcom-install:**
{% endhint %}

```
cd edcom-install
```

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FKDr74v3mD5vbOoiMEaQO%2FScreenshot%202023-10-27%20at%2012.39.15%E2%80%AFPM.png?alt=media&amp;token=d7f6e439-8490-4163-ba18-7a151ad7e080" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Now run our automated Docker installation script:**
{% endhint %}

<pre><code><strong>./install_docker_on_ubuntu.sh
</strong></code></pre>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FXKUPAzPOKSNtk5qUpSP0%2FScreenshot%202023-10-27%20at%2012.41.25%E2%80%AFPM.png?alt=media&amp;token=c3b57ece-5439-44f5-96a2-0193324e221e" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FQDFrCVMilKjx0Vizicyb%2FScreenshot%202023-10-27%20at%2012.41.45%E2%80%AFPM.png?alt=media&amp;token=fcf67719-40f3-4fdd-82ca-db6252f26474" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Now that Docker is installed, you're ready to run the EZ Setup installer:**
{% endhint %}

```
./ez_setup.sh
```

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FXWIH2oh4JBCYJwyyF1dF%2Fimage.png?alt=media&amp;token=988d5bb1-10f7-4cb2-8312-794fab88e499" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**The EZ Setup script is going to ask you a series of questions it uses to automate the installation, and then you'll be done.**
{% endhint %}

First question:

{% hint style="info" %}
**Do you want to proceed with the automated setup? \[y/n]: y**&#x20;
{% endhint %}

Type **y**

Second question:&#x20;

{% hint style="info" %}
**Is a recent version of Docker already installed on this server (if you don't know the answer, type "n") \[y/n]? y**
{% endhint %}

Type **y**

{% hint style="success" %}
**The Docker images which contain your ESP platform will begin loading:**&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FvJEDJQHpyCwRabkK80Mi%2FScreenshot%202023-10-27%20at%2012.50.24%E2%80%AFPM.png?alt=media&amp;token=78d37d2a-26b5-47ec-89a6-48e5a6791218" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Now you'll be asked for an IP address to use for the ESP, use the same you connected with over ssh:**
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FwQo2vNqDXhdRBfD7J3Nu%2Fimage.png?alt=media&amp;token=2927efac-eec3-411d-bbe0-2119ee34ee9c" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**It's time to enter the subdomain and domain you're going to create for your ESP after you've completed this installation process.**&#x20;
{% endhint %}

{% hint style="info" %}
**The DNS record doesn't need to exist right now, but you need to tell the platform that you'll be accessing it using that domain in the future.**&#x20;
{% endhint %}

{% hint style="info" %}
**After installation, you can access your ESP platform using the IP address in a web browser to get started, until you've added the DNS.** &#x20;
{% endhint %}

{% hint style="info" %}
**Just make the subdomain "esp" for simplicity.**&#x20;
{% endhint %}

{% hint style="info" %}
**So if your domain name is fivetacofiesta.com, name your platform esp.fivetacofiesta.com**.&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FrD2GxxB5uWccTXULWvRV%2FScreenshot%202023-10-27%20at%2012.53.46%E2%80%AFPM.png?alt=media&amp;token=8b6b2876-3b22-4415-8dd1-07b2b33fb9fd" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**To enter your license key you're going to need to head back over to the portal again:**&#x20;
{% endhint %}

{% hint style="info" %}
**This time copy and paste from the "ESP Platform License Key" up at the top, instead of where you copied it from last time.**&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FWFgLy2yAvEewwsw6jk3b%2FScreenshot%202023-10-27%20at%2012.56.53%E2%80%AFPM.png?alt=media&amp;token=5e2d9bf0-bb9d-4526-b919-a415f4b7f6ad" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fu8O2ar5v9Giw2CdilVWM%2FScreenshot%202023-10-27%20at%2012.58.38%E2%80%AFPM.png?alt=media&amp;token=e4bcd068-e2ee-4eff-9f75-1ea7150a831c" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**We give professional IT people the chance to opt out of a technical optimization used for our software, but you'll want to accept and just hit y when asked about vm.overcommit\_memory.**&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F0hSsmUnPAyWlfcsbOUKO%2Fimage.png?alt=media&amp;token=ba3b42a1-548c-4a0f-8b8c-115ab8dfcdfd" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
**Your platform should boot up now without errors:**
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FFCscjm9rAwhfuwgG3o8s%2Fimage.png?alt=media&amp;token=814a7a93-14f5-4404-be89-740fea08d7a7" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Enter your desired Name, Company Name, and your Administrator Email Address.**

**The administrator email address doesn't have to exist, you can make it up:**
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FI9GWqCv0ezyOAJeFCtW0%2FScreenshot%202023-10-27%20at%201.03.46%E2%80%AFPM.png?alt=media&amp;token=807195fc-9995-401c-8a94-530405b02bbb" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**When you enter the password for your administrator email address, it won't look like you're typing anything, this is fine, it's working.**&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F4JuWsR3TxGXj9JQh29q5%2FScreenshot%202023-10-27%20at%201.04.09%E2%80%AFPM.png?alt=media&amp;token=ad1fb60d-eb69-4cce-979d-2b61db375abe" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FATlneEKIjEBZRpQXbZ4D%2FScreenshot%202023-10-27%20at%201.04.23%E2%80%AFPM.png?alt=media&amp;token=ce5526b3-2638-4de6-b150-78c94d55f46f" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FdABxnaWzkIHtAR2Viw4G%2Fimage.png?alt=media&amp;token=9b16a9dc-5f0f-482b-b9a0-47186ef11174" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
**Your ESP platform is now online and can be accessed in any web browser using it's IP address**
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F2UYZkJ1kKpIDDpcSfGRS%2FScreenshot%202023-10-27%20at%201.16.27%E2%80%AFPM.png?alt=media&amp;token=7427aada-361a-4ef6-a4d8-9bb3e84441df" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Next, we're going to set up DNS for your ESP so you'll be able to access it from your web browser using the domain name you entered earlier, instead of the IP address.**
{% endhint %}

{% hint style="info" %}
**Using Cloudflare in our example, we're going to create a DNS "A" record for the subdomain entered during installation, and point it at our VPS IP.**&#x20;
{% endhint %}

{% hint style="info" %}
**You'll have a similar DNS record creation process on your own DNS hosting provider, however, you should switch to Cloudflare if you can (it's free).**&#x20;
{% endhint %}

Create a new DNS "A" record:

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fp2kePNSxA0ZDr0toRxYA%2FScreenshot%202023-12-09%20at%2012.37.51%E2%80%AFAM.png?alt=media&amp;token=dd7422f5-16ee-44b4-8af9-503a587d8961" alt=""><figcaption></figcaption></figure>

Enter the subdomain you used during the ESP installation and your Racknerd VPS IP address

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F6oaXVnBkpoJLs1Df6BwX%2FScreenshot%202023-12-09%20at%2012.39.09%E2%80%AFAM.png?alt=media&amp;token=43ca4e5f-5c18-4281-9212-c17b42070809" alt=""><figcaption></figcaption></figure>

Save and verify the new DNS record was created successfully.

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F3CtonFS6T8YwsGV2d9iT%2FScreenshot%202023-12-09%20at%2012.39.23%E2%80%AFAM.png?alt=media&amp;token=bb72b29d-5148-42dd-9adb-c4b2dff1580c" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
Access your ESP platform using the DNS record you just created at <http://esp.yourdomainname.com>
{% endhint %}

**\*\*\* Note:** Use the actual domain name you entered during the ESP installation, not esp.yourdomainname.com, it's just a placeholder.&#x20;

{% hint style="warning" %}
**Something to remember for troubleshooting purposes after you've set up DNS is when it seems like your ESP platform might be down, try the IP address as a backup to verify you can still connect ok and it's isolated to a DNS failure or another related issue.**&#x20;
{% endhint %}


# Installation video for Digital Ocean droplets

**This video walks you through the EZ Setup installation process:**

{% embed url="<https://emailteam.wistia.com/medias/ue3016zod1>" %}


# Advanced Installation

{% hint style="danger" %}
**This page outlines the manual installation process for those proficient with the Linux command line. Most people will want to follow the** [**Generic VPS installation**](/docs/install/generic-vps-installation) **or** [**Racknerd Installation**](/docs/install/racknerd-installation) **guides instead.**
{% endhint %}

{% hint style="info" %}
Installation can occur on any Ubuntu Linux server with an AMD64-compatible or ARM64 CPU.
{% endhint %}

{% hint style="warning" %}
Alma Linux is the only version of Linux that is officially unsupported due to issues it consistently causes with Docker, but please use Ubuntu.  &#x20;
{% endhint %}

{% hint style="info" %}
Check to ensure your server has a [swap partition ](https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-22-04)enabled, Digital Ocean droplets do not come with swap preconfigured.
{% endhint %}

{% hint style="info" %}
Redis recommends that **`vm.overcommit_memory = 1`** be set in /etc/sysctl.conf. After changing /etc/sysctl.conf, run the command **`sysctl vm.overcommit_memory=1`**
{% endhint %}

{% hint style="warning" %}
**Make sure ports 80, 443, 587, 8025, and 2525 are not in use by another application, firewalled, or blocked by SELinux.**
{% endhint %}

To install and setup your platform we're going to need to complete the following steps, which will be outlined in detail below:

* [ ] SSH into a Linux VPS or server or use the Digital Ocean Droplet Console
* [ ] Install Docker
* [ ] Download the installation archive to your server
* [ ] Unpack the archive
* [ ] Change directory to edcom-install
* [ ] Load the Docker images
* [ ] Edit the edcom.json file, enter your domain name and platform license key
* [ ] Start the platform
* [ ] Create an administrator account
* [ ] Log into the platform with your administrator account in a web browser using the domain name you entered in the config file&#x20;

Run the curl one-liner emailed to you with your embedded license key to download the installation archive, e.g.:&#x20;

{% code overflow="wrap" %}

```
curl -L https://api.keygen.sh/v1/accounts/5b5014e5-3f60-430e-af80-b0004f2eb853/artifacts/edcom-install.tgz -H 'Authorization: License XXXXXXXXXXX-V3' -o edcom-install.tgz
```

{% endcode %}

Extract the archive **as the root user** in the desired install location:

```
tar xzvf edcom-install.tgz
```

{% hint style="info" %}
Files will be extracted into a single directory named **edcom-install** where the entirety of the emaildelivery.com platform will reside going forward.
{% endhint %}

Change to the edcom-install directory:

```
cd edcom-install
```

**Install Docker Engine**

We include an automated Docker installation script for Ubuntu:

```
./install_docker_on_ubuntu.sh 
```

See Docker installation instructions for [Debian](https://docs.docker.com/engine/install/debian/), [CentOS](https://docs.docker.com/engine/install/centos/), [Fedora](https://docs.docker.com/engine/install/fedora/)

Run the following command to load the Docker images:

```
./load_images.sh
```

Copy the file `config/edcom.defaults.json` to `config/edcom.json`

`cp config/edcom.defaults.json config/edcom.json`

Open the config/edcom.json file with an editor such as Nano, Vim, or Emacs and edit the following lines:

```
"admin_url": "http://your_domain_name",
"license_key": "LICENSE KEY THAT YOU USED TO DOWNLOAD THE SOFTWARE",
"smtphost": "your_domain_name"
```

{% hint style="info" %}
The admin\_url and`smtphost`are your platform's **management domain**, use a subdomain such as esp.mydomain.com.
{% endhint %}

{% hint style="warning" %}
The admin\_url must be a valid domain that has a DNS A record pointed at the IP of the installation server.&#x20;
{% endhint %}

{% hint style="danger" %}
**After this step, the admin\_url domain can only be changed with the ./update\_domain.sh command.**&#x20;
{% endhint %}

To start the platform, run the following command:&#x20;

```
./restart.sh
```

Then run the following command to create your administrator account:&#x20;

&#x20;  `./create_admin.sh "youremail@yourdomain.com" "Your Name" "Company Name"`

The email address you use here doesn't have to be a real one, it's just your Administrator username.&#x20;

{% hint style="info" %}
Set your administrator password and initialization will complete. &#x20;
{% endhint %}

Run `./create_admin.sh --help` for more information and `./reset_password.sh -h` if you lose your administrator password.

{% hint style="success" %}
**The installation should now be accessible in your web browser at the admin\_url domain.**
{% endhint %}

Next, enable [Let's Encrypt](/docs/options-for-adding-https/free-native-ssl-via-lets-encrypt) for HTTPS://.


# Don't use sudo

{% hint style="danger" %}
**You must be logged in as the actual root user, you can not install this software using sudo.**
{% endhint %}

Sudo is the primary cause of the following error:

{% code overflow="wrap" %}

```
 ✘ Container edcom-database    Error                                       0.0s 

dependency failed to start: container edcom-database is unhealthy
```

{% endcode %}


# Bind: address already in use

This is the error you'll get when another application is already running on the same IP address you're trying to install the ESP platform on, most of the time this is the https port, which is 443.&#x20;

{% code overflow="wrap" %}

```
Error response from daemon: driver failed programming external connectivity on endpoint edcom-proxy (7ee39b6ffb050bf61aa2e132da7044e00836d87319ee60751b301f4a613d7132): Error starting userland proxy: listen tcp4 1.2.3.4:443: bind: address already in use
```

{% endcode %}

If the ports the platform needs are blocked by another application, it will fail to start.

For more information on this topic, see this page in the docs:

{% content-ref url="/pages/JV2ncFVmRAOSCMAsNlJa" %}
[Resolving port conflicts with a second IP](/docs/common-installation-issues/resolving-port-conflicts-with-a-second-ip)
{% endcontent-ref %}


# Resolving port conflicts with a second IP

{% hint style="warning" %}
**Your ESP platform must be installed on its own IP address and can not share an IP with other applications that may cause port conflicts.**
{% endhint %}

{% hint style="info" %}
Ports needed by the ESP platform include common ports such as 80, 443, and 587, if these ports are blocked and unavailable, the platform will fail to start.&#x20;
{% endhint %}

These are the most common scenarios where a second IP may be needed for your ESP platform installation:

* You're already running a website on the server where you want to install the ESP platform.&#x20;
* You have some type of control panel software the server came pre-installed with such as CloudPanel, CPanel, or Plesk, and you don't want to remove it.&#x20;
* You're running a web-based application on the server that isn't necessarily a website but is still accessed using https\:// in a web browser.&#x20;
* You want to use the ESP platform and the MTA on the same server.

{% hint style="success" %}
**For clarity:** you can run on the same **server** as other applications using ports 80 and 443, but the platform needs its own *IP address* on that **server** in order for this to work.&#x20;
{% endhint %}


# Hostinger is your registrar

If you registered your domain on Hostinger, and your nameservers are still set to Hostinger's, wacky and unpredictable things will happen.

Your subdomains/domains will be inexplicably proxied/hijacked and go to Hostinger branded pages and Hostinger 404s.&#x20;

Following our docs on adding [https](/docs/options-for-adding-https/free-native-ssl-via-lets-encrypt) to your platform with Cloudflare or ZeroSSL will fail in confusing ways because Hostinger has Let's Encrypt wildcard certificates in use on all new subdomains/domains you'll create.&#x20;

The easiest way to solve all Hostinger-related maladies is just to create a free Cloudflare account and change your Hostinger nameservers to use Cloudflare instead.&#x20;

More information on this from Hostinger's site:

<https://support.hostinger.com/en/articles/1583201-how-to-enable-or-disable-https-for-your-website-at-hostinger>

<https://support.hostinger.com/en/articles/5733346-how-to-uninstall-an-ssl-certificate>


# Use the ARM build for AArch64/ARM64 CPUs

{% hint style="info" %}
Make sure you select the proper build from the dropdown menu before copying the link to your clipboard in the [portal](https://appsumo.emaildelivery.com).&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F5Z8tLhSSfW9f7h54Ivh0%2Fimage.png?alt=media&amp;token=964c5e96-5804-49c8-a48e-75fcba5f5f85" alt=""><figcaption></figcaption></figure>

Otherwise, you will receive the following error:

{% code overflow="wrap" %}

```
 ✘ Container edcom-database    Error                                       0.0s 

dependency failed to start: container edcom-database is unhealthy
```

{% endcode %}


# Oracle Cloud / Amazon Lightsail: "bind cannot assign requested address 8025"

{% hint style="danger" %}
At first glance, this error can be **misinterpreted** to make you think it means a ***PORT*** is already in use.
{% endhint %}

{% hint style="info" %}
What the error is telling you is that the ***IP ADDRESS*** you entered during installation can't be found in Ubuntu, because Oracle Cloud and Amazon Lightsail configure a different IP on your local VPS in the operating system than the IP they route to your VPS over the internet.&#x20;
{% endhint %}

{% hint style="warning" %}
**Your VPS has a hidden private IP address only you can see.**&#x20;

This is similar to how your home Wi-Fi network has a different IP network, commonly 192.168.0.x, which is proxied through your broadband internet router.
{% endhint %}

{% hint style="info" %}
If you enter your public internet-facing IP address during installation, the ESP platform will fail to start since it has no knowledge of that IP.&#x20;
{% endhint %}

{% hint style="info" %}
**Your VPS IP will be from one of the three private IP address ranges.**

The following IP space is reserved for private networking and is non-routable on the internet: **10.0.0.0 to 10.255.255.255, 172.16.0.0 to 172.31.255.255, `192.168.0.0` to `192.168.255.255`**
{% endhint %}

{% hint style="danger" %}
For the ESP platform to start successfully, it needs to know the **private IP address configured in Ubuntu**, not the internet-facing IP address you used to connect to your server with SSH.&#x20;
{% endhint %}

{% hint style="info" %}
**The easiest solution if you haven't done the installation already:**\
When you're prompted for your IP address during installation just enter 0.0.0.0, this will cause the ESP platform to just start automatically on every IP address it can find.&#x20;
{% endhint %}

{% hint style="danger" %}
**You can't use the 0.0.0.0 method if you plan on using Velocity MTA on this server.**&#x20;
{% endhint %}

{% hint style="info" %}
**If you completed the installation and received the error on a failed startup:**

You need to correct your configured IP address which is stored in the edcom-install/config/edcom.env file
{% endhint %}

View the contents of the file with the cat command:

```
cat config/edcom.env
PLATFORM_IP=1.2.3.4
```

You can do any of the following to correct this issue:

{% hint style="info" %}
**Method one**
{% endhint %}

* Change PLATFORM\_IP to 0.0.0.0 (**Can't do this if running Velocity MTA on this server**)

Use the 'nano' command to edit this file:

`nano config/edcom.env`

{% hint style="info" %}
**Method two**
{% endhint %}

* Delete config/edcom.env with the rm command, which will cause 0.0.0.0 to be used automatically (**Can't do this if running Velocity MTA on this server**)

`rm config/edcom.env`

{% hint style="info" %}
**Method three**
{% endhint %}

* Figure out what your private IP address is in Ubuntu and change PLATFORM\_IP to that IP address

Use the ip command to see your private IP addresses:

`ip a`&#x20;

Look for output similar to this:

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F17NwdG2NNBkY883q8oAu%2Fimage.png?alt=media&amp;token=d4d567ef-262c-4700-a27c-641cf8d05bb3" alt=""><figcaption></figcaption></figure>

You might also be shown your private IP addresses as part of the MOTD (message of the day) when you log in:

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F498u9qa0DOSfLRIz6G9a%2Fimage.png?alt=media&amp;token=e7d8b6b7-7b08-40f9-a4bf-4e9d8edd93ff" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="danger" %}
**What to do when you have multiple private IP addresses on the same VPS**
{% endhint %}

{% hint style="warning" %}
If you're planning on using Velocity MTA or any other applications on this VPS side by side with your ESP platform, you're going to need to know which public internet-facing IP address each of your private IP addresses is being proxied to.&#x20;
{% endhint %}

{% hint style="info" %}
Knowing the private IP to public IP mapping is necessary to make sure you configure your ESP platform to use the private IP address that links to the public IP you want to use for managing your ESP.&#x20;
{% endhint %}

Use the 'curl' command to find your "real" IP by initiating a connection from your private IP to a compatible website that reveals your public IP:&#x20;

`# curl --interface 10.0.0.246 icanhazip.com`\
`144.24.125.61`\
`# curl --interface 10.0.0.128 icanhazip.com`\
`144.24.125.186`\
`# curl --interface 10.0.0.42 icanhazip.com`\
`144.24.125.167`\
`# curl --interface 10.0.0.231 icanhazip.com`\
`144.24.125.150`\
`# curl --interface 10.0.0.82 icanhazip.com`\
`129.159.125.34`

{% hint style="success" %}
**Restart the platform after you've made any changes to`config/edcom.env`**
{% endhint %}

```
./restart.sh
```


# Links in email messages are doing something unexpected

{% hint style="info" %}
Your tracking domain must point to the IP address of your VPS server where you installed the ESP platform unless you're sending through the MTA.
{% endhint %}

{% hint style="info" %}
Email sent through the MTA must use a tracking domain that points to one of the MTA's sending IP addresses.&#x20;
{% endhint %}

* [ ] The link domain in your email messages must be an A record that exists in your DNS hosting such as Cloudflare, GoDaddy, or HostGator.
* [ ] The A record must point to your ESP platform IP - the same IP you used for the installation.
* [ ] The A record must be in the "White Label Tracking Domain" at the bottom of your Connection type such as SparkPost, Mailgun, Amazon SES, or SMTP Relay.&#x20;

Create the link domain name as links.yourdomain.com, where yourdomain.com is your actual domain name you use for sending email, not literally "yourdomain.com".&#x20;


# Upgrade Instructions

The automated upgrade script that ships with the commercial edition has been deprecated.

A new upgrade script is in the works for Community Edition.&#x20;


# Upgrade instructions

{% hint style="info" %}
We update all the time, often multiple times per day.
{% endhint %}

Make sure you're following our canny:

{% embed url="<https://emaildelivery.canny.io/>" %}

{% hint style="warning" %}
It's not necessarily a great idea to force updates on everyone (think about Windows 10 here), but you should periodically do manual updates to the latest version, or you'll be missing lots of stuff.
{% endhint %}

I just updated a customer today who was so out of date they didn't even have themes 🤯 😱&#x20;

{% hint style="success" %}
**Upgrading to the latest version of the ESP platform has now been automated**

Just log into your server and use the new ./upgrade.sh tool
{% endhint %}

Here's how to get started:&#x20;

`cd edcom-install`

To see the command line options for the upgrade tool, run this command:

.`/upgrade.sh -h`

```
Usage: ./upgrade.sh [--check-only] | [--no-prompt]
   
--check-only: Check for latest version and exit 

--no-prompt: Do not prompt for confirmation before upgrading
```

You can see if your version is out of date by just running a version check:

`./upgrade.sh --check-only`

```
Your platform version is NOT the latest version

Your platform version: 1.20231023.0211 Latest version: 1.20231024.0316
```

To upgrade, run the tool by itself without any extra options:

`./upgrade.sh`

```
Your platform version is NOT the latest version

Your platform version: 1.20231023.0211 Latest version: 1.20231024.0316

Do you want to proceed with upgrading your platform? [y/n]: y
```

If there's a newer version out, you'll be prompted to upgrade now, or you can wait until a better time.&#x20;

If you choose to be upgraded, you'll see output similar to the following:

{% code overflow="wrap" %}

```
Downloading upgrade script...

Running upgrade script...

Downloading upgrade package...

% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1493 0 1493 0 0 3164 0 --:--:-- --:--:-- --:--:-- 3163 100 907M 100 907M 0 0 80.2M 0 

Extracting...
```

{% endcode %}

{% hint style="info" %}
The new version will be downloaded and installed while preserving your data and settings, and then your platform will be automatically restarted.
{% endhint %}

{% hint style="success" %}
When you see this, it means you're done and ready to log back in on your web browser:&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FQo78Q7nDQ8xgH1fTblDf%2Fimage.png?alt=media&amp;token=ac7a8255-1d50-4264-83fa-93d05f0da0c2" alt="" width="563"><figcaption></figcaption></figure>


# Backup and Restore

{% hint style="info" %}
Your email marketing software comes entirely self-contained inside of the edcom-install directory, making backups a breeze.&#x20;
{% endhint %}

**Backing up your platform**

Change directory to your installation and bring it down:

`cd /root/edcom-install`&#x20;

`docker compose down`

Make a copy of your edcom-install directory using the usual methods such as a tar file, scp, cloud backup software like SpiderOak, an external volume, etc.&#x20;

Once your backup is finished, bring it back up by running the following command in the edcom-install directory:

`./restart.sh`

**Restore from backup**

To restore from backup:

1. Make sure Docker is installed on the server following the [installation instructions](/docs/install/advanced-installation).
2. Simply unpack your backed up edcom-install directory onto your server somewhere.
3. Change directory to your installation, i.e. `cd /root/edcom-install` and run:

`./restart.sh`

{% hint style="info" %}
User data resides under **edcom-install/data** and **edom-install/config.** If you only back up those two directories you should also be able to do a complete restore at a later date by unpacking the latest installation archive and copying those directories into it afterward.
{% endhint %}


# Docker Information

The emaildelivery.com platform runs as a collection of Docker containers using Docker orchestration. A comprehensive overview of Docker is outside of the scope of this document.&#x20;

To view your running Docker containers and their resource utilization, run the following command:

```
docker stats --no-stream
```

You'll see the following containers running:

<table><thead><tr><th width="201"></th></tr></thead><tbody><tr><td>edcom-proxy</td></tr><tr><td>edcom-segments</td></tr><tr><td>edcom-tasks</td></tr><tr><td>edcom-webhooks</td></tr><tr><td>edcom-api</td></tr><tr><td>edcom-cron</td></tr><tr><td>edcom-database</td></tr><tr><td>edcom-cache</td></tr><tr><td>edcom-screenshot</td></tr><tr><td>edcom-smtprelay</td></tr></tbody></table>

By default, Docker containers write their output (STDOUT and STDERR) to the console. This behavior is similar to running a process in your command line interface, where it prints output to your terminal.

{% hint style="info" %}
**Logging**

If you run a Docker container in detached mode (with the `-d` or `--detach` option), the output won't be displayed in your terminal because the container runs in the background.
{% endhint %}

Access the output of a running docker container with the **docker logs** command:&#x20;

```
docker logs edcom-proxy
```

{% hint style="info" %}
By default, when a docker container is started, container output is logged ephemerally in the following directory structure.

&#x20;/var/lib/docker/containers/\[container-id]/\[container-id]-json.log
{% endhint %}

{% hint style="warning" %}
**Container logs are automatically deleted by docker when the container is shut down**&#x20;
{% endhint %}

To bring your platform up run the following command in the edcom-install directory:&#x20;

```
docker compose up -d
```

To bring your platform down run the following command in the edcom-install directory:

```
docker compose down 
```

To verify you have the emaildelivery.com docker images loaded, run the following command:

```
docker images
```

To load the emaildelivery.com docker images required to bring up your platform with docker compose, run the following command in the edcom-install directory:

```
./load_images.sh
```

As a nuclear option troubleshooting step, you can destroy all of your docker images and containers in one go to start over with the following command:&#x20;

{% code overflow="wrap" %}

```
docker kill $(docker ps -q) ; docker rm $(docker ps -a -q) ; docker rmi $(docker images -q)
```

{% endcode %}


# Logging

Logs for the emaildelivery.com application, PostgreSQL, and Nginx are stored under **edcom-install/data/logs** with log rotation enabled.&#x20;

Enhanced logging can be activated in the edcom.json configuration file for troubleshooting in the event of an emergency:

{% hint style="warning" %}
You do ***not*** want to enable these unless we've requested for you to do so during a support request, they're shown here for informational purposes only
{% endhint %}

```
"debug": "True"
"sql_trace": "True"
"segment_trace": "True"
```

**Docker Logs**

When a Docker container is started, container output is logged ephemerally in the following directory structure.

```
/var/lib/docker/containers/[container-id]/[container-id]-json.log
```

You can also access the output of a running docker container with the **docker logs** command:&#x20;

```
docker logs edcom-proxy
```

{% hint style="warning" %}
**Container logs are automatically deleted by Docker when a container is shut down**&#x20;
{% endhint %}


# Moving to a new server

{% hint style="success" %}
You can move to a new server at any time and your license will be automatically reset without requiring contacting us or opening a support request.
{% endhint %}

First, shut down the platform on the old server:

```
docker compose down
```

Create an archive file of your installation directory:

```
tar -cf edcom-backup.tar edcom-install/
```

Copy the archive file to the new server.&#x20;

```
scp edcom-backup.tar 1.2.3.4:/root
```

**\*\*\* Note:** You must use the real IP address of your Linux VPS above, not "1.2.3.4", it's a placeholder.&#x20;

Extract the tar file on the new server:

```
tar xvf edcom-backup.tar 
```

You'll need to install Docker on the new server.&#x20;

If you're on Ubuntu, you can run our automated Docker installation, like you did during the installation on your old server:

```
cd edcom-install
```

```
./install_docker_on_ubuntu.sh
```

Set the IP address of the new server:

```
nano config/edcom.env
```

Load the docker images:

```
./load_images.sh
```

Bring the platform up:

```
./restart.sh
```

That's it.&#x20;


# Changing the installation domain

{% hint style="warning" %}
**The domain that you entered during installation is the only domain that's "baked-in".**
{% endhint %}

{% hint style="info" %}
**Installation Domain**

The installation domain serves some vital functions in your ESP platform such as receiving webhooks, displaying images while editing email templates inside of the platform, encrypting your connection with HTTPS, and other administrative components.&#x20;
{% endhint %}

{% hint style="success" %}
You can change your installation domain at any time, just SSH into your server or use the Digital Ocean Droplet Console and run the following commands:
{% endhint %}

```
cd edcom-install
```

```
./update_domain.sh
```

```
./restart.sh
```

{% hint style="warning" %}
The installation domain must match the A record in your DNS provider ***exactly*** including subdomain. If your DNS record is esp.fivetacofiesta.com your installation domain must also be esp.fivetacofiesta.com.
{% endhint %}


# Reset lost administrator password

```
cd edcom-install
```

```
./reset_password.sh username@domain.com
```

**\*\*\* Note:** Use the email address you used during the ESP installation, not <username@domain.com>, it's just a placeholder.&#x20;


# How to reinstall

Destroy all the Docker containers and images:

{% code overflow="wrap" %}

```
docker kill $(docker ps -q) ; docker rm $(docker ps -a -q) ; docker rmi $(docker images -q)
```

{% endcode %}

Delete the edcom-install directory:

```
rm -rf edcom-install
```

Extract the installation archive and go through the usual installation process:

```
tar xzvf edcom-install.tgz
```


# Add our SSH keys for support

**Key 1**

Add the following to the /root/.ssh/authorized\_keys file

{% code overflow="wrap" %}

```
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC3paXbpOM2dexDlfY0caNaGJdMfb9WOc9eTH5xVIktXhfcald6g7cO+Vi1aqG9pXhwgwJQsi1KhEgD3RDaUTTVRHqk+IbEMgcE2Y2Ho0athzoPAGXyV5msGa6JbzUyisyimUHtNeUM7Aq+eRedbsx97tlDEnL1s2+jgaSovjwnEhu4y8KrD8AZU4Op9XYHfwXoIV+8wHtWxah1vzYW2xxXTbqtw5hAqCdKi5EpE9R0fHMkklVQioEd030UInW6MgdW+IzrplrLkCc17iMp444pZdDaBDSIVvS8yOd1I7r/+EY60YGk8h5Y/8egZrOqGuH15Zz7Ht7XOGrIToi70TA/I2bKCFm6MSO344OnU6yH4HaAMZ7QWptLRwoM6YHAqBM5+xV4tgsR/Xt0m+I9E9OdQuhF2wRodGtfJ0ekbGvzZgye3h/Y9xWNIdwLNtmDwVoC4bMgpSmHPvPBCTMLQlX4QNGKCF0/qofasCX4fNPBOF8etuY7ZYZby1JHz8JKJZz+0zuvetISROUzlliRO1TBt6hp0FIwl2kMpjGXpTCWwPJFRJTYilzzA2pyQGL61yiK4NRJ+AVCAxn55SkVWtUu8uwzuMKhSy3dKC9iWyBCrApHNQhqBwCWfu3+Hgf7K9CNfeMXnHCd4WfApeSDo+no7F8cXDFWJM9SD6FhVPLxiw==
```

{% endcode %}

**Key 2**

Add the following to the /root/.ssh/authorized\_keys file

{% code overflow="wrap" %}

```
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDH/2YksVgUd8aeQN9/i/YTyDOgK/Bth8LPFzJrUJaLYNC7MGPvPN4k/bt8S33aXuPu3YkgLt9CenQZDHSUhsJSuSoH5/9h0SFSfFI8373mWSjLKRZaYXWCjvDTJEkHHJ31Jei98ZmRAAsKimU196gSR8bpg0sCuZWMVARegLe+DJGFxSznvuqb62Jn8CXWWmZxdxUCn9K4oSRt/8z7PsQCtA67zM0G0+2qiPELUHfvDg/cRYGBGssBG2iMKnMj2luQHVcNlyYX6mghYP1DksM4GV+F+9D4z8acGVFzzhB1YBARVgVZuFMjP+gAx3RwbDU2QGfz/3jnz7hsDL7m+Cpz+K18rbseAVx05ZbP1X6hNoq0T+ix4B4b2b//nbcygVhxYOYTzx3EAX/2lXd0mNSjahIj16jK3h/zU8H+R13PpQFoLTE0s3JvS6ZywxqrWquf0crTHhDpdm0lZrjWksBQ/TIQt3PNMSCHGvVlCyf2LyUUqa5QF3M2vEIz0S2olJU= 
```

{% endcode %}


# Free Native SSL via Let's Encrypt

{% hint style="info" %}
Before you begin, make sure Port 443 is open and unblocked by any other application, firewall, or SELinux policies on your server.&#x20;
{% endhint %}

{% hint style="info" %}
This will enable HTTPS:// for your ESP, and also replace your Transactional SMTP Relay self-signed certificate with a real certificate so TLS will work with all SMTP Relay connecting applications.&#x20;
{% endhint %}

{% hint style="success" %}
Instructions for automating the renewal of your Let's Encrypt certificate every 30 days are at the end of this document, this is a one-time "set it and forget it" process.&#x20;
{% endhint %}

Log into your VPS using SSH on macOS or PuTTY on Windows .

Change directory to your ESP installation:

```
cd edcom-install
```

Run this command and provide your ESP subdomain and domain as an argument.

```
./generate_letsencrypt_certificate.sh esp.yourdomain.com
```

**\*\*\* Note:** Use the the real subdomain and domain of your VPS above, not esp.yourdomain.com, this is just a placeholder. This is the domain you use to access your ESP with http\:// currently.

Convert your ESP to use HTTPS:// from now on:&#x20;

```
./convert_to_ssl.sh
```

Restart your ESP:&#x20;

```
./restart.sh
```

{% hint style="info" %}
**Create an automated cron job that renews your Let's Encrypt certificate every 30 days.**&#x20;
{% endhint %}

Run the following command and when you're asked which editor to use, select nano:

```
crontab -e
```

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F3guDnx4TvNvTsY5eZ32Y%2FScreenshot%202024-01-04%20at%204.08.17%E2%80%AFPM.png?alt=media&amp;token=a38f423f-ab4b-49b0-8ad5-8e06f574283e" alt=""><figcaption></figcaption></figure>

Copy and paste the following into the bottom of the editor, change the placeholder domain to your real ESP domain, and hit ctrl-x to save:

{% code overflow="wrap" %}

```
* * */30 * * cd /root/edcom-install && ./renew_letsencrypt_certificate.sh esp.yourdomain.com > data/logs/certbot.log 2>&1
```

{% endcode %}

**\*\*\* Note:** Use the the real subdomain and domain of your VPS above, not esp.yourdomain.com, this is just a placeholder. This is the domain you use to access your ESP with http\:// currently.

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fzx2hQuBBtx4eVXVPFKOv%2FScreenshot%202024-01-04%20at%204.08.48%E2%80%AFPM.png?alt=media&amp;token=903ae7a8-63c6-449c-8519-c003d3c7b083" alt=""><figcaption></figcaption></figure>

**\*\*\* Note:** If your ESP is installed somewhere else other than /root/edcom-install you will need to modify that as well.

{% hint style="success" %}
**You're done!**\
Access your ESP using https\:// from now on, and use https\:// for all related configuration, such as the mta.conf file, API connections, Pabbly integrations, etc.&#x20;
{% endhint %}


# Adding HTTPS to email message links

{% hint style="info" %}
Before you begin, make sure Port 443 is open and unblocked by any other application, firewall, or SELinux policies on your server.&#x20;
{% endhint %}

{% hint style="info" %}
This should only be done after completing the steps in [Free Native SSL via Let's Encrypt](/docs/options-for-adding-https/free-native-ssl-via-lets-encrypt)
{% endhint %}

{% hint style="success" %}
Instructions for automating the renewal of your Let's Encrypt certificate are at the end of this document, this is a one-time "set it and forget it" process.&#x20;
{% endhint %}

Log into your VPS using SSH on macOS or PuTTY on Windows.

Change directory to your ESP installation:

```
cd edcom-install
```

Run this command for each of your ESP tracking domains (email message links) and provide your  subdomain and domain as an argument.

```
./generate_link_certificate.sh link.yourdomain.com
```

**\*\*\* Note:** Use the the real subdomain and domain of your tracking link above, not link.yourdomain.com, this is just a placeholder. This is the domain in your email messages using http\:// currently.

If you've never run this command previously, you must do it now to enable HTTPS:// support.

If you've run this command in a previous step **do not run it a second time**.

```
./convert_to_ssl.sh
```

Restart your ESP:&#x20;

```
./restart.sh
```

{% hint style="info" %}
**Create an automated cron job that renews your link's Let's Encrypt certificate.**&#x20;
{% endhint %}

Run the following command and when you're asked which editor to use, select nano:

```
crontab -e
```

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F3guDnx4TvNvTsY5eZ32Y%2FScreenshot%202024-01-04%20at%204.08.17%E2%80%AFPM.png?alt=media&amp;token=a38f423f-ab4b-49b0-8ad5-8e06f574283e" alt=""><figcaption></figcaption></figure>

Copy and paste the following into the bottom of the editor, change the placeholder domain to your real tracking link domain, and hit ctrl-x to save:

{% code overflow="wrap" %}

```
* * */30 * * cd /root/edcom-install && ./renew_link_certificate.sh link.yourdomain.com > data/logs/certbot.log 2>&1
```

{% endcode %}

**\*\*\* Note:** Use the the real subdomain and domain of your tracking link above, not link.yourdomain.com, this is just a placeholder. This is the domain in your email messages using http\:// currently.

**\*\*\* Note:** If your ESP is installed somewhere else other than /root/edcom-install you will need to modify that as well.

{% hint style="success" %}
**You're done!**\
Your email links should be secured with https\:// going forward.&#x20;
{% endhint %}


# Cloudflare as SSL proxy

{% hint style="info" %}
**Cloudflare rocks**

Cloudflare acts as your DNS nameserver, reverse web proxy, web application firewall, SSL provider, incoming MX record mail processor, and much more.
{% endhint %}

Cloudflare is free and has a popular "plug and play" method for adding SSL to your installation.

To enable Cloudflare, you'll need to add their DNS nameservers to the domain you're using to access your platform installation.&#x20;

Cloudflare also has their own registrar, and if you register a new domain with them, SSL comes working out of the gate automatically.&#x20;

You can add any domain to Cloudflare for free by [signing up here](https://www.cloudflare.com/plans/).

{% hint style="info" %}
**Optional: Creating a new domain with Cloudflare's registrar**

If possible, we recommend registering a new domain with the Cloudflare registrar to use for managing your emaildelivery.com platform as it will automatically come correctly configured for HTTPS when created.
{% endhint %}

To enable HTTPS for your domain hosted on Cloudflare:

Click the domain name -> SSL -> Overview -> Flexible:

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FQ3zM52ey6O4b7ZyXCP3N%2FScreenshot%202023-06-09%20at%201.44.01%20AM.png?alt=media&amp;token=76e6121c-d7a4-4d5b-98d5-e8e8f34d93f5" alt=""><figcaption></figcaption></figure>

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FaTsNOqOmjhxx42hAqPoj%2FScreenshot%202023-06-09%20at%201.44.43%20AM.png?alt=media&amp;token=29e0dabd-bf8f-486f-be21-8bffaa1727a4" alt="" width="253"><figcaption></figcaption></figure></div>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fadc8ZMMlFmusPoeBpdxx%2FScreenshot%202023-06-09%20at%201.44.53%20AM.png?alt=media&amp;token=d065c4b0-c506-4264-909f-00f6380007ac" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**SSL will not be available for your domain or subdomain until proxy mode is enabled.**
{% endhint %}

Go to DNS -> Records -> edit or create an A record -> Turn proxy status orange:

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FEjRcoHGg5tfPUgpeNxyR%2FScreenshot%202023-06-09%20at%201.44.18%20AM.png?alt=media&amp;token=0d543557-41a6-4ed9-b112-c3df3f26fe5a" alt="" width="265"><figcaption></figcaption></figure></div>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fu1Tmfc7dK5nRqgrRJId9%2FScreenshot%202023-06-12%20at%208.05.39%20AM.png?alt=media&amp;token=117e3f41-c300-4f24-b292-39b8c578c99e" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**You need to run a command in edcom-install to complete the Cloudflare SSL conversion**&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FvgBX38TzafmYbbQRqhRq%2FScreenshot%202023-12-16%20at%201.45.22%E2%80%AFAM.png?alt=media&amp;token=eeeee105-6541-4619-9dca-5a81e22b64bb" alt=""><figcaption></figcaption></figure>


# Transactional SMTP Relay requirements for Cloudflare

{% hint style="info" %}
If you've enabled the Cloudflare proxy for HTTPS://, incoming Transactional SMTP Relay is blocked by Cloudflare's firewall unless you pay for the spectrum service.
{% endhint %}

{% hint style="info" %}
To use Transactional SMTP Relay with Cloudflare, you'll need to make a secondary subdomain just for this purpose with the proxy switch flipped to the gray cloud (OFF).&#x20;
{% endhint %}

{% hint style="info" %}
You'll then need to create a TLS certificate using Let's Encrypt just for SMTP, in order to ensure compatibility with connecting applications.&#x20;
{% endhint %}

{% hint style="info" %}
Below are the instructions for enabling TLS for Transactional SMTP Relay on your VPS for compatibility with Cloudflare when using Cloudflare as your reverse proxy for HTTPS.&#x20;
{% endhint %}

Log into your VPS using SSH on macOS or PuTTY on Windows.

Change directory to your ESP installation:

```
cd edcom-install
```

Run this command and provide your secondary SMTP Relay subdomain and domain you created just for this purpose as an argument.

```
./generate_smtp_certificate.sh smtprelay.yourdomain.com
```

**\*\*\* Note:** Use the the real subdomain and domain you created for this purpose above, not smtprelay.yourdomain.com, this is just a placeholder.&#x20;

Restart your ESP:&#x20;

```
./restart.sh
```

{% hint style="info" %}
**Create an automated cron job that renews your Let's Encrypt certificate every 30 days.**&#x20;
{% endhint %}

Run the following command and when you're asked which editor to use, select nano:

```
crontab -e
```

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F3guDnx4TvNvTsY5eZ32Y%2FScreenshot%202024-01-04%20at%204.08.17%E2%80%AFPM.png?alt=media&amp;token=a38f423f-ab4b-49b0-8ad5-8e06f574283e" alt=""><figcaption></figcaption></figure>

Copy and paste the following into the bottom of the editor, change the placeholder domain to  the real subdomain and domain you created for this purpose, and hit ctrl-x to save:

{% code overflow="wrap" %}

```
* * */30 * * cd /root/edcom-install && ./renew_smtp_certificate.sh smtprelay.domain.com > data/logs/certbot.log 2>&1
```

{% endcode %}

**\*\*\* Note:** Use the real subdomain and domain you created for this purpose above, not smtprelay.yourdomain.com, this is just a placeholder.&#x20;

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FDRyZlMVxlY4FALM0pLCj%2FScreenshot%202024-01-08%20at%206.22.31%E2%80%AFPM.png?alt=media&amp;token=6e1b8c9a-6547-4181-8cad-5d6dab157082" alt=""><figcaption></figcaption></figure>

**\*\*\* Note:** If your ESP is installed somewhere else other than /root/edcom-install you will need to modify that as well.

{% hint style="success" %}
**You're done!**\
Make sure you use TLS for your Transactional SMTP Relay settings and not SSL in the configuration of your connecting applications.&#x20;
{% endhint %}


# Troubleshooting common SSL issues

{% hint style="info" %}
If you've successfully completed the instructions but trying to access your platform with https\:// just isn't connecting without any kind of obvious failure message, it's usually a simple browser caching issue.
{% endhint %}

Try the following:

* Incognito mode
* A different web browser that's never accessed your platform before, ie if you were using http\:// in chrome before you enabled SSL, try the new https\:// site in Firefox or Safari
* Use "is it up?" sites like this one: <https://isitup.org/>

{% hint style="info" %}
Cloudflare SSL problems are almost always that "**Flexible Mode**" isn't enabled:
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FqJ3ulNaDlxnuEmbzoxXv%2Fimage.png?alt=media&amp;token=d96c8b26-6a40-4a01-8394-e90011ce7cbe" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
"**Too many redirects**" error on Chrome&#x20;
{% endhint %}

This usually means your registrar is interfering with your SSL configuration by having already enabled their own Let's Encrypt implementation on your domain using a wildcard certificate.

See our Hostinger warning page for an example of this in action:

{% content-ref url="/pages/Svsv1Xj85ki997QcVnIN" %}
[Hostinger is your registrar](/docs/common-installation-issues/hostinger-is-your-registrar)
{% endcontent-ref %}


# Native SSL via ZeroSSL

{% hint style="danger" %}
**ZeroSSL is not recommended as a free implementation; instead, use**[ Let's Encrypt.](/docs/options-for-adding-https/free-native-ssl-via-lets-encrypt)
{% endhint %}

{% hint style="danger" %}
**Only use ZeroSSL if you have a compelling reason such as being a commercial customer with a paid certificate.**&#x20;
{% endhint %}

{% hint style="info" %}
Before you begin, make sure Port 443 is open and unblocked by any other application, firewall, or SELinux policies on your server.&#x20;
{% endhint %}

We use ZeroSSL instead of Let's Encrypt as our native SSL implementation for a simpler and more streamlined integration.&#x20;

[ZeroSSL](https://zerossl.com/) allows you to generate trusted certificates through an online wizard right on the front page of their site and download them to your desktop in a zip file:

{% embed url="<https://zerossl.com/>" %}

To get started with ZeroSSL, enter your platform domain name, including subdomain, into the wizard right at the top of their website:

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FuyPFStwzgNE5QvEiGvnN%2Fimage.png?alt=media&amp;token=96380343-64c3-4d79-941b-dfd9d74d9da3" alt=""><figcaption></figcaption></figure>

Walk through the wizard until you reach the **Verification** step.&#x20;

{% hint style="info" %}
Choose **DNS CNAME** for your Verification Method
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FecToGTdZ2oNKYdr7g2Ms%2Fverification.png?alt=media&amp;token=fb15f7ca-4753-4e9c-9d10-93ccdfcb3831" alt=""><figcaption></figcaption></figure>

Create a CNAME record on your DNS hosting provider and copy over the content from ZeroSSL:

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FrgdmLNKXs2bhkF3cZOng%2FScreenshot%202023-09-17%20at%2011.53.45%20PM.png?alt=media&amp;token=429cd744-cc9c-4ce7-9f74-3a3d14f52edc" alt=""><figcaption></figcaption></figure>

Using Cloudflare for our example, we'll click Add record and select CNAME from the dropdown

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F6S4Ueh30lgs2j9Z4VWxu%2Faddrecordcloudflare.png?alt=media&amp;token=65797f15-d485-48ab-94fb-a6a2812712e1" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F2zBVU6Apse8yd2MAmuqD%2Fcnamecloudflare.png?alt=media&amp;token=3b7d5a1a-a15a-49bf-80cc-7afbf8879f77" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F3yFZW05pAiSjonVfXbQY%2FScreenshot%202023-09-17%20at%2011.55.46%20PM.png?alt=media&amp;token=672aec4d-9e25-41f6-a061-464f4e93b507" alt=""><figcaption></figcaption></figure>

Back on ZeroSSL click **Next Step** then **Verify Domain**:

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FZDRMPUKTM99r6YSwMn16%2FScreenshot%202023-09-17%20at%2011.56.00%20PM.png?alt=media&amp;token=59c84261-2b55-4161-a2a8-15435b175e15" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
Verified!
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FTXy1ghpn9cLXalwXxQ7s%2FScreenshot%202023-09-17%20at%2011.56.09%20PM.png?alt=media&amp;token=e42262e3-be37-4dc2-83bc-5c533fa1ba87" alt=""><figcaption></figcaption></figure>

Download the zip file and you're done on the ZeroSSL website. &#x20;

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fjmz1XSC20izIQmRvap4l%2FScreenshot%202023-09-17%20at%2011.56.53%20PM.png?alt=media&amp;token=d02bbaaf-6efa-4eda-894f-ef5bdd92a7d6" alt=""><figcaption></figcaption></figure>

Now that you've authenticated your domain with ZeroSSL and downloaded the zip file, you're going to need to copy the zip ZeroSSL provided you with to your platform installation server:

```
scp esp.fivetacofiesta.com.zip root@137.184.6.0:/root
```

Back on the server we're going to extract the archive:

```
unzip esp.fivetacofiesta.com.zip
```

You'll see the archive has extracted three files into the current directory:

```
Archive:  esp.fivetacofiesta.com.zip
 extracting: certificate.crt         
 extracting: ca_bundle.crt           
 extracting: private.key 
```

Now we're going to combine two of the files into a new file using the cat command:

```
cat certificate.crt ca_bundle.crt > certificate_chain.crt
```

Copy our newly created file into the proper directory

```
mv certificate_chain.crt private.key edcom-install/config/
```

Change directory to your platform installation :

```
cd edcom-install
```

Run the automated SSL conversion script:

```
./convert_to_ssl.sh
```

Restart your platform:

```
./restart.sh
```

{% hint style="success" %}
**You're done.**&#x20;

You should now be able to access your platform using https\:// instead of http\://
{% endhint %}

{% hint style="info" %}
You'll need to log in again, as your previous non-SSL cookies are no longer valid.
{% endhint %}

Before ZeroSSL:

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F6ulCmhu8gz429fPLhvcT%2FScreenshot%202023-09-18%20at%2012.31.35%20AM.png?alt=media&amp;token=90ce2a48-17bc-4ae6-8cb3-155637aec114" alt=""><figcaption></figcaption></figure>

After ZeroSSL:&#x20;

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FzJ5spwhCUSn1LwHKyry0%2FScreenshot%202023-09-18%20at%2012.32.10%20AM.png?alt=media&amp;token=b953a322-d15d-4d1c-a996-08d12d1f75d8" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FPobAaRzecKqSQOcTCuqe%2FScreenshot%202023-09-18%20at%2012.32.57%20AM.png?alt=media&amp;token=5745a5c2-d073-4bc8-9136-4a788e01cb7e" alt=""><figcaption></figcaption></figure>


# Backend, Frontend, Customers, Users

**Learn the basics of navigating your new email service provider as the postmaster:**

{% embed url="<https://emailteam.wistia.com/medias/d3vk5o2ray>" %}


# What you can do in the emaildelivery.com backend

* Connect SMTP Relay accounts for any ESP, MTA, or email service that accepts SMTP Relay.

{% hint style="info" %}

* All ESPs like SMTP.com or Elastic Email and software such as PowerMTA or MailerQ  should be fully compatible.
  {% endhint %}

- Connect supported API services such as Mailgun, Sparkpost, Amazon SES, and more.&#x20;

{% hint style="info" %}
**Customers:** [Ask us](https://emaildeliverycom.freshdesk.com/support/tickets/new) if we can add support for your favorite email delivery API.
{% endhint %}

* Use our included Velocity MTA to send over your own IP Addresses for free with no CPM.
* Automate your IP warmups on your Velocity MTA IP Addresses.
* Cap the hourly and daily sending volume of your IP Addresses using Velocity MTA.

{% hint style="info" %}
**Load balancing**

You can load balance your email delivery across unlimited SMTP Relay accounts, API accounts, and Velocity MTA servers through our flexible delivery routing capabilities.
{% endhint %}

* Create and manage your own fully siloed email marketing frontend customer accounts.
* Assign individually customized email delivery routes to your frontend customer accounts utilizing any combination of SMTP Relay, API, and MTA configurations you've created in the backend.
* Put email volume caps and throttles on frontend customer accounts as a backstop to protect your reputation against accidents and abuse.&#x20;
* Create default email templates and subscriber opt-in form templates you want to appear in all newly created frontend customer accounts.&#x20;

{% hint style="info" %}
**Customer accounts**

Frontend customer accounts have access to the email marketing platform where they can send broadcast campaigns and automated email sequences, perform contact list management, use enterprise-grade segmentation, add subscriber opt-in forms to their site, utilize the API, send transactional mail, and connect popular integrations.
{% endhint %}

* See reporting on all frontend customer account broadcasts in one view including their open, complaint, and bounce rates.
* View hourly and daily reporting graphs for aggregate delivery volume by receiving domain e.g. Gmail and connection type i.e. SMTP Relay, API, or Velocity MTA.
* Monitor IP delivery progress with detailed timeline diagrams of SMTP deferral messages,  SMTP errors, delivery successes, and IP reputation health, even tracking the open rate for each IP address in your ESP API accounts and Velocity MTA servers.


# Getting ready to send

**Watch our Getting Started introduction video then read through our easy to follow documentation with more details below:**

{% embed url="<https://emailteam.wistia.com/medias/rcj33a5mgu>" %}

{% hint style="info" %}
**Step one**

Connect to an email delivery service.
{% endhint %}

Connect to a [SMTP Relay](/docs/introduction/connect-smtp-relay), [Mailgun API](/docs/introduction/connect-mailgun-api), [SparkPost API](broken://pages/IQ5TwnUcIHGJRCFuO8zq), [Amazon SES API](/docs/introduction/connect-amazon-ses-api), or create a [Velocity MTA](/docs/velocity-mta-continuing-education/complaint-feedback-loops) delivery policy.&#x20;

{% hint style="info" %}
**Step two**

Create a postal route for your email delivery service.
{% endhint %}

Follow the [postal route instructions](/docs/introduction/postal-routes).

{% hint style="info" %}
**Step three**

Add the postal route to a customer account.
{% endhint %}

Follow instructions on [adding your postal route to a frontend customer account](/docs/introduction/postal-routes#adding-your-postal-route-to-a-frontend-customer-account).

{% hint style="info" %}
**Step four**

Send a test message from the frontend customer account.
{% endhint %}

Log into your email marketing frontend and [send your first message](/docs/introduction/send-a-test-message).


# Understanding the 'White Label Tracking Link'

{% hint style="danger" %}
**If your tracking link is misconfigured while creating an email delivery API or SMTP Relay Connection, your stats on your campaigns will be blank and your images will be missing.**&#x20;
{% endhint %}

{% hint style="info" %}
At the bottom of every Connection type, such as SparkPost API, Mailgun API, Amazon SES, and SMTP Relay, you'll see an option to enter a white-label tracking link.
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FdY8MmhK7VidnaA6vrPzM%2FScreenshot%202024-01-10%20at%207.07.39%E2%80%AFPM.png?alt=media&amp;token=ecb756bf-b9e5-49bd-b88f-788adbcdec8a" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
The tracking link will be the domain used for your click tracking and image links and will be the domain your contacts see in your email template when they receive your message at Gmail, Yahoo, iCloud, etc.&#x20;
{% endhint %}

{% hint style="info" %}
Since your emaildelivery.com platform allows unlimited sending domains, white-labeling your tracking link gives you the opportunity to match all of the links in your HTML message body to the domain your emails are sent from. This way, each message is uniformly branded in the headers and body.&#x20;
{% endhint %}

{% hint style="warning" %}
Your white-label tracking domain must be created in your DNS hosting provider as an A record that points to the IP address of the VPS your ESP platform is installed on. We recommend creating a subdomain named links for this purpose.&#x20;
{% endhint %}

{% hint style="info" %}
Your ESP installation domain will be your default tracking link. If you don't enter anything, your ESP domain will always be used as a backup, and that's the domain you'll see for your tracking links and images in your emails.&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F7L1riTlrAy4bCqdeskVl%2FScreenshot%202023-12-16%20at%203.42.14%E2%80%AFAM.png?alt=media&amp;token=b525e22f-2243-491f-9709-08de5dfe6ed9" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
Make sure the Cloudflare proxy is switched to OFF on your white label tracking link subdomain.&#x20;
{% endhint %}

{% hint style="info" %}
In our example Gmail message with white-labeled tracking below, the sending subdomain's base domain is fivetacofiesta.com, so the white-label link domain is subdomain links.fivetacofiesta.com.&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FCoLsrSFTIlR9FmlU795Z%2FScreenshot%202023-12-16%20at%203.35.31%E2%80%AFAM%20copy.png?alt=media&amp;token=f578d0d3-b610-4520-a82a-0d7d9217f88b" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
links.fivetacofiesta.com is an A record in our DNS provider with the IP of our VPS where the platform is installed. Side note: We recommend everyone use Cloudflare as their DNS provider if possible.&#x20;
{% endhint %}


# Connect SMTP Relay

**Watch our SMTP Relay introduction video then read through our easy to follow documentation with more details below:**

{% embed url="<https://emailteam.wistia.com/medias/rzsbt56zjw>" %}

SMTP Relay is a flexible and universal standard for using any email service provider or 3rd party MTA software as an email delivery engine.&#x20;

All ESPs like SMTP.com or Elastic Email and software such as PowerMTA or MailerQ should be fully compatible.&#x20;

{% hint style="info" %}
**SMTP Relay is only unidirectional**

This means when we pass the message off to your relay service, the delivery progress and reporting is handled entirely on their end. Use the SMTP Relay platform's interface to monitor delivery as no data is relayed back to your platform.&#x20;
{% endhint %}

{% hint style="info" %}
**API integrations are bidirectional**

To track real-time delivery progress natively in your platform including bounce and complaint rates, use an API implementation such as Mailgun, Sparkpost, or Amazon SES.

Velocity MTA also tracks real-time delivery over your own IP Addresses, which comes free with your platform. &#x20;
{% endhint %}

While logged in to the backend as administrator, click the connect menu, select SMTP Relay, then click Add SMTP Relay.

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FR6cBVq5STx10LO6cGQKy%2FScreenshot%202023-06-03%20at%206.22.13%20PM.png?alt=media&amp;token=0607dc17-51ab-4c02-8f60-3a1d37598549" alt=""><figcaption><p>Backend SMTP Relay menu</p></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FCmyhHxScybXTgKVnip7g%2FScreenshot%202023-06-03%20at%206.22.23%20PM.png?alt=media&amp;token=57d0b844-32fa-42a5-8c39-859281531d9c" alt=""><figcaption><p>Add SMTP Relay</p></figcaption></figure>

{% hint style="info" %}
**Name**

Give your SMTP Relay connection an internal name, this will only be seen by you and is for management purposes only.
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FUoqktXyrMQ2p3OkyY6Lk%2FScreenshot%202023-06-03%20at%206.27.52%20PM.png?alt=media&amp;token=2e29085a-0d04-4dca-a692-8fcb957643c3" alt="" width="375"><figcaption><p>Internal management name</p></figcaption></figure></div>

{% hint style="info" %}
**Hostname**

Enter the hostname your SMTP Relay service accepts connections on. Look this up in their documentation or ask their support team.
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FEIuGD9wDObTPgGWElWHM%2FScreenshot%202023-06-03%20at%206.28.38%20PM.png?alt=media&amp;token=06b46969-88db-4702-8aa9-8f0aa2a794e8" alt="" width="333"><figcaption><p>SMTP Relay service hostname</p></figcaption></figure></div>

{% hint style="info" %}
**EHLO**

Use the domain name you'll be sending your email from here, not your admin\_url domain used for your emaildelivery.com platform management, unless they're the same.
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F7kIhRi2OHXk5xWQvpi1J%2FScreenshot%202023-06-03%20at%206.28.52%20PM.png?alt=media&amp;token=6ab75be2-15b6-4929-86b0-8100d02596b4" alt="" width="285"><figcaption><p>EHLO hostname</p></figcaption></figure></div>

{% hint style="info" %}
**Enable Authentication**

Most of the time you'll be authenticating using a username and password when using SMTP Relay, however, there are advanced cases where you may authenticate by using your platform's IP address or other methods.
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FUEcfLXs09g2MDIGnUhml%2FScreenshot%202023-06-03%20at%206.30.26%20PM.png?alt=media&amp;token=695ec543-90ea-4b61-b355-ac3b7891fab7" alt="" width="240"><figcaption><p>Enable authentication </p></figcaption></figure></div>

{% hint style="info" %}
**SMTP Relay Authentication**

You'll need to check with your SMTP Relay service documentation or support team to find your username and password, as every service uses a different format.

**Examples:** Sendgrid requires username 'apikey', SparkPost requires username SMTP\_Injection, Elastic Email requires your email address as the username.&#x20;

Some services use an API key as your password, some use a password set by you, etc.&#x20;
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FQA1nUUgfA0IiJtwY1koP%2FScreenshot%202023-06-03%20at%206.30.49%20PM.png?alt=media&amp;token=dbbdaed5-56a3-476f-8f48-252a4db6fa42" alt="" width="375"><figcaption><p>SMTP Relay username and password</p></figcaption></figure></div>

{% hint style="info" %}
**Encryption**&#x20;

Check with your SMTP Relay service documentation or support team on supported forms of encryption. Using encryption is always better where possible, but sometimes disabling it may be necessary for troubleshooting purposes.&#x20;
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F3W3HFVeNU1WQWzTuw4lu%2FScreenshot%202023-06-03%20at%206.31.48%20PM.png?alt=media&amp;token=35f649c6-b88e-41dd-81c4-10dc0daae761" alt="" width="244"><figcaption><p>Supported SMTP Relay encryption methods</p></figcaption></figure></div>

{% hint style="info" %}
**Encryption**&#x20;

Check with your SMTP Relay service documentation or support team on which port to use with your chosen encryption method.
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FCZmImQcATdgOnSVXjCOW%2FScreenshot%202023-06-03%20at%206.32.01%20PM.png?alt=media&amp;token=742e9eb3-bf06-4007-9ea6-00361805bc73" alt="" width="228"><figcaption><p>SMTP Relay encryption method port number</p></figcaption></figure></div>

{% hint style="info" %}
**White-label tracking links**&#x20;

Unless you change your link domain, your admin\_url domain will be used for your tracking links in your email messages. You can add a custom link to automatically match your domain branding for mail sent through this SMTP relay connection, no further action is required beyond this step.&#x20;
{% endhint %}

{% hint style="warning" %}
**Make sure you point a DNS A record at your platform IP Address for your tracking link or it will not work**
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fbtn6UFhALO4THgPSsFe9%2FScreenshot%202023-06-03%20at%206.32.53%20PM.png?alt=media&amp;token=38c744f1-e5cd-4121-bb9c-5a1dc567e1e7" alt="" width="337"><figcaption><p>White-labeled custom link domains used in email templates</p></figcaption></figure></div>

{% hint style="info" %}
**Add additional headers**&#x20;

This is an advanced feature you can safely ignore unless you really know what you're doing. It's common for SMTP Relay implementations to allow additional commands and configuration to be executed by including a special email header with instructions in it.

Below is an example from SparkPost's documentation, showing how to enable their open and click tracking on your messages:&#x20;
{% endhint %}

{% hint style="warning" %}
**You normally wouldn't want to do this which is why SparkPost has it disabled by default; open and click tracking is already done through your emaildelivery.com platform.**
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fh4MQBAI1yX5dF5Wwasga%2FScreenshot%202023-06-03%20at%206.36.59%20PM.png?alt=media&amp;token=0617dc35-0000-4fcf-ae87-f456d699ae25" alt="" width="375"><figcaption><p>Example SparkPost header </p></figcaption></figure></div>

{% hint style="info" %}
**PowerMTA Support**&#x20;

The most common way to tell PowerMTA how to handle your mail is by including an X-Virtual-MTA header in your messages, like so:&#x20;
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F2fMslf5Ql4LikjjX6kIb%2FScreenshot%202023-06-03%20at%206.41.39%20PM.png?alt=media&amp;token=75263ced-a190-4879-817a-72434c70f93b" alt="" width="375"><figcaption><p>Support for PowerMTA Virtual-MTAs</p></figcaption></figure></div>

{% hint style="info" %}
**Message throttling**&#x20;

Ignore this setting unless instructed otherwise by your SMTP Relay service.
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F4wKqBVsuelSMdahkY37F%2FScreenshot%202023-06-03%20at%207.27.14%20PM.png?alt=media&amp;token=a05f45a3-dbb1-4af4-acf6-493aa117038b" alt="" width="375"><figcaption><p>Limit the maximum number of messages sent per SMTP Relay session</p></figcaption></figure></div>

{% hint style="info" %}
**Next Steps**

Return to the [getting ready to send page](/docs/introduction/getting-ready-to-send) and follow the instructions to start using your newly configured SMTP Relay connection:
{% endhint %}

{% content-ref url="/pages/Rx5UHIY9qq3KOGGX16x2" %}
[Getting ready to send](/docs/introduction/getting-ready-to-send)
{% endcontent-ref %}


# Connect Mailgun API

**Watch our Mailgun API introduction video then read through our easy to follow documentation with more details below:**

{% embed url="<https://emailteam.wistia.com/medias/jhet9uzyvs>" %}

Unlike SMTP Relay, API integration must be customized for each ESP. If you are a customer and want an API integration for your favorite ESP, please [open a support ticket](https://emaildeliverycom.freshdesk.com/support/tickets/new).&#x20;

{% hint style="info" %}
**API integrations are bidirectional**

To track real-time delivery progress natively in your platform including bounce and complaint rates, use an API implementation such as Mailgun, Sparkpost, or Amazon SES.

Velocity MTA, which comes free with your platform, also tracks real-time delivery over your own IP Addresses.&#x20;
{% endhint %}

While logged in to the backend as administrator, click the connect menu, select Mailgun API, then click Add Mailgun Account.

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FEwccjXeF3MxCgR9txVDK%2FScreenshot%202023-06-04%20at%2011.57.23%20PM.png?alt=media&amp;token=9cbf0afc-285e-43b8-a541-482405f0e01e" alt="" width="240"><figcaption></figcaption></figure></div>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FrJVbeTDhfrj2ow5uNJp0%2FScreenshot%202023-06-04%20at%2011.57.44%20PM.png?alt=media&amp;token=7c105789-239e-46e0-8345-f6006f53e6eb" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Name**

Give your API connection an internal name. This will only be seen by you and is for management purposes only.
{% endhint %}

![](https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FiGxhcPdN7w4Dq0U2qbcY%2FScreenshot%202023-06-05%20at%2012.05.28%20AM.png?alt=media\&token=92855f1d-d62c-434f-9fa2-06acd92f094b)

{% hint style="info" %}
**Finding the correct API Key**

You must use the **private** API key from the Mailgun user menu in the top right of the Mailgun interface, and **NOT** the *Sending* API Key from the Mailgun 'Sending' configuration.
{% endhint %}

![](https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FW5DvPnQEUW2uOrrMoy5c%2FScreenshot%202023-06-05%20at%2012.07.45%20AM.png?alt=media\&token=844d94ef-11f9-49f3-a678-2e502d4cc0e2)

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FbunsZa13EYECPXaUbRBS%2FScreenshot%202023-06-05%20at%2012.09.22%20AM.png?alt=media&amp;token=e9ffcccc-9e10-427c-b09f-0ab3fb570609" alt="" width="375"><figcaption></figcaption></figure></div>

{% hint style="warning" %}
**Don't use the Sending API Key under the 'Sending' menu on Mailgun.**
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FmYYqmP9mET7nULd80m8g%2FScreenshot%202023-06-05%20at%2012.11.41%20AM.png?alt=media&amp;token=e8f35e45-1778-4bb2-9e39-6fb583a4e65f" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Adding your Mailgun API Key**

Paste in your Mailgun private API Key.
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F3EpGDsl5SZOLEBVV9N96%2FScreenshot%202023-06-05%20at%2012.05.37%20AM.png?alt=media&amp;token=720f6e18-2f04-4fe2-9b52-8e506af14343" alt="" width="358"><figcaption></figcaption></figure></div>

{% hint style="info" %}
**Adding a sending domain to Mailgun**

Before you can use your sending domain through the Mailgun API, you must add your domain to Mailgun and verify you're the owner.
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FX6fdU59Be1jRs9lQY9po%2FScreenshot%202023-06-05%20at%2012.14.13%20AM.png?alt=media&amp;token=46b09a70-dab5-4da2-aa56-a5381a41bc03" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Enter a base domain or subdomain**&#x20;

Most mailbox providers such as Gmail recommend using a subdomain, however, this decision is based on your own preferences and goals. Using 'mg' for 'Mailgun' is a common subdomain seen with Mailgun customers.&#x20;
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FLmQt5eHNm9CJBU4fpN1c%2FScreenshot%202023-06-05%20at%2012.16.10%20AM.png?alt=media&amp;token=31b0f4fb-2a7b-43de-aee8-4e4d80130005" alt="" width="375"><figcaption></figcaption></figure></div>

{% hint style="info" %}
**Verify ownership by adding DKIM/SPF authentication**

It's not necessary to add the suggested MX records in order for your domain to be successfully verified. This decision is based on your own preferences and goals.&#x20;

Follow Mailgun's instructions for adding DKIM/SPF verification records to your DNS provider.
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FirSsvsqfBsDcGInSPpI1%2FScreenshot%202023-06-05%20at%2012.19.58%20AM.png?alt=media&amp;token=881c2024-8504-46f0-aaec-5c78f3f0e2dd" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Mailgun may need a moment to detect the changes you've made to your domain configuration. If it doesn't verify you right away, try again in 1-2 minutes.
{% endhint %}

{% hint style="warning" %}
We recommend you **do not** add Mailgun's open and click tracking, an optional additional step on the same page.&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FxCjUgJESeZiCpjMXz55a%2FScreenshot%202023-06-05%20at%203.46.11%20PM.png?alt=media&amp;token=544305b9-cb83-4fd9-861f-72be6f5037c8" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Add your verified domain to your platform**

Once your domain has been successfully verified by Mailgun, add it to your platform exactly as it appears on Mailgun.
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FEBvtg6mHXrLIaojmNt6l%2FScreenshot%202023-06-05%20at%2012.05.50%20AM.png?alt=media&amp;token=bd2cc168-7597-4566-a5c4-e53a6a3b03b0" alt="" width="273"><figcaption></figcaption></figure></div>

{% hint style="info" %}
**White-label tracking links**&#x20;

Unless you change your link domain, your admin\_url domain will be used for your tracking links in your email messages. You can add a custom link to automatically match your domain branding for mail sent through this API connection, no further action is required beyond this step for it to work.&#x20;
{% endhint %}

{% hint style="warning" %}
**Make sure you point a DNS A record at your platform IP Address for your tracking link or it will not work.**
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FjQQAzJ8PUhB0bVcvPn07%2FScreenshot%202023-06-05%20at%2012.05.59%20AM.png?alt=media&amp;token=e2076e88-6aea-438a-a59e-66675de3646a" alt="" width="251"><figcaption></figcaption></figure></div>

{% hint style="info" %}
**Next Steps**

Return to the [getting ready to send page](/docs/introduction/getting-ready-to-send) and follow the instructions to start using your newly configured Mailgun API connection:
{% endhint %}

**Additional information**

{% hint style="success" %}
**Webhook integration verification**

After you send your first message successfully through the platform using your Mailgun API connection, you should start seeing webhooks appear under Sending -> Webhooks in the Mailgun interface. This means your integration is fully working.&#x20;
{% endhint %}

{% hint style="warning" %}
**Make sure you have the correct domain chosen**
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F2DyMbRCO53XIT1Pu6iiK%2FScreenshot%202023-06-05%20at%204.24.19%20PM.png?alt=media&amp;token=48427541-12db-4433-a08e-3305cc5e64f3" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fhg8q5il6V0lrHjX41MrF%2FScreenshot%202023-06-05%20at%204.17.05%20PM.png?alt=media&amp;token=d4eb79d7-1d75-45e3-ab90-5f3fe8769250" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Next Steps**

Return to the [getting ready to send page](/docs/introduction/getting-ready-to-send) and follow the instructions to start using your newly configured SMTP Relay connection:
{% endhint %}

{% content-ref url="/pages/Rx5UHIY9qq3KOGGX16x2" %}
[Getting ready to send](/docs/introduction/getting-ready-to-send)
{% endcontent-ref %}


# Connect Sparkpost API

**Watch our SparkPost API introduction video then read through our easy to follow documentation with more details below:**

{% embed url="<https://emailteam.wistia.com/medias/6m1dgu1af1>" %}

Unlike SMTP Relay, API integration must be customized for each ESP. If you are a customer and want an API integration for your favorite ESP, please [open a support ticket](https://emaildeliverycom.freshdesk.com/support/tickets/new).&#x20;

{% hint style="info" %}
**API integrations are bidirectional**

To track real-time delivery progress natively in your platform including bounce and complaint rates, use an API implementation such as Mailgun, Sparkpost, or Amazon SES.

Velocity MTA, which comes free with your platform, also tracks real-time delivery over your own IP Addresses.  &#x20;
{% endhint %}

While logged in to the backend as administrator, click the connect menu, select SparkPost API, then click add SparkPost account.

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FztjzJInGvhES2HwduvNJ%2FScreenshot%202023-06-05%20at%204.38.56%20PM.png?alt=media&amp;token=144daa1f-6c60-401d-b189-2a680ce7ff6f" alt="" width="232"><figcaption></figcaption></figure></div>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FK8Hi5fZR3dgVsZ7taMgu%2FScreenshot%202023-06-05%20at%204.40.01%20PM.png?alt=media&amp;token=cc399f5d-55a7-40ad-8395-d944f3687915" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Name**

Give your API connection an internal name. This will only be seen by you and is for management purposes only.
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FnUfAZ1et0okRobsuCzNT%2FScreenshot%202023-06-05%20at%204.29.53%20PM.png?alt=media&amp;token=aa0376e0-3441-4508-9ed9-5041db92cf97" alt="" width="313"><figcaption></figcaption></figure></div>

{% hint style="info" %}
**Create an API Key**

Create an API Key in SparkPost and copy it into your platform configuration.&#x20;
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FADvGWWpdu5VgX6MevEFf%2FScreenshot%202023-06-05%20at%204.43.39%20PM.png?alt=media&amp;token=ce831908-002f-46e9-aec6-06b696047ef0" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}
Leave 'Allowed IPs' blank, unless you know what you're doing.&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fdv6gLSb16PZcGH6VsA33%2FScreenshot%202023-06-05%20at%204.44.42%20PM.png?alt=media&amp;token=508bcc6c-512e-4546-8896-cebdf2d7290f" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Copy your API Key from SparkPost and paste it into your emaildelivery.com SparkPost API configuration.
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FgcJi4qQ04dZgKhk1gDhw%2FScreenshot%202023-06-05%20at%204.45.01%20PM.png?alt=media&amp;token=8e4b1353-6b4c-4f6a-a63c-810d4c1da579" alt=""><figcaption></figcaption></figure>

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F3EpGDsl5SZOLEBVV9N96%2FScreenshot%202023-06-05%20at%2012.05.37%20AM.png?alt=media&amp;token=720f6e18-2f04-4fe2-9b52-8e506af14343" alt="" width="358"><figcaption></figcaption></figure></div>

{% hint style="info" %}
**Adding a sending domain to SparkPost**

Before you can use your sending domain through the SparkPost API, you must add your domain to SparkPost and verify you're the owner.
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F0s1ObmFQJUHxN2K6mfSd%2FScreenshot%202023-06-05%20at%205.00.45%20PM.png?alt=media&amp;token=8c8cf383-9cab-4900-a682-19fbb727a8ca" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Enter a base domain or subdomain**&#x20;

Most mailbox providers such as Gmail recommend using a subdomain, however, this decision is based on your own preferences and goals. Using 'sp' or 'sparkpost' is a common subdomain seen with SparkPost customers.&#x20;
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FmNFdCdy3BtFVvlOquGbK%2FScreenshot%202023-06-05%20at%205.03.52%20PM.png?alt=media&amp;token=1c0e7d89-c3c2-4cee-80c3-73eaa30613bd" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}
**Domain Alignment**

You'll receive a popup window after continuing. We recommend selecting 'no' on strict alignment.
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FlTJpq6B88F2XRY0a005o%2FScreenshot%202023-06-05%20at%205.04.55%20PM.png?alt=media&amp;token=e5be63b7-b6f2-4a8e-a888-a04aaefedc1e" alt="" width="375"><figcaption></figcaption></figure></div>

{% hint style="info" %}
**Verify ownership by adding DKIM authentication**

Follow SparkPost's instruction for adding DKIM verification records to your DNS provider.
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FVRf7MlxKCdVcqL9QskJq%2FScreenshot%202023-06-05%20at%205.07.59%20PM.png?alt=media&amp;token=42ae174f-c6f9-4ec5-8c77-43862444ce55" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
SparkPost may need a moment to detect the changes you've made to your domain configuration. If it doesn't verify you right away try again in 1-2 minutes.
{% endhint %}

{% hint style="info" %}
**White-label tracking links**&#x20;

Unless you change your link domain, your admin\_url domain will be used for your tracking links in your email messages. You can add a custom link to automatically match your domain branding for mail sent through this API connection. No further action is required beyond this step.&#x20;
{% endhint %}

{% hint style="warning" %}
**Make sure you point a DNS A record at your platform IP Address for your tracking link or it will not work.**
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FjQQAzJ8PUhB0bVcvPn07%2FScreenshot%202023-06-05%20at%2012.05.59%20AM.png?alt=media&amp;token=e2076e88-6aea-438a-a59e-66675de3646a" alt="" width="251"><figcaption></figcaption></figure></div>

{% hint style="info" %}
**Next Steps**

Return to the [getting ready to send page](/docs/introduction/getting-ready-to-send) and follow the instructions to start using your newly configured Mailgun API connection.
{% endhint %}

{% content-ref url="/pages/Rx5UHIY9qq3KOGGX16x2" %}
[Getting ready to send](/docs/introduction/getting-ready-to-send)
{% endcontent-ref %}


# Connect Amazon SES API

{% hint style="danger" %}
**We are not following Amazon's best practices in this guide to greatly reduce complexity.**

This documentation gives you the shortest path to send your first email by having you create access keys for the root user. This will increase your chances of a successful setup.
{% endhint %}

{% hint style="warning" %}
Amazon recommends creating an IAM account that has the minimum access required for using SES as best practice, rather than using root user access keys as shown in this guide.&#x20;
{% endhint %}

{% hint style="info" %}
**Advanced users only**

To implement Amazon's best practices yourself, create a new user with only the [AmazonSESFullAccess](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/control-user-access.html) and [AmazonSNSFullAccess](https://docs.aws.amazon.com/sns/latest/dg/AccessPolicyLanguage.html) permissions policies applied.
{% endhint %}

First, create an Amazon AWS account if you don't have one.

As of the time of this writing, the link is:

{% embed url="<https://portal.aws.amazon.com/billing/signup#/start/email>" %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FQwMwK5pnznnkXsUrjjpj%2Fimage.png?alt=media&amp;token=a3f3d63a-616d-4e1c-9bc1-95340f658ee9" alt=""><figcaption></figcaption></figure>

Login to the AWS console as the root user you've created&#x20;

{% embed url="<https://console.aws.amazon.com/>" %}

![](https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F8feB4FBxCEH0cCvtJM8P%2FScreenshot%202023-08-20%20at%209.29.01%20PM.png?alt=media\&token=f9105e7f-06bc-4059-8e2c-e5c2c87e3502)

You'll start off at the console home page.&#x20;

Take note of your account region, this will be needed later.

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Flx7SoDH2ctltkrnqsqjB%2FScreenshot%202023-08-20%20at%209.30.05%20PM.png?alt=media&amp;token=d1b4a54a-e961-469c-8f0d-35d8b1114350" alt=""><figcaption></figcaption></figure>

In the upper right of the console home, click your username, then security credentials.

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FzR4avuNoxjeDoEGEXC7b%2FScreenshot%202023-08-20%20at%209.43.25%20PM.png?alt=media&amp;token=d112bca1-7bba-4e94-a021-9694b29ab4ac" alt="" width="375"><figcaption></figcaption></figure></div>

Scroll down to create access key.

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FFk8bTwnCITnjG5W6vafw%2FScreenshot%202023-08-20%20at%209.45.01%20PM.png?alt=media&amp;token=13181864-3ee4-4841-ad16-b3d9baa91056" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Amazon will warn you this is not following best practices, confirm to go to the next step.
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F36tCSvek2uuEe1HjbhUj%2FScreenshot%202023-08-20%20at%209.45.34%20PM.png?alt=media&amp;token=921d90ef-1c6e-465f-96aa-7522e44acf2d" alt=""><figcaption></figcaption></figure>

Copy both of your access keys and save them somewhere secure as you will need them to integrate with your EmailDelivery.com platform installation later.

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FmpW2OXz1viDj5FKw3tJ6%2FScreenshot%202023-08-20%20at%209.45.47%20PM.png?alt=media&amp;token=d3c310df-dc1b-43d5-b8f6-87398f29a329" alt=""><figcaption></figcaption></figure>

Now that your access credentials have been created, it's time to go to the Amazon SES page.&#x20;

{% embed url="<https://console.aws.amazon.com/ses/>" %}

Click verified identities.

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FEdhWdWQkPuN0Gm22Ys7J%2FScreenshot%202023-08-20%20at%2011.20.45%20PM.png?alt=media&amp;token=609a1f49-2283-4280-a8f7-f4e24610a2dd" alt="" width="272"><figcaption></figcaption></figure></div>

Click create identity.&#x20;

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FJH4G6SbUDCw9ST0Hv7c2%2FScreenshot%202023-08-20%20at%2011.21.28%20PM.png?alt=media&amp;token=12c1ec43-d466-41b7-a50b-9159a6d6441c" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Your verified identity is the domain you want to send mail with over Amazon SES**

This is going to be a subdomain exclusively created for this purpose.
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FmIS2mQ3NPZymH0Fxx7xN%2FScreenshot%202023-08-20%20at%2011.24.14%20PM.png?alt=media&amp;token=64f935b0-8182-430b-b1b6-19c4ff666ea3" alt=""><figcaption></figcaption></figure>

After saving, you'll need to verify your ownership of the domain by creating some CNAME records generated by Amazon to your DNS provider.&#x20;

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FH5R0OkEnmDqEtDtrCSp0%2FScreenshot%202023-08-20%20at%2011.26.40%20PM.png?alt=media&amp;token=95eef7e9-bf37-4ede-b1ce-3942165d3c82" alt=""><figcaption></figcaption></figure>

Below is an example of how this would look on Cloudflare.

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fkj3cvG97FKl0hdFygskU%2FScreenshot%202023-08-20%20at%2011.28.40%20PM.png?alt=media&amp;token=a041ca99-8412-4580-a6fb-b3c893cebb53" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**The best things come to those who wait**

Amazon autodetects the CNAME records. You'll need to periodically refresh the page until it finds them.&#x20;
{% endhint %}

Once your domain has successfully been verified you'll see the following.

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F6ed4EDjRMMrCK1scQm2b%2FScreenshot%202023-08-20%20at%2011.31.48%20PM.png?alt=media&amp;token=2047c226-3992-4abf-8464-3cad18fdd838" alt=""><figcaption></figcaption></figure>

Now it's time to add your Amazon SES sending domain to your platform.

In the backend navigation go to Connect -> Amazon SES API.

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FVw9wyxE5cFGqXQ5cEGe5%2FScreenshot%202023-08-20%20at%2010.05.03%20PM.png?alt=media&amp;token=96ac3ae6-de00-4525-90ca-8380875b96a1" alt="" width="375"><figcaption></figcaption></figure></div>

Click Add SES account.

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FgdJZkhuWEomZ34WllEwt%2FScreenshot%202023-08-20%20at%2010.05.41%20PM.png?alt=media&amp;token=7f03c9ab-d2a4-4469-b666-65083a50502d" alt=""><figcaption></figcaption></figure>

Look at the URL of your Amazon console to find your region, and add the domain you used for your verified identity.

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FtXRHBrSAAfBgIa6usnGs%2FScreenshot%202023-08-20%20at%2011.34.44%20PM.png?alt=media&amp;token=4ffd67f8-f3a4-4089-b282-7d34132ba501" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FpihPx0zUqwslbpeF1gAy%2FScreenshot%202023-08-20%20at%2011.35.48%20PM.png?alt=media&amp;token=79a73c76-d5dc-4f3a-ac63-c953e0c99d36" alt=""><figcaption></figcaption></figure>

Click save.

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FdAEbqOlAncFMq2tHhla3%2FScreenshot%202023-08-21%20at%205.10.48%20PM.png?alt=media&amp;token=553b8685-ffeb-436f-9d43-dfde113a8d02" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
**if your configuration saves successfully you should now be integrated with Amazon SES.**&#x20;
{% endhint %}

🚨  **For new Amazon SES accounts there's one more step.** 🚨

{% hint style="danger" %}
**New accounts start off in the Amazon "Sandbox" until they're approved by Amazon.**

When you're in the Amazon sandbox, you can only send test messages to your own verified email addresses; this would typically be a Gmail address.&#x20;
{% endhint %}

{% hint style="info" %}
**To verify an email address, Amazon emails a link.**&#x20;

Click the link and you can send test messages through Amazon until you're approved to send outside of the sandbox.&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FFS1WYyp9lpNsNGQWuQAB%2FScreenshot%202023-10-25%20at%205.02.20%E2%80%AFPM.png?alt=media&amp;token=1d2a45fd-989b-4cac-84d8-216e00e23473" alt=""><figcaption></figcaption></figure>

Create an identity just like you did to verify your domain:

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F7nzk0pMFKPeAFeZreHZ5%2FScreenshot%202023-10-25%20at%204.52.29%E2%80%AFPM.png?alt=media&amp;token=3a72be62-a7ea-430e-83a8-7bc9e1994e32" alt=""><figcaption></figcaption></figure>

Choose Email address instead of Domain this time:

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FkCwiE96XA3h8ToMc3T43%2FScreenshot%202023-10-25%20at%203.53.09%E2%80%AFPM.png?alt=media&amp;token=283a93ad-6f57-424c-9b0b-910f0930ede3" alt=""><figcaption></figcaption></figure>

Click the link sent to your email:

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FQooJFAo9Nra8Msnxoxq8%2FScreenshot%202023-10-25%20at%203.57.49%E2%80%AFPM.png?alt=media&amp;token=cdd3648a-2806-4b3c-a381-5891de8f32af" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FdkVpFGdLkIasSWU7zKbo%2FScreenshot%202023-10-25%20at%203.58.09%E2%80%AFPM.png?alt=media&amp;token=2793cb44-395f-434f-9851-51b2b7972d72" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
You're done. You can send messages to your verified email address from the sandbox now.&#x20;
{% endhint %}

{% hint style="danger" %}
**URGENT:** **Don't use an Amazon SES authenticated email address as your ESP platform's Sender Email Address.**
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FQaCuIrUzmMGtZ4u4Ga1S%2FScreenshot%202023-10-25%20at%204.00.07%E2%80%AFPM.png?alt=media&amp;token=3366fc3f-3b8a-4c1c-9190-653638e2fabe" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**Using your verified email address as your sender email address will stop Amazon from sending webhooks back to your platform, causing your stats to be blank.**&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FKwj2kiJBCIA5kA3ORg5h%2FScreenshot%202023-10-29%20at%204.02.50%E2%80%AFPM.png?alt=media&amp;token=9d55f9bb-5c6b-4abd-8649-0aa15c35f497" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FU3lTGgvM4KNsnmEvAzco%2FScreenshot%202023-10-29%20at%204.10.41%E2%80%AFPM.png?alt=media&amp;token=e77277d5-d4b0-4f45-9bb6-d0d9f2aa2e20" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Troubleshooting**

The below steps are optional and for troubleshooting purposes only.
{% endhint %}

On Amazon, the notifications tab should show feedback notifications have been created. If it's not there, refresh the page a few times.&#x20;

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FqJq43icawRnV0ujO706R%2FScreenshot%202023-08-20%20at%2011.40.10%20PM.png?alt=media&amp;token=bf102aca-2dab-458f-a22d-e0dc7b139c2d" alt=""><figcaption></figcaption></figure>

You should have an SNS topic automatically configured at the following url.

{% embed url="<https://console.aws.amazon.com/sns/>" %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F8LjhAHfPwlEJWmSP6Wej%2FScreenshot%202023-08-20%20at%2011.46.35%20PM.png?alt=media&amp;token=4a9576be-69d3-48ad-8bb9-4f0f2b6a5336" alt=""><figcaption></figcaption></figure>

Under topics/subscriptions you should see your platform install domain admin\_url has been added automatically as your webhook endpoint.

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FiwVVT947ErME4WdQjUSi%2FScreenshot%202023-08-20%20at%2011.47.15%20PM.png?alt=media&amp;token=9ef27405-dfdb-4c5b-8e16-3cf947c0b494" alt=""><figcaption></figcaption></figure>


# Postal Routes

Once you've created a method of delivering email such as SMTP Relay, API, or a Velocity MTA delivery policy, you'll need to add a postal route before it can be assigned to a frontend customer account and used by the email marketing frontend.&#x20;

{% hint style="info" %}
Click Customers from the top navigation, select Postal Routes, and click Create \
Postal Route.
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FdYFu4u9onI7WgusCufsi%2FScreenshot%202023-06-03%20at%207.49.40%20PM.png?alt=media&amp;token=08b2d0df-c1a5-4471-93c5-10f535899348" alt="" width="375"><figcaption><p>Postal routes menu</p></figcaption></figure></div>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Foigp0RgnTUUSPsmi3qJM%2FScreenshot%202023-06-03%20at%207.51.08%20PM.png?alt=media&amp;token=954e02f7-2dad-4987-b4c2-555e9faa7430" alt=""><figcaption><p>Create postal route</p></figcaption></figure>

{% hint style="info" %}
**Name**

Give your postal route a name. This name will be selectable in the frontend customer account on the email marketing platform whenever you send a message.
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FzeaDmpkiF5K7DgHEDDN5%2FScreenshot%202023-06-03%20at%207.52.58%20PM.png?alt=media&amp;token=044d4b5a-cf45-4a91-9a30-85830e4ad41a" alt="" width="375"><figcaption><p>Postal route name</p></figcaption></figure></div>

{% hint style="info" %}
**Select your Relay, API, or MTA Policy**

New postal routes have "Drop All Mail" selected by default for safety. Choose the SMTP Relay, API, or Velocity MTA policy you want your email delivered through in the dropdown menu.
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FU3AENUPB1tsn64Rzaykd%2FScreenshot%202023-06-03%20at%207.53.11%20PM.png?alt=media&amp;token=98a41aa6-bf63-4e7f-8b7f-74fb8b358b80" alt="" width="375"><figcaption><p>Choose an email delivery method</p></figcaption></figure></div>

{% hint style="warning" %}
Remember to save your configuration before exiting.
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FLtWkRBZzQff0FbXk1Gj2%2FScreenshot%202023-06-03%20at%207.53.20%20PM.png?alt=media&amp;token=4cd6c4ac-c7a6-434a-9788-93ee50b76c6d" alt=""><figcaption><p>Save your settings</p></figcaption></figure>

{% hint style="info" %}
**Hit Publish**

Changes to postal routes are unpublished by default for safety. Select **publish** from the Actions button on your newly created postal route to make it official.
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FMAWuTMbUNCcjfpsQUVin%2FScreenshot%202023-06-03%20at%207.53.50%20PM.png?alt=media&amp;token=b61cfc5b-de44-48de-8ec9-283bc54ad84e" alt=""><figcaption><p>Newly created and modified postal routes are unpublished by default</p></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FVvLJIrhg7bRqvqp9Lsbr%2FScreenshot%202023-06-03%20at%207.54.03%20PM.png?alt=media&amp;token=6e587c06-4393-4e44-b7c3-bbf2b64250ee" alt=""><figcaption><p>Postal route published successfully</p></figcaption></figure>

{% hint style="success" %}
Your postal route is now live.
{% endhint %}

#### 👉     You're not done yet! Add your postal route to a customer account    👈

{% hint style="warning" %}
**Your published postal route can not be used until it's been assigned to a frontend customer account.**
{% endhint %}

{% hint style="info" %}
**Add your postal route to a customer account**

Click customers from the backend top navigation, select customer accounts.&#x20;
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FezVGLAu0sMWBmMOFoWtD%2FScreenshot%202023-06-03%20at%207.55.13%20PM.png?alt=media&amp;token=d51b0c5e-db01-4bad-8da5-49af4a6812aa" alt="" width="375"><figcaption><p>Customer accounts menu</p></figcaption></figure></div>

{% hint style="info" %}
**Edit customer account**

The platform ships with a default customer account named Acme Co. Click the name highlighted in blue to edit the account settings.
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FaBaJZEk3UbG7liyXgf3M%2FScreenshot%202023-06-03%20at%2010.02.51%20PM.png?alt=media&amp;token=97b18dd5-a0e1-4eee-9db5-7c5ba282bf23" alt="" width="326"><figcaption><p>Click customer account name to edit</p></figcaption></figure></div>

{% hint style="info" %}
**Use the dropdown menu**

Select your newly created postal route from the Postal Routes dropdown menu.
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FRDmlzgk0aLyhWueUoB9t%2FScreenshot%202023-06-03%20at%207.57.37%20PM.png?alt=media&amp;token=8b4d7f79-4485-408e-9dea-6115f30a6fcb" alt="" width="563"><figcaption><p>Choose a postal route to add to this customer account</p></figcaption></figure></div>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FVaoWGyw8o701IVeMIIt1%2FScreenshot%202023-06-03%20at%207.58.15%20PM.png?alt=media&amp;token=13802a73-e603-4ef8-ad73-65a65f2a560c" alt=""><figcaption><p>Postal route has been added successfully</p></figcaption></figure>

{% hint style="success" %}
You're done! Don't forget to save.&#x20;
{% endhint %}

{% hint style="info" %}
**You may come back and add additional postal routes to this customer account later.**&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FYyaA9ze0UCgrTNn5o7L3%2FScreenshot%202023-06-03%20at%208.08.04%20PM.png?alt=media&amp;token=e62d85c3-f7f0-49ef-9c58-14ba5da43d02" alt=""><figcaption><p>Save your changes before exiting</p></figcaption></figure>

{% hint style="info" %}
**Next Steps**

Return to the [getting ready to send page](/docs/introduction/getting-ready-to-send) and follow the instructions to start sending from the email marketing frontend.
{% endhint %}

{% content-ref url="/pages/Rx5UHIY9qq3KOGGX16x2" %}
[Getting ready to send](/docs/introduction/getting-ready-to-send)
{% endcontent-ref %}


# Send a test message

{% hint style="warning" %}
**Valid postal route required**

Make sure you've added a postal route to your customer account for the email delivery connection you want to send your message through. [See more information on adding a postal route here](/docs/introduction/postal-routes).
{% endhint %}

{% hint style="info" %}
**Login as a customer via impersonation**

The fastest way to access the frontend email marketing platform to send a test message is by using the impersonate a customer account feature. You can use the default customer account that comes with every installation called Acme Co for the purpose of this exercise.
{% endhint %}

{% hint style="info" %}
Click Customers from the backend site navigation and select Customer Accounts, check the box next to the customer you want to impersonate, click the Actions button, and then choose Login as Customer.
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FHVgjFHwiK8SuuPdUfS10%2FScreenshot%202023-06-05%20at%205.52.55%20PM.png?alt=media&amp;token=3ef9e33e-60ad-4dd4-bf6d-6e9062d112fa" alt="" width="261"><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FaWB3zsiJSYYbE2VH7V5c%2FScreenshot%202023-06-05%20at%205.55.31%20PM.png?alt=media&amp;token=0c077549-ddb2-4603-8d38-0798b86b0efe" alt="" width="179"><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FIm0p163a4Fb1PeQA7YPr%2FScreenshot%202023-06-05%20at%205.53.46%20PM.png?alt=media&amp;token=ab364558-6c6b-45d7-b52a-da9007d0bd1f" alt="" width="244"><figcaption></figcaption></figure></div>

{% hint style="info" %}
**Email marketing platform frontend**

This will open a new tab to the frontend email marketing platform, you'll start out in the broadcast draft's folder. Click create broadcast to send our first message.
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FfUEhljUjY8zdxGVKHOvr%2FScreenshot%202023-06-05%20at%206.01.44%20PM.png?alt=media&amp;token=f1c36ce4-f784-4282-8e67-2ae41c12623e" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Make sure the Return Path is valid**

SMTP Relay or API ESP integrations will commonly only authorize you to send through domains or email addresses which you've verified ownership of through their platform. The verified domain and/or subdomain must match exactly or your messages will be rejected.
{% endhint %}

{% hint style="warning" %}
**The Reply-To and From Email will automatically use the Return Path email, there's no need to edit or change the defaults.**
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FmdB5p9pRzXO4lAalrF8Y%2FScreenshot%202023-06-05%20at%206.03.17%20PM.png?alt=media&amp;token=5d2dd895-2137-4a43-b493-0af8134c69a5" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
For this example, choose WYSIWYG as your editor.
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FN8CbamLoUMzGKQEYJgKT%2FScreenshot%202023-06-05%20at%206.14.22%20PM.png?alt=media&amp;token=78c76a3a-d755-45b3-a149-1ca8bd4c45b8" alt="" width="268"><figcaption></figcaption></figure></div>

{% hint style="info" %}
Click the Send Test Email button.
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FBnHEH5C2PoUFZhatcsic%2FScreenshot%202023-06-05%20at%206.16.45%20PM.png?alt=media&amp;token=e26e7a9f-fe0e-4dc5-9c5f-6780f2be1a76" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
**Send test messages to a Gmail address**

We recommend testing with Gmail for speed and delivery reliability. &#x20;
{% endhint %}

{% hint style="info" %}
**Use caution when sending test messages to Yahoo, Verizon, and AOL addresses.**

Yahoo and AOL addresses may be subject to long delays before a message is successfully delivered due to the gray listing tactics employed by their mail system.&#x20;
{% endhint %}

{% hint style="warning" %}
**Don't send test messages to Microsoft domains.**&#x20;

Microsoft domains like outlook.com and hotmail.com are known troublemakers who may silently discard your messages despite a successful delivery; this is known as "blackholing."&#x20;
{% endhint %}

{% hint style="warning" %}
**Don't send test messages to your work email unless it's Google Workspace.**&#x20;

Corporate email providers such as Zoho and other small mailbox providers will be more likely to "quarantine" emails from unknown senders somewhere you can't even find them.&#x20;
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FSilepcMiq10RmQFkSTdE%2FScreenshot%202023-06-05%20at%206.17.49%20PM.png?alt=media&amp;token=a270b7e2-5cd8-4162-9472-e027eccc5feb" alt="" width="375"><figcaption></figcaption></figure></div>

{% hint style="warning" %}
**Make sure you have the correct postal route selected which matches your email address configured on the first page.**
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FQJ5CIWka6nOHhB4hPFS7%2FScreenshot%202023-06-05%20at%206.21.30%20PM.png?alt=media&amp;token=8959d18d-f10b-4dc8-9e85-7fe6f32ce272" alt="" width="375"><figcaption></figcaption></figure></div>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FwizC9tsbCYaE44shZbw7%2FScreenshot%202023-06-05%20at%206.28.41%20PM.png?alt=media&amp;token=45448ce6-c24f-4fd5-8b6d-dbff711d07da" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
**Congratulations, you're ready to** [**upload a contact list**](broken://pages/wOT4WNS4cWEbqbuIOP7b)

If you see a green alert that your message was submitted successfully, check your email and you should see it come through within a minute or two.
{% endhint %}

{% hint style="info" %}
**Delayed messages**

If your message seems slow to arrive, don't be afraid to send another test, as it may be temporarily deferred at the ESP. It's not uncommon for one or two messages to be delayed while other tests come through immediately during the testing process.
{% endhint %}


# "Unconfigured sending domain" during test message

{% hint style="info" %}
**Your sending domain must match the authenticated domain in your ESP account perfectly, including any subdomain.**
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FGI9es2BQdzhk3IIqsr9I%2FScreenshot%202023-10-29%20at%204.06.33%E2%80%AFAM.png?alt=media&amp;token=519892c2-21b1-40a6-ab02-8b69df2c5057" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F1Z5r2b3YXCkzhrLnh7O3%2FScreenshot%202023-10-29%20at%204.09.23%E2%80%AFAM.png?alt=media&amp;token=54f1db68-c87d-41b7-92d2-76a73fb4f3f8" alt=""><figcaption></figcaption></figure>


# Campaign stats are blank

{% hint style="info" %}
**Missing or blank stats are always due to one of the following issues:**&#x20;
{% endhint %}

{% hint style="danger" %}
**Don't use an Amazon SES authenticated email address as your ESP platform's Sender Email Address.**
{% endhint %}

This will stop Amazon from sending webhooks back to your platform, causing your stats to be blank.&#x20;

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FKwj2kiJBCIA5kA3ORg5h%2FScreenshot%202023-10-29%20at%204.02.50%E2%80%AFPM.png?alt=media&amp;token=9d55f9bb-5c6b-4abd-8649-0aa15c35f497" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FU3lTGgvM4KNsnmEvAzco%2FScreenshot%202023-10-29%20at%204.10.41%E2%80%AFPM.png?alt=media&amp;token=e77277d5-d4b0-4f45-9bb6-d0d9f2aa2e20" alt=""><figcaption></figcaption></figure>

{% hint style="danger" %}
**You're using Amazon SES and the sending domain in your campaign doesn't match the sending domain configured in your Amazon SES connection.**
{% endhint %}

1. Duplicate your Amazon SES Connection and change the sending domain to match the new sending domain you want to use in your campaigns.&#x20;
2. Add the new Amazon SES Connection to a new Postal Route, and add the new Postal Route to your Customer Account.&#x20;
3. When you send your campaign using the new sending domain, switch the dropdown to the new Postal Route that has that sending domain configured in the new Amazon SES Connection you just created.&#x20;

{% hint style="success" %}
**Use a different Connect and Postal Route for each sending domain.**
{% endhint %}

{% hint style="danger" %}
**The white label tracking link in the Connection (SparkPost, SMTP Relay, etc) has a DNS record in it that isn't pointing to the IP address of the VPS where the ESP is installed.**
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FVzceJH5rZfJUs8g2tPLg%2FScreenshot%202023-12-16%20at%203.42.14%E2%80%AFAM.png?alt=media&amp;token=cad6f540-8864-4d1b-abe3-fe6e38739670" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
**Fix this by editing or creating the missing DNS A record in your DNS hosting provider such as Cloudflare, Godaddy, etc, wherever you normally configure your DNS records.**&#x20;
{% endhint %}

{% hint style="danger" %}
**The white label tracking link in the connection has the Cloudflare proxy turned on.**
{% endhint %}

{% hint style="success" %}
**Fix this by turning the Cloudflare proxy off for&#x20;*****only*****&#x20;the tracking link domain.**
{% endhint %}

{% hint style="danger" %}
**You're using Amazon SES and the domain used to access the ESP doesn't match the admin\_url domain in the edcom-install/config/edcom.json file on the VPS.**
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F83y5jXfSqjzzg80GF5V2%2FScreenshot%202023-12-16%20at%204.09.08%E2%80%AFAM.png?alt=media&amp;token=a682ef4b-d60c-4df3-94fa-552d5396ed67" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
**Use the admin\_url link you configured during installation to access your ESP in the browser or change the admin\_url to use a different domain.**&#x20;

Learn how to change the admin\_url without breaking things [here. ](/docs/post-installation/changing-the-installation-domain)
{% endhint %}


# Getting approved for Amazon SES production access

{% hint style="success" %}
**Amazon SES has the best pricing of any delivery service that allows email marketing.**

Amazon SES is 10 cents per 1000 messages sent, pay-as-you-go, with no minimums or commitments; that's $100 per million messages, only pay for what you send.
{% endhint %}

{% hint style="warning" %}
This bargain basement discount pricing comes with a higher barrier to entry than with other email delivery API or SMTP Relay services which charge more.&#x20;
{% endhint %}

Unlike other vendors, you can't just sign up and start sending.&#x20;

First, you have to [create an account](/docs/introduction/connect-amazon-ses-api) and complete your integration by verifying a domain and connecting it to your [EmailDelivery.com](https://emaildelivery.com) ESP platform; then you're placed into "the sandbox."&#x20;

{% hint style="info" %}
You can only send mail to email addresses that you own while in the Amazon SES sandbox.&#x20;
{% endhint %}

To test your Amazon SES integration while in the sandbox, you have to add and verify each of your personal email addresses one at a time, and that becomes your contact list.

To get out of the sandbox and send mail to your real contact list, you need [to request production access](https://docs.aws.amazon.com/ses/latest/dg/request-production-access.html).&#x20;

{% hint style="warning" %}
You must have a verified domain and have completed and tested your SES integration with your [EmailDelivery.com](https://emaildelivery.com) ESP platform before you request production access.&#x20;
{% endhint %}

If approved to get out of the sandbox, your sending limit will start out at 50,000 messages per day, and you can have the cap lifted once you've established yourself as a reasonable sender.

Amazon will initially throttle your production sending to 14 messages per second, which will automatically increase over time.&#x20;

We have customers who Amazon allows to send hundreds of messages per second.&#x20;

{% hint style="info" %}
**Getting approved for Amazon SES production access**
{% endhint %}

The first thing that Amazon SES is screening for is that many applicants who apply for new email marketing accounts are liars.&#x20;

Fake sites, fake blogs, fake products, fake companies.

{% hint style="info" %}
**Example:** When Mailchimp made drastic changes to Mandril and rolled it into their main product, they said they were canceling 2000 Mandril accounts per day for spam.
{% endhint %}

When the Trust & Safety team evaluates your site and your production access application, this is what they're looking at:

* Does this site, service, or product seem real, professional, and reputable?
* Is there a footer on the site with a privacy policy?&#x20;
* Would this site, service, or product need Amazon SES? Is there a plausible legitimate use case here?
* How will this applicant build their contact list and where did their existing contacts come from?
* If all of the above adds up, will this entity be sending emails that people want to read and that don't upset the reader?&#x20;

{% hint style="info" %}
**Important**\
Make sure your site has the expected footer with a privacy policy.&#x20;
{% endhint %}

{% hint style="info" %}
**Important**\
Only make your application for one site, one brand. Your application must be crystal clear and super easy to understand at a glance for the busy Amazon reviewer.&#x20;
{% endhint %}

{% hint style="info" %}
**Do not apply for multiple websites/brands or mention other customers and clients.** \
Since Amazon only has the ability to vet your site, product, brand, or service, and no ability to vet your current or future customers or clients, this will cause a denial. \
As a general rule if your production access application states you intend to act as an agency for managing the mailing lists of others, you will be denied.&#x20;
{% endhint %}

{% hint style="info" %}
**If you are a responsible sender, you will have no problem adding additional domains to your Amazon SES account once you've been approved.** \
However, during the production access approval process, any ambiguity will cause a denial.&#x20;
{% endhint %}

{% hint style="warning" %}
**This is an example of the type of content Amazon SES isn't going to approve:**&#x20;

We had a customer who ticked every box, but the front page of their website was covered in articles about burning in hell, causing their application and all appeals to be denied.&#x20;
{% endhint %}

And finally:

* Is this otherwise legitimate applicant a competent sender? What are their hygiene practices?&#x20;
* How will they manage bounces, unsubs, and complaints, ensuring they will help maintain or improve Amazon's sender reputation instead of harm it?&#x20;

I've spoken to Amazon about what the trust and safety team wants to see to be reassured a sender knows what they're doing, and isn't going to wildly spam and blow their account up out of negligence.&#x20;

Here's their answer...

{% hint style="success" %}
**Include technical details.**
{% endhint %}

{% hint style="info" %}
Explain how you plan to use Amazon SES to send email:
{% endhint %}

Through an integration with the [EmailDelivery.com](https://emaildelivery.com) ESP platform.  ✅

{% hint style="info" %}
How can recipients opt out of receiving emails from you?
{% endhint %}

[EmailDelivery.com](https://emaildelivery.com) has a one-click unsubscribe in the footer and a one-click list-unsubscribe header is attached as a backup in case the integrated email delivery service doesn't include its own  ✅

{% hint style="info" %}
How do you plan to handle bounces and complaints?
{% endhint %}

The [EmailDelivery.com](https://emaildelivery.com) ESP platform integration uses Amazon SNS and event publishing.  ✅

Real-time reputation metrics are shown prominently in the [EmailDelivery.com](https://emaildelivery.com) platform UI reporting as webhooks come back in live from Amazon.  ✅

Bounces, unsubs, and complaints are suppressed account-wide automatically the first time they're seen.  ✅

We will also be using the [reputation metrics dashboard](https://docs.aws.amazon.com/ses/latest/dg/reputation-dashboard-dg.html) in the Amazon SES console as a sanity check and backup to monitor our bounce and complaint rates and verify the information we're seeing in the [EmailDelivery.com](https://emaildelivery.com) platform is accurate on an ongoing basis.  ✅

{% hint style="info" %}
Amazon recommends you familiarize yourself with these links in order to speak the same language as the Amazon SES trust and safety team.
{% endhint %}

{% embed url="<https://docs.aws.amazon.com/ses/latest/dg/reputation-dashboard-dg.html>" %}

{% embed url="<https://repost.aws/knowledge-center/ses-high-bounce-rate>" %}

{% embed url="<https://docs.aws.amazon.com/ses/latest/dg/sending-email-subscription-management.html>" %}

{% hint style="info" %}
**In summation, heed this direct quote from Amazon:**
{% endhint %}

> The idea would be to include as much specific details on the SES features they will be leveraging so that the AWS Trust and Safety Team are assured that they are aware and will implement best practices

{% hint style="info" %}
Softball:    🥎
{% endhint %}

You'll be asked by Amazon SES to non-specifically state your "Use case".&#x20;

Just answer general questions like these as comprehensively as possible:

* What does your site do?
* How do you plan to build or acquire your mailing list?
* What will you use Amazon SES for?

{% hint style="info" %}
**Provide supporting evidence if possible.**\
This has worked for getting rejected applicants approved on appeal:&#x20;
{% endhint %}

If you're switching from another ESP, attach recent invoices proving you're a valid sender with a regular business relationship with another service.&#x20;

Provide links to social media accounts associated with your verified domain that have a following and organic engagement.&#x20;

Attach examples of emails you plan on sending - these better be good and show an unsubscribe footer with a full name and address for the sender and "you have received this email because you...." memo.&#x20;

{% hint style="success" %}
All of this may sound formidable but it's actually **not** hard to get approved.
{% endhint %}

Bottom line:&#x20;

Just don't look like a spammer.  👍  \ <br>


# Google Postmaster Tools

As the Postmaster of your own ESP, it's vital to sign up for [Google Postmaster Tools](https://www.gmail.com/postmaster/).&#x20;

You'll see reporting on your IP reputation, your domain reputation, your complaint rate, any authentication and encryption failures, and whether Google thinks you're sending wanted mail.&#x20;

You can also invite colleagues and grant them access to your reports, and be added to the accounts of other senders you allow onto your platform.&#x20;

Google Postmaster Tools works by authenticating your domain, so you can see the same reporting on any ESP or MTA you send email from, not just your EmailDelivery.com ESP Platform.&#x20;

These are the types of reports you'll see with Google Postmaster Tools:

{% hint style="info" %}
Use Google Postmaster Tools as a proxy for how your mail is being scored more generally across all mailbox providers.&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FeWuLCPGwX2O44EEEywJ4%2FScreenshot%202024-01-03%20at%206.11.31%E2%80%AFPM.png?alt=media&amp;token=c4dde188-3dae-473f-9798-f86a216b7302" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F8N8D2He8KragETOSxetS%2FScreenshot%202024-01-04%20at%208.58.28%E2%80%AFAM.png?alt=media&amp;token=39f49523-f65c-4bd7-bc24-9073a7379139" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FC3sTbJk4LkLkfk17WCwK%2FScreenshot%202024-01-04%20at%208.59.48%E2%80%AFAM.png?alt=media&amp;token=20da7dce-68e1-45ae-993e-6f2db48b75aa" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FNzF57x01TT7CrlyjYUap%2FScreenshot%202024-01-03%20at%206.12.48%E2%80%AFPM.png?alt=media&amp;token=55fc3cf6-20fc-4934-b66d-bf10b509855e" alt=""><figcaption></figcaption></figure>


# Change your logo and favicon

Click Customers -> Customer Accounts in the administrator account

![](https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FOQmpTbIcjBL8vaJBBR8E%2FScreenshot%202023-09-23%20at%207.51.44%20AM.png?alt=media\&token=acace3f8-6796-4008-a2ad-5d32dae7ef80)

Click the Advanced Configuration button

![](https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FqYlE19ZcV1MQGxdwnb7H%2FScreenshot%202023-09-23%20at%207.51.53%20AM.png?alt=media\&token=22a0f7e7-7cfa-4d75-ae2a-39c9fdf8cf2b)

Click default&#x20;

![](https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FnN9BUlSVgCse3kKR9zE6%2FScreenshot%202023-09-23%20at%207.52.03%20AM.png?alt=media\&token=1514784e-a922-4ae8-b42d-92ec915eeb9d)

Click the camera icon to upload your logo

![](https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FS4tbQeEbD8viEUp9URuk%2FScreenshot%202023-09-23%20at%207.52.15%20AM.png?alt=media\&token=2df111ac-f6a4-4916-ac8f-93f0ad971741)


# Change your colors and theme using Custom CSS

Access the CSS editor by going to Customer Accounts -> Advanced Configuration -> defaults -> Custom CSS tab

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FjGmgSnI21w581QHLa6B5%2Fimage.png?alt=media&amp;token=d7f5ddb2-5792-4370-ae5c-18eef8fba55f" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Ft57ID6KXc51K7Cp1TRuV%2Fimage.png?alt=media&amp;token=aa1aee44-7d97-472c-abe1-194ae2113737" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fg0rZM5gFAUNFH0SE5W06%2Fimage.png?alt=media&amp;token=687dca03-4a6f-4dfe-867d-a4959e2821d9" alt=""><figcaption></figcaption></figure>


# Password reset configuration

Select your password reset method by going to Customer Accounts -> Advanced Configuration -> defaults -> Password Reset Emails

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FjGmgSnI21w581QHLa6B5%2Fimage.png?alt=media&amp;token=d7f5ddb2-5792-4370-ae5c-18eef8fba55f" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Ft57ID6KXc51K7Cp1TRuV%2Fimage.png?alt=media&amp;token=aa1aee44-7d97-472c-abe1-194ae2113737" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**You must use one of our supported API connections for password reset emails**

SparkPost has a free tier with 500 messages per month without requiring a credit card, which could be a good choice for this.&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FazyH7wiPof0CuHezjQyy%2Fpasswordreset.png?alt=media&amp;token=1661f63d-1d79-4654-8083-f8814ddc4a51" alt=""><figcaption></figcaption></figure>


# Creating Customer Accounts

{% hint style="info" %}
**Customer accounts can only access the email marketing frontend using impersonation**&#x20;

A user account logs in directly to the frontend with an email address and password, a customer account stays logged in as the backend admin while using the email marketing frontend in a new tab.
{% endhint %}

{% hint style="info" %}
**Customer accounts do not share data or users**

In contrast to user accounts, customer accounts are siloed, each customer account is an isolated environment.
{% endhint %}

**Click Customers -> Customer Accounts**

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FFAHkkrnsCRfI7M1YqTfl%2FScreenshot%202023-06-07%20at%202.38.29%20AM.png?alt=media&amp;token=07bb1ac8-3031-48de-a957-b32536e20418" alt="" width="184"><figcaption></figcaption></figure></div>

**Click the green plus to create a new customer account:**

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FWJWQ3DCKWk5dQegV3r1v%2FScreenshot%202023-06-07%20at%204.24.17%20AM.png?alt=media&amp;token=2a7a3012-7042-4675-9e89-aae8b9590a3b" alt=""><figcaption></figcaption></figure>

**Company Name**

Give the customer account a name, this will be shown on the frontend under the user account name.

**Frontend**

{% hint style="danger" %}
Do not change, this is an advanced feature for expert use only.
{% endhint %}

A default frontend settings configuration suitable for all customer accounts comes pre-configured with your installation.

**Postal Routes**

At least one [postal route](/docs/introduction/postal-routes) must be added to a customer account in order to create it or save changes made to it.&#x20;

{% hint style="info" %}
When you add multiple postal routes, they will appear in a dropdown in the email marketing platform UI anywhere you can send a message, postal routes can also be specified through the email marketing API.&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FEldCjlYJItKacXh385LX%2FScreenshot%202023-06-07%20at%206.33.41%20AM.png?alt=media&amp;token=25668f1d-bb20-4b4d-83c4-c77d02422c22" alt=""><figcaption></figcaption></figure>

**Edit send limits**

{% hint style="warning" %}
Disabled by default, this is an advanced feature for expert use only.
{% endhint %}

[Sending limits](broken://pages/aZkidPWwjzyTeGMy0HpP) place email sending volume restrictions on untrusted customer accounts to guard against spam and abuse.&#x20;

**Trial Expiration:**

{% hint style="warning" %}
Disabled by default, this is an advanced feature for expert use only.
{% endhint %}

Customer accounts can be given an email marketing trial period with an expiration date that automatically cuts access off.&#x20;

**Example Data Template**

{% hint style="warning" %}
Disabled by default, this is an advanced feature for expert use only.
{% endhint %}

If checked, newly created customer accounts will duplicate this account's data and come with all of it's contact lists, broadcasts, segments, email funnels, etc.&#x20;

**Reverse Funnel Order**

{% hint style="info" %}
Default: First in, first out. Reverse: Last in, first out.&#x20;
{% endhint %}

If checked, during periods of delayed delivery the most recently added contacts will be sent first, with the expectation that recency creates higher engagement and better deliverability.

**Don't Validate Lists**

{% hint style="warning" %}
Disabled by default, this is an advanced feature for expert use only.
{% endhint %}

List validation places contact list uploading restrictions on untrusted customer accounts to guard against spam and abuse.&#x20;

If unchecked, uploaded contact lists will be unavailable for use until manually approved by the backend admin.

Lists needing approval will be shown under the List Approval tab. Optional automated hygiene and validation can be done using a Mailgun integration.&#x20;

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FLqYWxUDjl8dS5fTB759j%2FScreenshot%202023-06-07%20at%206.10.41%20AM.png?alt=media&amp;token=64abf977-2aca-4eea-adc0-4f0e20230b62" alt=""><figcaption></figcaption></figure>

**Remember to save!**

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FESKPR8OAA1cqM3bjPykt%2FScreenshot%202023-06-07%20at%203.45.38%20AM.png?alt=media&amp;token=b34bbab2-aaa6-4c1c-8c48-72305d1a1492" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Create a user account**

[Creating a user account](/docs/backend-administration/creating-user-accounts) is optional, you can just hit the back arrow and still access the email marketing frontend in a new tab via impersonation.<br>
{% endhint %}


# Creating User accounts

{% hint style="info" %}
**User accounts log in to the email marketing frontend**

A user account logs in directly to the frontend with an email address and password, a user account does not have access to the backend.
{% endhint %}

{% hint style="warning" %}
**User accounts share a customer account**

A user account is a sub-user of a customer account, all user accounts share access to all of the customer account's data and are not siloed, *user accounts are not an isolated environment.*&#x20;
{% endhint %}

{% hint style="info" %}
**Customer accounts do not share data or users**

In contrast to user accounts, customer accounts are siloed, each customer account is an isolated environment.
{% endhint %}

**Click Customers -> Customer Accounts**

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FFAHkkrnsCRfI7M1YqTfl%2FScreenshot%202023-06-07%20at%202.38.29%20AM.png?alt=media&amp;token=07bb1ac8-3031-48de-a957-b32536e20418" alt="" width="368"><figcaption></figcaption></figure></div>

**Click the customer account you want to create an email marketing user account under:**

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fl20BlMtYXO4yCBnLk0V2%2FScreenshot%202023-06-07%20at%203.07.52%20AM.png?alt=media&amp;token=bee2e773-1eb5-4817-8803-366e93ef6c2e" alt="" width="135"><figcaption></figcaption></figure></div>

**Alternatively you can use edit from the action menu:**

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FSsrF5We6d7P1aeV1lVYE%2FScreenshot%202023-06-07%20at%203.08.08%20AM.png?alt=media&amp;token=dcc685ef-eae2-4f3b-ae39-298ac9c29c02" alt="" width="188"><figcaption></figcaption></figure></div>

{% hint style="info" %}
**Creating your first user**

Your platform ships with a default customer account named Acme Co without any users, by creating a user account you can log directly into the email marketing frontend with a unique username/password combination.
{% endhint %}

**Click the&#x20;*****users tab*****&#x20;and Create User:**

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F6g3RjKtefDlCdtYSAIdV%2FScreenshot%202023-06-07%20at%203.08.25%20AM.png?alt=media&amp;token=59d5c4f6-1a7d-4d66-83c9-88344044efc8" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Email address and name**

The user account email address doesn't need to actually exist, you can use anything you want here. However, the email address and name entered will be filled in as the default when you create a new email marketing broadcast, where they can always be modified.&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FvbZaDJRMglkttzi83W9D%2FScreenshot%202023-06-07%20at%203.10.00%20AM.png?alt=media&amp;token=27160f32-952c-42da-812f-4fd05cd66eeb" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**No data export allowed**

Checking this box prevents this user account from being able to download contact list data from the email marketing frontend.
{% endhint %}

{% hint style="info" %}
**Disabled**

Checking this box will temporarily disable a user account without deleting it.
{% endhint %}

**Remember to save!**

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FESKPR8OAA1cqM3bjPykt%2FScreenshot%202023-06-07%20at%203.45.38%20AM.png?alt=media&amp;token=b34bbab2-aaa6-4c1c-8c48-72305d1a1492" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Log in with user accounts at the same admin\_url URL as your backend admin account**

Backend admin accounts and email marketing frontend users access the platform at the same admin\_url login page. Admin users will be automatically logged in to the backend, user accounts will be automatically logged in to the frontend.&#x20;
{% endhint %}

{% hint style="info" %}
To stay logged in as the backend admin while logging in as an email marketing user account on the frontend use an incognito window, another browser, or Firefox containers.&#x20;

Alternatively, you can use customer account impersonation to open the email marketing frontend in a new tab while staying logged in as the backend admin. &#x20;
{% endhint %}


# Create default email templates

{% hint style="info" %}
You can show off your design skills and create email templates that are automatically added to new customer accounts, we give you a head start by shipping with dozens of them that can be edited or deleted.
{% endhint %}

**Go to customers -> frontend settings from the backend top navigation:**

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FEdv9pXa8t3yd9bfRC3OC%2FScreenshot%202023-06-07%20at%208.24.25%20AM.png?alt=media&amp;token=1850ffbf-18b4-4901-bba2-4bf9c2059b79" alt="" width="250"><figcaption></figcaption></figure></div>

{% hint style="info" %}
In the broadcast templates tab click '**add template**' to create in our drag-and-drop email composer, to learn more about the drag-and-drop email composer [see our guide here](/docs/using-the-legacy-drag-and-drop-email-composer/the-basics).
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FFt8hlaA7Dd4HRhhYpfMk%2FScreenshot%202023-06-07%20at%208.25.21%20AM.png?alt=media&amp;token=0c061914-37fe-485a-b1a8-555d88fb30dd" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Edit or delete the templates that come included in the platform with the Actions button.
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fr54dohhxSrXNTFW8POlF%2FScreenshot%202023-06-07%20at%208.26.54%20AM.png?alt=media&amp;token=43b46d33-af9c-4b16-ab88-3587763011fd" alt="" width="322"><figcaption></figcaption></figure></div>

{% hint style="info" %}
Make sure you check '**show on frontend**', giving the template a display order number lets you place your favorites at the top of the list so they'll be seen first.
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FPVbISIWOLyGVB4n04J5w%2FScreenshot%202023-06-07%20at%208.31.10%20AM.png?alt=media&amp;token=e6de26e5-be60-4251-a398-9393d514dc2b" alt=""><figcaption></figcaption></figure>


# Create default subscriber form templates

{% hint style="info" %}
You can show off your design skills and create opt-in subscriber form templates that are automatically added to new customer accounts, we give you a head start by shipping with around 20 of them that can be edited or deleted.
{% endhint %}

**Go to customers -> frontend settings from the backend top navigation**

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FEdv9pXa8t3yd9bfRC3OC%2FScreenshot%202023-06-07%20at%208.24.25%20AM.png?alt=media&amp;token=1850ffbf-18b4-4901-bba2-4bf9c2059b79" alt="" width="250"><figcaption></figcaption></figure></div>

{% hint style="info" %}
In the form templates tab click '**add template**' to create in our drag-and-drop composer, to learn more about designing forms [see our subscriber opt-in forms guide](/docs/subscriber-opt-in-forms/what-you-can-do-with-forms). Forms use the same drag-and-drop composer as email templates,[ learn more about the drag-and-drop composer](/docs/using-the-legacy-drag-and-drop-email-composer/the-basics).
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FjmBBsqCehfdiCJR8L3q8%2FScreenshot%202023-06-07%20at%208.29.02%20AM.png?alt=media&amp;token=3ab5b50c-2d0e-47e4-b59a-49bcd60ffab8" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Edit or delete the templates that come included in the platform with the **action menu.**
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fzm5ore7psFwPcctZc1qs%2FScreenshot%202023-06-07%20at%208.29.12%20AM.png?alt=media&amp;token=ad4ecfaa-0d7e-48b1-b57e-caba69c3cbc4" alt="" width="334"><figcaption></figcaption></figure></div>

{% hint style="info" %}
**Use the properties tab to give your form a name**

Make sure you check '**show on frontend**', giving the template a display order number lets you place your favorites at the top of the list so they'll be seen first.
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F3OaIRPR0wSYiCqwueznS%2FScreenshot%202023-06-07%20at%208.26.25%20AM.png?alt=media&amp;token=3904355d-59bd-4ebe-b9d1-d0454b0405e9" alt=""><figcaption></figcaption></figure>


# Purging mail queues

{% hint style="info" %}
**Purge all undelivered mail**

You can purge all undelivered broadcast, funnel, and transactional mail in the backend customer account table.
{% endhint %}

**Click customers -> Customer Accounts**

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FFAHkkrnsCRfI7M1YqTfl%2FScreenshot%202023-06-07%20at%202.38.29%20AM.png?alt=media&amp;token=07bb1ac8-3031-48de-a957-b32536e20418" alt="" width="368"><figcaption></figcaption></figure></div>

**Check the customer account whose mail you want to purge:**

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FxMbmFcBYbOdCRhH4EJXr%2FScreenshot%202023-06-07%20at%202.38.49%20AM.png?alt=media&amp;token=e80d5534-5dbc-4931-b644-71bd0827c947" alt="" width="283"><figcaption></figcaption></figure></div>

**Use the action menu to purge mail queues:**

![](https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fp5bw8MfX1oQ1cdhre7Xn%2FScreenshot%202023-06-07%20at%202.39.00%20AM.png?alt=media\&token=8b2f956e-216f-4c86-a4c3-6fc0e67d88cf)

{% hint style="warning" %}
**The most reliable way to cancel a broadcast in progress is always to purge broadcast mail from the backend customer account menu.**
{% endhint %}

{% hint style="danger" %}
Clicking "Cancel" in the Actions button from the broadcast page will cancel a broadcast sent through Velocity MTA, but may not be able to cancel a broadcast sent through an API or SMTP Relay connection depending on the state of the data transfer at that time.
{% endhint %}

![](https://d2x3xhvgiqkx42.cloudfront.net/e0384b56-4f90-47bf-9077-d8a44f0eb175/2a05d828-eb35-44b0-9b70-bfc4c7204e36/2018/12/16/9664ba12-6734-4a10-ba61-0a8d157d34c8.png)

{% hint style="info" %}
To manage Velocity MTA mail queues see the [MTA documentation](/docs/velocity-mta-continuing-education/complaint-feedback-loops).
{% endhint %}


# Logging in to the email marketing frontend

There are two ways to access the email marketing frontend:&#x20;

1\. Impersonating a customer account from the backend admin account.

2\. Logging in with a user account.

{% hint style="info" %}
**Login as customer account through the backend via impersonation**

The most convenient way to access the email marketing platform frontend is by using the impersonate a customer account feature from the backend, this will open the frontend in a new tab while staying logged in as an administrator.
{% endhint %}

{% hint style="info" %}
When using impersonation, any new messages created will have the backend admin account's name and email address set as the default instead of the customer account's name and email address, this is easily modified by editing the message.
{% endhint %}

**From the backend top navigation go to customers -> customer accounts**

<div align="left"><figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FHVgjFHwiK8SuuPdUfS10%2FScreenshot%202023-06-05%20at%205.52.55%20PM.png?alt=media&#x26;token=3ef9e33e-60ad-4dd4-bf6d-6e9062d112fa" alt="" width="188"><figcaption></figcaption></figure></div>

**Check the customer account you want to log in as and click the action button:**

<div align="left"><figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FaWB3zsiJSYYbE2VH7V5c%2FScreenshot%202023-06-05%20at%205.55.31%20PM.png?alt=media&#x26;token=0c077549-ddb2-4603-8d38-0798b86b0efe" alt="" width="188"><figcaption></figcaption></figure></div>

**Selecting login as customer will open the email marketing frontend in a new tab:**

<div align="left"><figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FIm0p163a4Fb1PeQA7YPr%2FScreenshot%202023-06-05%20at%205.53.46%20PM.png?alt=media&#x26;token=ab364558-6c6b-45d7-b52a-da9007d0bd1f" alt="" width="188"><figcaption></figcaption></figure></div>

You'll see this at the top of your email marketing frontend browser tab to indicate you're in impersonation mode.

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FvWQU8gO3F0lxVyjdLyAS%2FScreenshot%202023-06-07%20at%2010.31.29%20AM.png?alt=media&amp;token=7a3fcd8e-c79a-4b05-b279-151497bc65e5" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Logging in with a user account**

A user account logs directly into the frontend with a unique email address and password combination, for more information on user accounts see [creating user accounts](/docs/backend-administration/creating-user-accounts).
{% endhint %}

{% hint style="info" %}
**Log in with a user account at the same URL as your backend admin account**

Use the same admin\_url link you configured during installation to log in with an email marketing frontend user account and your backend admin account, each account type will be routed to the right place automatically.
{% endhint %}

{% hint style="warning" %}
To stay logged in as the backend admin while fully logging in as an email marketing user account instead of using administrator impersonation, just log in again through an incognito window, another browser, or use Firefox [containers](https://addons.mozilla.org/en-US/firefox/addon/multi-account-containers/).
{% endhint %}


# Frontend Settings

{% hint style="info" %}
**Frontend settings are applied to customer accounts**

Your saved frontend settings are available in the frontend dropdown menu when you create a new customer account, it's unlikely you will need more than one saved frontend settings configuration.
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FQJoNWIZpCjnOahuka3V4%2FScreenshot%202023-06-07%20at%2010.00.13%20PM.png?alt=media&amp;token=3176b0d8-13a0-489f-8074-4044d7b8aef9" alt=""><figcaption><p>Customer account frontend settings dropdown menu</p></figcaption></figure>

**Go to Customers -> Customer Accounts -> Advanced Configuration in the backend top navigation**

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FEdv9pXa8t3yd9bfRC3OC%2FScreenshot%202023-06-07%20at%208.24.25%20AM.png?alt=media&amp;token=1850ffbf-18b4-4901-bba2-4bf9c2059b79" alt="" width="250"><figcaption></figcaption></figure></div>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fdp4ArdBZgNAjSMpArPeJ%2FScreenshot%202024-06-04%20at%202.23.11%E2%80%AFAM.png?alt=media&amp;token=0c7c0884-11c5-476f-9d96-eeea6afd799c" alt=""><figcaption></figcaption></figure>

**Edit your frontend settings from the action button:**

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FRIVaS3QcUZR4e7buUvRM%2FScreenshot%202024-06-04%20at%202.35.40%E2%80%AFAM.png?alt=media&amp;token=930550dc-7abe-4e4a-9e7e-6d82897b0861" alt=""><figcaption></figcaption></figure>


# Profile tab

{% hint style="info" %}
**Dashboard title**

The dashboard title will show on the email marketing frontend when a user account logs in.
{% endhint %}

{% hint style="info" %}
**Brand Image**

The brand image is where you upload your logo that will appear on the email marketing frontend, you may want to use a modified version that blends in with our blue background as the navigation color is currently unable to be modified.&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FGgPyiAhJFZMpUUYKWeyz%2FScreenshot%202023-06-07%20at%209.50.08%20PM.png?alt=media&amp;token=77d2974d-9736-4ecd-9099-1363a47c9c61" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Frontend branding for the fictional "Email MegaPowers" agency.
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FAtNvBMr8iUjTiWFtSzyp%2FScreenshot%202023-06-07%20at%209.51.17%20PM.png?alt=media&amp;token=1ff8a256-97f5-45bf-92c3-e958016d2bb6" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Custom branding as shown in the email marketing platform.
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FpHeJ5LkL120cDBu2UMvN%2FScreenshot%202023-06-07%20at%209.57.17%20PM.png?alt=media&amp;token=846b428f-72c5-496b-829b-5049f58fe981" alt=""><figcaption></figcaption></figure>


# Broadcast alert thresholds

{% hint style="info" %}
You can create an alert for broadcasts that have exceeded certain thresholds for bounce or complaint rates.
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FE0WhKDvRzuOyFh4n18cK%2FScreenshot%202023-06-07%20at%209.52.03%20PM.png?alt=media&amp;token=a8d87fa8-f47a-4664-b730-f01746ff053f" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
Alerts appear on broadcasts as a yellow triangle which can be clicked to reveal the underlying problem.
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FZwoYuvJ449sSr8itjYev%2FScreenshot%202023-06-07%20at%2010.20.41%20AM.png?alt=media&amp;token=9a77a57d-8dcc-4c51-a898-5755eacf9fc6" alt="" width="375"><figcaption></figcaption></figure>


# Default send limits

{% hint style="warning" %}
You can **pause** broadcasts that have exceeded certain thresholds for bounces unsubscribes or complaint rates.
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FIYVUcs2br0nOSenIIzuY%2FScreenshot%202023-06-07%20at%209.52.55%20PM.png?alt=media&amp;token=2f161cbc-591d-4fab-82b4-2cef01dcc94c" alt="" width="563"><figcaption></figcaption></figure>


# Header template

{% hint style="warning" %}
The header template tab is only applied to mail sent using Velocity MTA.
{% endhint %}

{% hint style="info" %}
You can modify your Velocity MTA header order and header content here, intended to be adjusted only by those with a deep understanding of MTA administration.
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F3xp09lxmR88EB8QaJ02e%2FScreenshot%202023-06-07%20at%209.55.40%20PM.png?alt=media&amp;token=b1ec853d-6d6f-47d1-947c-70460745a1da" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Alternative From Name and Subject encodings**&#x20;

Intended to be adjusted only by those with a deep understanding of MTA administration.
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FnZclQhZcEYNkIJlGGMx8%2FScreenshot%202023-06-07%20at%2011.42.04%20PM.png?alt=media&amp;token=2c8e1d34-1006-4624-a281-f7a7b3b081e9" alt="" width="563"><figcaption></figcaption></figure>


# Customer broadcast report

{% hint style="info" %}
You can see the metrics for all broadcasts sent from all customer accounts in one unified view.
{% endhint %}

**Go to reports -> customer broadcasts in the backend navigation**

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FCxwB0emUFCt3egsFAL3q%2FScreenshot%202023-06-07%20at%201.12.49%20PM.png?alt=media&amp;token=9e601b19-68eb-4f3b-a06d-2bc2f39fecea" alt="" width="287"><figcaption></figcaption></figure></div>

**Click the 'by broadcast' tab:**

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F8ylQXhxiUD433TIsQJVw%2FScreenshot%202023-06-07%20at%201.12.34%20PM.png?alt=media&amp;token=44ccf799-7cf9-4730-b88d-aaf4a14c02e6" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Bounce breakout**

Drill down into bounce categories with the exact bounce messages and number of times seen by clicking on the bounce rate.&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FIgdu9nS8YP0ExCT1qFQd%2FScreenshot%202023-06-07%20at%201.18.39%20PM.png?alt=media&amp;token=440c3fc5-ebc2-4c18-8fd1-7bf52055a582" alt=""><figcaption></figcaption></figure>


# Pabbly Connect

{% hint style="success" %}
**Connect Pabbly to your email marketing platform using our private white-label integration**&#x20;
{% endhint %}

{% embed url="<https://connect.pabbly.com/share-app/CUFVZ1UCAmFUHlU_D2pQdw4aUlZTCghsUksBE1JdBX1SHwZDBEVaMApGVXdWFQloUxoDaVIOAzgNGQIGUAYBcgEYByhTTFYLVmVUEVQLXXcJa1UiVR4COFQFVWYPR1BqDjdSdVMeCFVSXAE8UkkFQ1ILBn0ESVpECkpVPVYZCSNTNANqUgsDIw00>" %}

{% hint style="info" %}
**Pabbly event triggers**
{% endhint %}

**New form submission**\
Triggers when a contact subscribes through a popup, slideout, hellobar, embedded, or 3rd party connected form.

**Contact has been added to a list**\
Triggers when a contact is added to a list.

**Contact has been tagged**\
Triggers when a tag is added to a contact.

**Contact has been untagged**\
Triggers when a tag is removed from a contact.

**Contact was sent a message**\
Triggers when a contact is sent a broadcast, funnel, or transactional message.

**Contact opened a message**\
Triggers when a contact opens a message.

**Contact clicked a link in a message**\
Triggers when a contact clicks a link in a message.

**Contact unsubscribed**\
Triggers when contact has been unsubscribed.

**Contact complained**\
Triggers when contact uses the "spam button" or "junk button" to signal they've received unwanted mail.

**Contact soft-bounced**\
Triggers when contact bounces for temporary reasons such as exceeding their mailbox quota.

**Contact hard-bounce**\
Triggers when retrying delivery to contact in the future will not succeed, usually because the email address doesn't exist.

**Contact opened or clicked**\
Triggered by contact opening a message or clicking a link in a message - two triggers in one event.

**Contact soft-bounced or hard-bounced**\
Triggered when contact is undeliverable for any reason - two triggers in one event.

**Contact unsubscribed or complained**\
Triggered when contact has been unsubscribed or uses the "spam button" or "junk button" - two triggers in one event.

{% hint style="info" %}
**Pabbly Actions**
{% endhint %}

**Create a List**\
Creates a new contact list.

**Create or Update Contact**\
Creates a contact in a contact list with a specified set of properties and property values, if the contact already exists then only the contact's properties will be updated.

**Tag Contact**\
Add a tag to a contact.

**Remove Tag From Contact**\
Removes a tag from a contact, if it is present on that contact.

**Unsubscribe Contact**\
Sets a contact as unsubscribed for all lists, suppressing all future mail to that contact.

**Get Contact Data**\
Retrieves all data for a contact with the given email.

**Remove Contact From List**\
Removes a contact from a list by email address. If the contact is only in one list, this will cause the contact to be deleted from the database entirely.

**Delete All Contact Data (GDPR)**\
Removes all known data for a contact in all lists.

**Delete a List**\
Deletes a contact list. Any contacts not present in other lists will also be deleted.

**Get All Lists**\
Get names and properties of all contact lists in the system.

**Get All Tags**\
List all contact tags in the system.

**Send Email**\
Configure and compose an email to be sent to each contact who goes through this automation. &#x20;


# Zapier

{% hint style="success" %}
**Connect Zapier to your email marketing platform using our private white-label integration**&#x20;
{% endhint %}

{% embed url="<https://zapier.com/developer/public-invite/135514/e406a043857b22f3c7646487697e6154/>" %}


# Event webhooks

{% hint style="info" %}
Utilize webhooks to receive real-time event notifications to a third-party integration&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fc8vQhxHAMbSWsosQSVgw%2Fimage.png?alt=media&amp;token=6799fc16-680d-405a-8100-26a169dd4d93" alt=""><figcaption></figcaption></figure>

**New form submission**\
Triggers when a contact subscribes through a popup, slideout, hellobar, embedded, or 3rd party connected form.

**Contact has been added to a list**\
Triggers when a contact is added to a list.

**Contact has been tagged**\
Triggers when a tag is added to a contact.

**Contact has been untagged**\
Triggers when a tag is removed from a contact.

**Contact was sent a message**\
Triggers when a contact is sent a broadcast, funnel, or transactional message.

**Contact opened a message**\
Triggers when a contact opens a message.

**Contact clicked a link in a message**\
Triggers when a contact clicks a link in a message.

**Contact unsubscribed**\
Triggers when contact has been unsubscribed.

**Contact complained**\
Triggers when contact uses the "spam button" or "junk button" to signal they've received unwanted mail.

**Contact soft-bounced**\
Triggers when contact bounces for temporary reasons such as exceeding their mailbox quota.

**Contact hard-bounce**\
Triggers when retrying delivery to contact in the future will not succeed, usually because the email address doesn't exist.

**Contact opened or clicked**\
Triggered by contact opening a message or clicking a link in a message - two triggers in one event.

**Contact soft-bounced or hard-bounced**\
Triggered when contact is undeliverable for any reason - two triggers in one event.

**Contact unsubscribed or complained**\
Triggered when contact has been unsubscribed or uses the "spam button" or "junk button" - two triggers in one event.


# API

See the API docs [here](https://app.emaildelivery.com/api/doc)

API docs are also hosted on your installation at your own domain on the email marketing platform frontend&#x20;

Go to integrate -> API & SMTP -> View Our Full API Documentation&#x20;

{% hint style="warning" %}
You will only see your API key if you [log in as a user account](/docs/backend-administration/creating-user-accounts) on the frontend, if you impersonate a customer account as a backend admin the API key will be blank
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FYVpJsw3osuszmV0g3qQ1%2FScreenshot%202023-06-09%20at%206.45.34%20AM.png?alt=media&amp;token=3c040be8-2c4b-468f-ae26-c07e9249c14b" alt=""><figcaption></figcaption></figure>


# Integrating Pixabay into your email campaigns

{% hint style="info" %}
You can access the 'Free Stock Art' feature when creating your email templates once you've integrated a free Pixabay account
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FSjC0I6cKo1EQyrqO5fmQ%2FScreenshot%202023-07-14%20at%208.39.25%20AM.png?alt=media&amp;token=ac54d089-8845-415a-b8f9-392c398dc19d" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F4tM0vqmGHM0n8TpumErp%2FScreenshot%202023-07-14%20at%208.40.08%20AM.png?alt=media&amp;token=0b9f2fc8-1eb1-4a6a-a8c3-67364b383152" alt=""><figcaption></figcaption></figure>

First, get your API key by going to this link while logged into Pixabay:

<https://pixabay.com/api/docs/#api_search_images>

Next, add your Pixabay API key to edcom-install/config/edcom.json

```
"pixabay_key": "",
```

Finally, restart the platform from the edcom-install directory

<pre><code><strong>./restart.sh
</strong></code></pre>


# WordPress

We have a custom in-house drag-and-drop form creator for popups, slide-outs, stickybars/hello bars, and embedded/inline forms.

Automations can be triggered through forms including adding contacts to email sequences, tagging, event webhooks, and utilizing connector integrations such as Pabbly.&#x20;

You can send mail directly from WordPress using SMTP Relay through your emaildelivery.com ESP platform with the transactional mail feature.&#x20;

To add our forms to your WordPress site we recommend the same method OptinMonster does for customers who don't use their plugin:

{% embed url="<https://wordpress.org/plugins/insert-headers-and-footers/>" %}

{% hint style="info" %}
You can integrate a pre-existing WordPress form and take advantage of all our form features just the same as if you were using a native form of ours by creating a new form and looking at the example post action under the Connect tab.&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Ffr0zuFyNdZ4zztmND70h%2FScreenshot%202023-12-18%20at%205.42.15%E2%80%AFAM.png?alt=media&amp;token=53fb5cba-d973-4f6b-9c69-be41fc51e153" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Many WordPress form plugins can also be integrated into your ESP platform through our Pabbly integration.**&#x20;
{% endhint %}


# Contact list domain routing

Contact list domain routing serves two functions in postal route configuration:

{% hint style="info" %}
**Grouping**

Logically group domains owned by the same parent company that share a common email infrastructure, such as the merger of Yahoo, AOL, and Verizon.&#x20;
{% endhint %}

{% hint style="info" %}
**Isolating**

Routing the most important mailbox providers like Gmail through the API, SMTP Relay, or MTA delivery policy where you're getting the best deliverability\*.
{% endhint %}

{% hint style="success" %}
**\***&#x44;elivery is when a message is successfully delivered, Deliverability is when the message hits the inbox.
{% endhint %}

Logical grouping example from the portfolio of Yahoo domains:

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fe3W6Q9bJHJttMuhg9FEQ%2FScreenshot%202023-06-09%20at%209.08.29%20AM.png?alt=media&amp;token=f3fef5b7-346c-4db1-ba75-5813b72e9cfa" alt=""><figcaption></figcaption></figure>

Microsoft email domains:

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F7fOWA422rteQrhMnXVtN%2FScreenshot%202023-06-09%20at%209.08.47%20AM.png?alt=media&amp;token=c9b7622c-d36a-4097-9837-38a96d818c73" alt=""><figcaption></figcaption></figure>

Preparing to isolate delivery for Gmail contacts via an optimized postal route connection:

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FQ3MbtD5xJogotg2oWB2b%2FScreenshot%202023-06-09%20at%209.08.18%20AM.png?alt=media&amp;token=6a01f29a-03b8-4f99-8ae4-c6ede2a76d26" alt=""><figcaption></figcaption></figure>


# Load balancing

Postal route load balancing has three primary use cases:

{% hint style="info" %}
**Contact List Domain Grouping**

Route mailbox providers that have multiple domain names sharing a common email infrastructure through an API, SMTP Relay, or MTA delivery policy optimized for them using [contact list domain routing](/docs/advanced-postal-route-configuration/contact-list-domain-routing).
{% endhint %}

{% hint style="info" %}
**Optimizing for deliverability**

Route important mailbox providers like Gmail through the API, SMTP Relay, or MTA delivery policy where you're getting the best deliverabilit&#x79;**\*.**
{% endhint %}

{% hint style="info" %}
**Partitioning**

Distribute your outgoing mail across multiple API, SMTP Relay, or MTA delivery policies based on percentage allocation and warmup status.
{% endhint %}

{% hint style="success" %}
\*Delivery is when a message is successfully delivered, Deliverability is when the message hits the inbox.
{% endhint %}

{% hint style="warning" %}
**One sender email address using multiple email service providers**

The email address configured in your broadcast or funnel will be used when load balancing multiple API or SMTP Relay connections.&#x20;

This email address will likely need to be authenticated with each email service provider  first.
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F3kXLZrJlHC28lkpQqqgI%2FScreenshot%202023-06-09%20at%209.46.19%20AM.png?alt=media&amp;token=aea99574-832d-429b-95dd-6ae5cbebf706" alt="" width="375"><figcaption></figcaption></figure></div>

{% hint style="info" %}
Contact list domain routing will be disabled by default with the default setting of "All Domains in Contact List" sending all mail through one route.&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FMI92J9I15iFQVCeEOsoK%2FScreenshot%202023-06-09%20at%209.31.14%20AM.png?alt=media&amp;token=9ab47dc2-f891-4212-a9ae-c2c128a211d1" alt=""><figcaption></figcaption></figure>

To route your mail based on the mailbox provider's domain, click Add Domain Route.

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FAuO9wkX6K6vPQfBm3rhi%2FScreenshot%202023-06-14%20at%203.34.37%20AM.png?alt=media&amp;token=47241250-9b1d-4d40-bfc3-fa71d32b8771" alt=""><figcaption></figcaption></figure>

Use the dropdown to select a [domain group](/docs/advanced-postal-route-configuration/contact-list-domain-routing) you've created previously.

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FcEDm3MvyKnp30LlPBGjK%2FScreenshot%202023-06-14%20at%203.26.15%20AM.png?alt=media&amp;token=418c0aa4-b495-42c3-b3e3-3bf809f66aae" alt=""><figcaption></figcaption></figure>

Select an alternative path for delivering mail to this domain.

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F3oNbw7orFcfqzboZTCO5%2FScreenshot%202023-06-14%20at%203.26.46%20AM.png?alt=media&amp;token=b3a59d17-30c8-4825-b2bd-9aafe85dd66f" alt=""><figcaption></figcaption></figure>

Repeat until your postal route is fully optimized according to your delivery strategy.

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FeXCXmHysD0CpXBPLSVWt%2FScreenshot%202023-06-09%20at%2010.00.07%20AM.png?alt=media&amp;token=85ab568d-976a-407d-8bce-96f6a947f5d1" alt=""><figcaption></figcaption></figure>

Use **partitioning** to split your email for the *same* domain group across multiple email service providers or MTA delivery policies.&#x20;

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FRj9xXhwE6WhdVt93FdI2%2FScreenshot%202023-06-14%20at%203.36.54%20AM.png?alt=media&amp;token=d3c6ef19-fca0-4d8f-8365-77ecd67037f6" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Flr4Ptx76DTqGORWSJrQE%2FScreenshot%202023-06-14%20at%203.37.27%20AM.png?alt=media&amp;token=ee6ef8f4-e00a-4c7a-b1be-aab2e9eae8a2" alt=""><figcaption></figcaption></figure>


# Domain throttles

{% hint style="info" %}
**Protect your sending reputation**

Limit the rate of sending to large mailbox providers like Gmail for each postal route in your customer account.
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FfiG92TecICSy8XGtHD0C%2FScreenshot%202024-01-13%20at%204.48.05%E2%80%AFAM.png?alt=media&amp;token=71e0f951-f834-4d34-80c5-a9d47b330514" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Execute a controlled domain warmup**

Cap your daily sending volume and gradually raise it over time as part of your overall delivery strategy, warmup new postal routes and/or new sending domains.
{% endhint %}

{% hint style="info" %}
**Control your CPU utilization when you have a large list on a small server**&#x20;

Imposing a limit on all domains of 10K or 20K per minute keeps your CPUs from maxing out when you have hundreds of thousands of contacts running on an inexpensive VPS with a small number of underpowered CPUs. &#x20;
{% endhint %}

{% hint style="warning" %}
**You must set a valid value for all three limits.**
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FeIBKjixnDTt8LpaV2Tur%2FScreenshot%202023-06-09%20at%208.54.55%20AM.png?alt=media&amp;token=04fae03a-18ae-4641-826b-d9df0372a2b1" alt=""><figcaption></figcaption></figure>

Throttles will be activated instantly and remain in effect until modified, deactivated, or deleted.

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F53wInMGdfoYaObht0dE7%2FScreenshot%202023-06-09%20at%208.55.18%20AM.png?alt=media&amp;token=558d8162-6367-4a21-9c7b-ed337266785e" alt=""><figcaption></figcaption></figure>

To disable throttling click the Actions button and select Deactivate

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FYsIJ0N6EK6HnUNtE5WGd%2FScreenshot%202023-06-09%20at%208.55.29%20AM.png?alt=media&amp;token=f7be1080-512d-450d-b161-5c71f94d87c1" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fz7pUcfewT7PLbuCpVfJw%2FScreenshot%202023-06-09%20at%208.55.39%20AM.png?alt=media&amp;token=46a1d1b2-cfee-4e4c-851f-fa22306b831e" alt=""><figcaption></figcaption></figure>

You can create simultaneous limits for an unlimited number of mailbox provider domains and postal route combinations

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F7qvJXrWrJpbrBjNbIGqL%2FScreenshot%202023-06-09%20at%208.57.01%20AM.png?alt=media&amp;token=b42482e9-507d-421b-ad9e-79fd8039ea01" alt=""><figcaption></figcaption></figure>


# Transactional API

See the Transactional API docs [here](https://app.emaildelivery.com/api/doc)

Transactional docs are also hosted on your installation at your own domain on the email marketing platform frontend&#x20;

Go to Messages -> Transactional -> API Documentation at the bottom of the page

{% hint style="warning" %}
You will only see your API key if you [log in as a user account](/docs/backend-administration/creating-user-accounts) on the frontend, if you impersonate a customer account as a backend admin the API key will be blank
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FYVpJsw3osuszmV0g3qQ1%2FScreenshot%202023-06-09%20at%206.45.34%20AM.png?alt=media&amp;token=3c040be8-2c4b-468f-ae26-c07e9249c14b" alt=""><figcaption></figcaption></figure>


# Transactional SMTP Relay

{% hint style="info" %}
You will only see your API key if you [log in as a user account](/docs/backend-administration/creating-user-accounts) on the frontend, if you impersonate a customer account as a backend admin the API key will be blank.
{% endhint %}

In the email marketing platform, go to **Integrate -> API & SMTP -> SMTP Relay** &#x20;

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F4ls4UMR1IYHYa33oJuXt%2Fimage.png?alt=media&amp;token=e35af455-f425-4ba2-8616-5121a009320a" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FnWb5s21oQGUIcJ5DDfsj%2Fimage.png?alt=media&amp;token=2d75eec1-156e-4179-b90d-dffdccf4d911" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**If you're using Cloudflare for HTTPS, extra steps to** [**enable SMTP Relay** ](/docs/options-for-adding-https/transactional-smtp-relay-requirements-for-cloudflare)**are required.**&#x20;
{% endhint %}

{% hint style="warning" %}
**Attachments are currently not supported for transactional mail**

Image attachments will be removed automatically, you need to include images by using regular HTML the usual way.&#x20;
{% endhint %}

{% hint style="info" %}
**Configure your sending application to use your ESP hostname or IP address and ports 587, 2525, or 8025.**
{% endhint %}

{% hint style="info" %}
**To make a secure encrypted connection, use the TLS extension after connecting via regular SMTP. SSL method is not supported.**&#x20;
{% endhint %}

{% hint style="info" %}
**If a multipart message consists of text and HTML parts, only HTML will be used.**&#x20;

Text parts are unsupported.&#x20;
{% endhint %}

{% hint style="info" %}
**Use your API Key for your username and password.**&#x20;
{% endhint %}

{% hint style="success" %}
**The following standard headers are valid in a transactional message.**
{% endhint %}

* **From**: The from name and from email address, aka the 'Friendly From' or 'From Name'.
* **To**: Specify the recipient's name but **not** their email address.&#x20;
* **Subject**: The message subject line.
* **Reply-To**: Include an optional Reply-To address.

{% hint style="success" %}
**The following platform-specific headers are valid in a transactional message.**
{% endhint %}

* **X-Transactional-Tag**: If left blank, the message will be tracked as “untagged” on the transactional dashboard.
* **X-Transactional-Route**: Specifies a postal route to use. This is required if the customer account has more than one postal route available, otherwise, the message will fail.
* **X-Transactional-Template**: Include a template ID if you want to send this message using a pre-created transactional template.&#x20;
* **X-Auth-APIKey**: Bypass the SMTP AUTH username and password method and authenticate via header instead.
* **X-Transactional-Variables**: Specifies a JSON string to use as an input dictionary for the Jinja2 templating system. For more details on Jinja2 see [our API docs](https://app.emaildelivery.com/api/doc#/transactional/post_transactional_send).&#x20;

{% hint style="danger" %}
**All other headers are automatically discarded and ignored.**
{% endhint %}

{% hint style="success" %}
**You can actually use whatever you want for the Transactional SMTP Relay username.** We recommend using the API Key for the username and password for simplicity of explanation, but the username is actually ignored and discarded and can be anything.
{% endhint %}


# Transactional SMTP Relay: steps to start sending

Everything you need to know to configure a connecting application to send email through your platform using transactional SMTP Relay

* [ ] Create a [Connection](/docs/introduction/getting-ready-to-send) or [MTA policy](/docs/velocity-mta-basics/creating-an-mta-delivery-policy)
* [ ] Create a [Postal Route](/docs/introduction/postal-routes) for your Connection or MTA Policy
* [ ] Create a [Customer Account](/docs/backend-administration/creating-customer-accounts) or use the default Acme Customer
* [ ] Add the Postal Route to the Customer Account
* [ ] Add a [User Account](/docs/backend-administration/creating-user-accounts) under the Customer Account
* [ ] Log in as the User Account in Incognito mode or a second web browser

{% hint style="warning" %}
**You have to log in directly as the User for this next step.**&#x20;

Don't use administrator impersonation mode.&#x20;
{% endhint %}

* [ ] Find your User API Key by clicking **Integrate -> API & SMTP -> SMTP Relay**&#x20;
* [ ] Use the API Key as your username and password&#x20;
* [ ] Connect to your ESP platform DNS hostname or IP address on port 587, 2525, or 8025
* [ ] Use STARTTLS or TLS for your encryption method, or choose no encryption

{% hint style="info" %}
**All three ports accept both TLS and disabled/no encryption.**
{% endhint %}

{% hint style="danger" %}
**TLS is the only supported encryption method - do not select SSL in your application.**
{% endhint %}

{% hint style="info" %}
**Try connecting using your IP address instead of your domain if you run into issues.**
{% endhint %}

{% hint style="info" %}
**Your transactional SMTP messages will be delivered via the Customer's Postal Route.**

Mail comes **into** your Transactional SMTP Relay on port 587, 2525, or 8025 and goes **out of** the Connection or MTA Policy configured in the Postal Route assigned to your Customer Account in the administrative backend.
{% endhint %}

All mail delivered from your ESP platform follows the same pathway:&#x20;

**Broadcast, Funnel, or Transactional Message ->**  **Customer Account -> Postal Route -> API Connection, SMTP Relay Connection, or MTA Policy -> Gmail/Yahoo/Outlook/etc**&#x20;

{% hint style="success" %}
**You can actually use whatever you want for the Transactional SMTP Relay username.**&#x20;

We recommend using the API Key for the username and password for simplicity of explanation, but the username is actually ignored and discarded and can be anything.
{% endhint %}

{% hint style="danger" %}
**If you're using Cloudflare for HTTPS, extra steps to** [**enable SMTP Relay** ](/docs/options-for-adding-https/transactional-smtp-relay-requirements-for-cloudflare)**are required.**&#x20;
{% endhint %}


# Transactional templates

{% hint style="info" %}
**You can create saved templates to use for your transactional messages.**
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FUCFy6o8jhLmu6WdhZ4I1%2FScreenshot%202023-11-24%20at%207.17.14%E2%80%AFPM.png?alt=media&amp;token=e5130878-a54f-4261-8a83-a86f3aa1ef41" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**All of our message editors are supported with transactional templates: drag-and-drop, WYSIWYG, and raw HTML.**&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FdOiSC2dMvDPOKt0viBG9%2FScreenshot%202023-11-24%20at%207.34.01%E2%80%AFPM.png?alt=media&amp;token=fcd46b4f-3171-4a92-92d6-216b95195da8" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Specify your Sender, Subject, and track your message analytics by using a** [**transactional tag**](/docs/transactional/transactional-tags)**.**&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fyt1FU4C4AUi7G6FYA35r%2FScreenshot%202023-11-24%20at%207.40.06%E2%80%AFPM.png?alt=media&amp;token=651a6f44-8913-4099-87bc-0f317dba49f4" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Edit your message template as normal just as you would in a broadcast or funnel.**&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FgEEwOLZ39vnn5YjNM0J3%2FScreenshot%202023-11-24%20at%207.41.02%E2%80%AFPM.png?alt=media&amp;token=4c3605ed-1537-4351-b1d9-541d7d3ef447" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Include your Template ID to use your template with SMTP Relay or API message submission methods.**&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FWg1EwkW1siwbr1ZgFjsi%2FScreenshot%202023-11-24%20at%207.40.06%E2%80%AFPM%20copy.png?alt=media&amp;token=729cadb6-e43e-4817-bf69-4ffce1e5f31e" alt=""><figcaption></figcaption></figure>


# Transactional tags

{% hint style="warning" %}
**If you use a transactional template that has already been tagged, additional tags used in the header or API request are discarded.**
{% endhint %}

Create transactional mail streams with their own analytics by including a tag with the message.&#x20;

Messages sent without a tag will be grouped together as 'untagged' on the transactional dashboard.&#x20;

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FVfHaq83KfcUQq7pfhPl9%2FScreenshot%202023-11-24%20at%209.46.31%E2%80%AFPM.png?alt=media&amp;token=90438dd4-e877-4b1d-a6e7-92b1c72ad089" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Transactional messages can be tagged via SMTP Relay, API, or Template methods.**&#x20;
{% endhint %}

* SMTP Relay can use the header X-Transactional-Tag:&#x20;

```
X-Transactional-Tag: signup
```

* API can use the tag parameter:&#x20;

```
"tag": "signup",
```

* SMTP Relay can use the header X-Transactional-Template:

```
X-Transactional-Template: MsmsEaZZDxYyBJyVXXwA2A
```

* API can use the template parameter:

```
"template": "MsmsEaZZDxYyBJyVXXwA2A",
```

{% hint style="info" %}
**Adding a Message Tag to a transactional template will cause all messages that use this template to be tagged automatically.**
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FXqMsKottinCcEyxzxOUR%2FScreenshot%202023-11-24%20at%207.40.06%E2%80%AFPM.png?alt=media&amp;token=746cd2f1-050d-4bb8-9429-4e68aa871a96" alt=""><figcaption></figcaption></figure>


# Use SWAKS for testing and troubleshooting

{% hint style="info" %}
**SWAKS is a vital tool to learn for testing and troubleshooting your ESP platform.**

When you use SWAKS for troubleshooting, you're reducing variables and confounders that may be caused by the software you're introducing into your email ecosystem.
{% endhint %}

Install SWAKS using one of the methods on their installation page:

{% embed url="<https://www.jetmore.org/john/code/swaks/installation.html>" %}

Test to see if you can connect to a port on your ESP platform using the DNS hostname:

{% code overflow="wrap" %}

```
swaks --server transactional.fivetacofiesta.com --port 587 -q connect
```

{% endcode %}

A successful connection will look something like the following:

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F2vZKGJrQdzsjQ6ckCYyd%2Fimage.png?alt=media&amp;token=3d961a50-8bc0-44c9-899c-54c55a0eda51" alt=""><figcaption></figcaption></figure>

If connecting using the DNS hostname fails, try the IP address of your VPS instead:

```
swaks --server 1.2.3.4 --port 587 -q connect
```

**\*\*\* Note:** You must use the real IP address of your Linux VPS above, not "1.2.3.4", it's a placeholder.&#x20;

{% hint style="info" %}
**SWAKS syntax basics**

Type swaks --help to see some example use cases and documentation.&#x20;
{% endhint %}

```
--from sender@my.domain.com   
--to recipient@domain.com  
--server esp.domain.com    
--port 587                 
--auth LOGIN               
--auth-user API Key        
--auth-password API Key    
--header "Subject: hello from SWAKS"
--body "This is a SWAKS demo" 
```

Use the real email address you want to send this message from here:

```
--from sender@my.domain.com
```

Use the real email address you want to send this message to here:

```
--to recipient@domain.com  
```

Your ESP platform DNS or IP:

```
--server esp.domain.com 
```

Your ESP platform listens for STMP Relay on Ports 587, 2525, and 8025:

```
--port 587 
```

Tell your ESP platform to use a username and password for authentication:

```
--auth LOGIN 
```

Use your user API Key for your username:

```
--auth-user S8PHFSJyyc7GuYbJ2SHFVq
```

**\*\*\* Note:** You must use your real user account API Key above, not "S8PHFSJyyc7GuYbJ2SHFVq", it's a placeholder.

Use your user API Key for your password:

```
--auth-password S8PHFSJyyc7GuYbJ2SHFVq
```

**\*\*\* Note:** You must use your real user account API Key above, not "S8PHFSJyyc7GuYbJ2SHFVq", it's a placeholder.

{% hint style="info" %}
**Putting it all together:**
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FCLLVU2fbdCs1madueXzU%2Fimage.png?alt=media&amp;token=7cd7f3d9-3b9a-4ef9-a47b-f7ee4c9a90ac" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**A successful message will look something like the following:**&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FzISaCcxTt2oAkK5Niw9L%2Fimage.png?alt=media&amp;token=f869357c-58a4-498b-8a70-8f1de5c6991f" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Using your ESP platform's custom SMTP headers with SWAKS:**
{% endhint %}

Tag your message:

<pre><code><strong>--header "X-Transactional-Tag: SWAKS"
</strong></code></pre>

Choose a postal route for this message:

```
--header "X-Transactional-Route: AjdytEc4dzfYhuk9nWCq6Y"
```

**\*\*\* Note:** You must use the real postal route ID above, not "AjdytEc4dzfYhuk9nWCq6Y", it's a placeholder.

Use a transactional template for this message instead of --body:

```
--header "X-Transactional-Template: MsmsEaZZDxYyBJyVXXwA2A"
```

**\*\*\* Note:** You must use the real transactional template ID above, not "MsmsEaZZDxYyBJyVXXwA2A", it's a placeholder.

{% hint style="success" %}
**ChatGPT is an expert SWAKS user.**&#x20;

Ask it how to do *anything* you need to test with SWAKS and it will know.&#x20;
{% endhint %}


# The ESP Platform IP can't be used with the MTA

{% hint style="warning" %}
You can't put the IP that's in use by the ESP in velocity-install/conf/ipaddresses
{% endhint %}

This is a very common oversight that will cause Velocity MTA to fail to start because the same ports are required by the ESP and the MTA.

If the MTA and the ESP try to share an IP address, whichever one is started first will block the ports needed by the other one, preventing it from starting.&#x20;


# PTR Records and Reverse DNS

Most marketers are familiar with DNS names that resolve to an IP address.

For instance:

extmta2-new\.americanexpress.com resolves to 148.173.96.85 as you can see here:

{% embed url="<https://www.whatsmydns.net/#A/extmta2-new.americanexpress.com>" %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FiwFvrXaYzyUXYROloo7D%2FScreenshot%202024-01-09%20at%2010.38.47%E2%80%AFPM.png?alt=media&amp;token=a70bd1a9-a01e-4184-98a7-1b77d5c34e3a" alt=""><figcaption></figcaption></figure>

This is known as a DNS A record, often the type of record you create in your DNS hosting provider when you want to add a domain to your website. In the email space, this is sometimes known as the "forward ".&#x20;

As the postmaster of an MTA,  there's another type of record you'll need to familiarize yourself with that's just as important as the A record in the email space; it's called the PTR, also known as "reverse" DNS.&#x20;

In our example above, we see that extmta2-new\.americanexpress.com has an A record that resolves to 148.173.96.85, but when you do a PTR lookup, you'll see 148.173.96.85 also has a DNS record, and that it resolves to extmta2-new\.americanexpress.com.&#x20;

{% embed url="<https://www.whatsmydns.net/#PTR/148.173.96.85>" %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FMCHPttGFAld1AFSOuAmC%2FScreenshot%202024-01-09%20at%2010.37.05%E2%80%AFPM.png?alt=media&amp;token=ac49865b-def3-4592-b64d-8218fd72364a" alt=""><figcaption></figcaption></figure>

The A record for extmta2-new\.americanexpress.com is 148.173.96.85 and the PTR record for 148.173.96.85 is extmta2-new\.americanexpress.com.

They match.&#x20;

{% hint style="info" %}
You'll occasionally see the acronym FCrDNS used to describe the necessity of the PTR  record matching the A record, which stands for "Forward-Confirmed Reverse DNS."
{% endhint %}

Here's why:

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fb78Dp2Z9hfTQKjfUNWbW%2FScreenshot%202024-01-09%20at%208.21.25%E2%80%AFPM.png?alt=media&amp;token=379a7676-3815-44b4-83b1-11d6279e83fb" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
If you don't have a PTR record for your sending IP address, and your PTR and A record of your sending domain don't match, Gmail will reject your mail.&#x20;
{% endhint %}

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FHgPGBq6gasVdTpcvF0Aj%2FScreenshot%202024-01-10%20at%202.58.52%E2%80%AFPM.png?alt=media&amp;token=5387015c-7233-4a7d-b92d-0d6132582be0" alt="" width="563"><figcaption></figcaption></figure></div>

It's important to create your DNS records before you install Velocity MTA, add your IP addresses, and send your first test message.&#x20;

When Gmail rejects your message for reasons such as bad or missing DNS records or authentication failures, if you're a first-time sender, this erroneous result may get cached, preventing you from successfully delivering a message for at least 24 hours after you've fixed the problem.&#x20;

Don't risk it.&#x20;

{% hint style="info" %}
The PTR record can only be set by the owner of the IP address, which will likely be your VPS provider.
{% endhint %}

You can't set the PTR record in Cloudflare, Namecheap, GoDaddy, or anywhere you normally configure your DNS A record.

Some hosting providers allow you to configure your PTR record right in the control panel, but it's not uncommon that it can only be done by opening a ticket. This is the case with Racknerd.

See the next section [Sending Domain and PTR must match](/docs/what-you-need-to-know-before-you-install-velocity-mta/sending-domain-and-ptr-must-match) for the recommended DNS configuration.&#x20;


# Sending Domain and PTR must match

{% hint style="info" %}
Make sure you read [PTR Records and Reverse DNS](/docs/what-you-need-to-know-before-you-install-velocity-mta/ptr-records-and-reverse-dns) before this page.&#x20;
{% endhint %}

Always use subdomains in your MTA configuration.&#x20;

If your domain is bobshotdogs.com, and your IP address is 1.2.3.4, create a DNS A record called velocity.bobshotdogs.com pointing to 1.2.3.4.&#x20;

Next, open a support ticket with the owner of your IP addresses, usually your VPS hosting provider, and ask for a PTR record to be created for IP address 1.2.3.4 with hostname velocity.bobshotdogs.com.&#x20;

When you add your Velocity MTA server in the UI, make sure you specify the correct DNS records you just created.&#x20;

The Header Domain A record and PTR record for the IP set by the hosting provider must match.&#x20;

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FXxTvDQPTskkUgqLeFMGA%2FScreenshot%202024-01-09%20at%2011.11.41%E2%80%AFPM.png?alt=media&amp;token=a796b0f3-d725-43f4-8b71-c5c8fb17e8f5" alt=""><figcaption></figcaption></figure>


# Google Postmaster Tools

As the Postmaster of your own MTA, it's vital to sign up for [Google Postmaster Tools](https://www.gmail.com/postmaster/).&#x20;

The only person creating your sender reputation now is you, and without insight into your reputation, you won't know there's a problem until it's already too late.&#x20;

You'll see reporting on your IP reputation, your domain reputation, your complaint rate, any authentication and encryption failures, and whether Google thinks you're sending wanted mail.&#x20;

You can also invite colleagues and grant them access to your reports, and be added to the accounts of other senders you allow onto your platform.&#x20;

Google Postmaster Tools works by authenticating your domain, so you can see the same reporting on any ESP you send email from, showing you the reputation of your IP addresses at your ESP just the same as with your MTA.&#x20;

These are the types of reports you'll see with Google Postmaster Tools:

{% hint style="info" %}
Use Google Postmaster Tools as a proxy for how your mail is being scored more generally across all mailbox providers.&#x20;
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FeWuLCPGwX2O44EEEywJ4%2FScreenshot%202024-01-03%20at%206.11.31%E2%80%AFPM.png?alt=media&amp;token=c4dde188-3dae-473f-9798-f86a216b7302" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F8N8D2He8KragETOSxetS%2FScreenshot%202024-01-04%20at%208.58.28%E2%80%AFAM.png?alt=media&amp;token=39f49523-f65c-4bd7-bc24-9073a7379139" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FC3sTbJk4LkLkfk17WCwK%2FScreenshot%202024-01-04%20at%208.59.48%E2%80%AFAM.png?alt=media&amp;token=20da7dce-68e1-45ae-993e-6f2db48b75aa" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FNzF57x01TT7CrlyjYUap%2FScreenshot%202024-01-03%20at%206.12.48%E2%80%AFPM.png?alt=media&amp;token=55fc3cf6-20fc-4934-b66d-bf10b509855e" alt=""><figcaption></figcaption></figure>


# MTA link domain points to the sending IP, not the ESP IP

Velocity MTA is more than just an MTA, it's actually a Docker container with multiple components.

One of these components is a webserver that handles all incoming web traffic for email sent through the MTA completely independently of the ESP platform.&#x20;

This means the IP address you're using in your MTA to send email also must be the IP address you use on your link domain which is used in your email templates.

In our example below, the sending IP used by the MTA is 1.2.3.4, the Header Domain velocity.bobshotdogs.com would be a DNS A record pointing to 1.2.3.4, and the link domain links.bobshotdogs.com would also be an A record pointing to 1.2.3.4.&#x20;

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F5lOO395cspAeUVPE43Ou%2FScreenshot%202024-01-09%20at%2011.57.52%E2%80%AFPM.png?alt=media&amp;token=79fdc393-5f24-4232-bc30-186d22573532" alt=""><figcaption></figcaption></figure>

{% hint style="danger" %}
If links.bobshotdogs.com has a DNS A record pointing to the IP address of the VPS the ESP platform is running on instead of an MTA sending IP, many things will not work correctly.&#x20;
{% endhint %}

You can use any Sending IP properly configured in the MTA for a link domain DNS record.&#x20;

The link domain doesn't have to use the same Sending IP on the same row in the Velocity MTA Server page in the UI that matches the Header Domain; the link domain DNS A record can point to any Sending IP available, including a Sending IP associated with a different Header Domain.  &#x20;


# How to use Velocity MTA as an SMTP Relay

All email sent through the ESP platform must originate with a Customer Account, including mail sent using Velocity MTA.&#x20;

You can't connect to the MTA directly and use SMTP Relay while going outside of the ESP platform.&#x20;

To use SMTP Relay with Velocity MTA, you must add the MTA to a Postal Route, give a Customer Account access to that Postal Route, and then use SMTP Relay through that Customer Account.&#x20;

SMTP Relay application -> Velocity MTA <mark style="color:red;">❌</mark>

SMTP Relay application -> Customer Account -> Postal Route -> Velocity MTA ✅

See instructions on using SMTP Relay with Velocity MTA below:

{% content-ref url="/pages/Zb1Y4kmTg6ZSamRV89En" %}
[Transactional SMTP Relay: steps to start sending](/docs/transactional/transactional-smtp-relay-steps-to-start-sending)
{% endcontent-ref %}

{% content-ref url="/pages/9dicqeeYH5F8cv0kteiM" %}
[Transactional SMTP Relay](/docs/transactional/transactional-smtp-relay)
{% endcontent-ref %}


# Getting ready to send

**The following steps will be required for an end-to-end Velocity MTA deployment:**&#x20;

* [ ] Add a [PTR record ](/docs/what-you-need-to-know-before-you-install-velocity-mta/ptr-records-and-reverse-dns)for your Sending IP at your server hosting provider (aka Reverse DNS).&#x20;
* [ ] [Install Velocity MTA](/docs/velocity-mta-basics/installing-velocity-mta) on a Ubuntu Linux server with at least one IP address that can be used for sending email.
* [ ] Connect your Velocity MTA server in the ESP platform administrator UI under MTA -> Velocity MTA Servers.
* [ ] [Configure DKIM](/docs/velocity-mta-basics/configure-dkim).
* [ ] Add SPF and DMARC authentication to your DNS hosting provider, such as Cloudflare, Namecheap, or GoDaddy, by using ChatGPT or another online generator to create your TXT records.
* [ ] Create an MTA Delivery Policy in the ESP platform administrator UI.
* [ ] Assign the MTA Delivery Policy to a [Postal Route](/docs/introduction/postal-routes).
* [ ] Assign the Postal Route to a Customer Account.
* [ ] [Send a test message](/docs/velocity-mta-basics/sending-your-first-test-message) from the Customer Account through the email marketing platform using the broadcast test widget.
* [ ] Monitor the velocity-install/logs/velocity.log file.


# Velocity.log is vital to your success

{% hint style="info" %}
**Velocity.log knows all and sees all.**

The most important component in the entire Velocity MTA ecosystem is velocity-install/logs/velocity.log.
{% endhint %}

* Want to know if your configuration change went through? Check velocity.log.&#x20;
* Want to know why your message didn't get delivered? Check velocity.log
* Want to know how an unsubscribe happened you swear you didn't do? Check velocity.log
* Want to know why opens or clicks aren't showing up? Check velocity.log
* Want a real-time look into the email delivery "black hole"? Check velocity.log
* Want to open a ticket? Please check velocity.log

All outgoing email, incoming email, opens, clicks, and unsubscribes for mail sent through Velocity MTA are stored for eternity in the same file, to see the most recent 100 log entries do:&#x20;

```
tail -100 /root/velocity-install/logs/velocity.log 
```

Upon startup, you should see output similar to the following

```
cdd9bc69586595e21c3404faf9814e2d534705de022132bfcf27ac33a427d114
License is activated!
:TRACE:::Starting
```

When changes to policies, server settings, or ip warmups have been pushed from the platform installation backend MTA UI you can verify they were received if you see output similar to the following&#x20;

```
:API:::172.50.100.1:33552 POST /settings
:API:::Finished writing settings
```

When sending a test message through the email marketing broadcast test widget, you should see output similar to the following for troubleshooting purposes

{% code overflow="wrap" %}

```
:API:::172.50.100.1:37458 POST /send-addr
:TRACE:::looking up MX for gmail.com
:TRACE:::gmail.com has 5 MX servers
:TRACE:::looking up A for gmail-smtp-in.l.google.com.
:TRACE:::IPs for gmail-smtp-in.l.google.com.: []string{"74.125.200.26", "2404:6800:4003:c00::1a"}

test:TRACE:secretseedemail@gmail.com:192.168.100.1:mail.vitaminpowerhouse.com:Connecting to gmail.com -> gmail-smtp-in.l.google.com. (74.125.200.26)

test:SEND:secretseedemail@gmail.com:192.168.100.1:mail.vitaminpowerhouse.com:Message delivered in 6.374919129s
```

{% endcode %}

{% hint style="warning" %}
**Test messages receive special handling**

Messages using the test widget in broadcasts don't appear in the [ip delivery reports](/docs/velocity-mta-continuing-education/ip-delivery-reports) or [mail queue management](/docs/velocity-mta-continuing-education/mail-queue-management), they receive the highest priority and bypass all other outstanding mail. This also applies to funnels.&#x20;
{% endhint %}

When sending bulk production mail you should see output similar to the following

{% code overflow="wrap" %}

```
POST /send-lists

YRi9Ah7sfE5ALgRH9UbY3s:TRACE:::Reading http://emailplatformdomain.com/transfer/lists/YRi9Ah7sfE5ALgRH9UbY3s-TyRbwf359f4MXW6mDxEnKv/0-eggplantmail.com-KBRBk9yKdsdJdFpmLG4LVt-MXyBAcQLuAs34F6r8Q9B6z-16-00000000.blk

YRi9Ah7sfE5ALgRH9UbY3s:TRACE:::Reading http://emailplatformdomain.com/transfer/lists/YRi9Ah7sfE5ALgRH9UbY3s-TyRbwf359f4MXW6mDxEnKv/0-parmesanmail.com-KBRBk9yKdsdJdFpmLG4LVt-MXyBAcQLuAs34F6r8Q9B6z-16-00000000.blk

Reading /conf/send-YRi9Ah7sfE5ALgRH9UbY3s-MXyBAcQLuAs34F6r8Q9B6z-eggplantmail.com-0/list-00000000.blk

YRi9Ah7sfE5ALgRH9UbY3s:TRACE:::Uploaded send log file /logs/send-YRi9Ah7sfE5ALgRH9UbY3s.log-1681444242-sending
```

{% endcode %}

{% hint style="info" %}
**SEND, DEFER, SOFT, HARD**

There are four types of potential delivery outcomes recorded in the velocity.log file&#x20;
{% endhint %}

**SEND** means successful message delivery

{% code overflow="wrap" %}

```
SEND:disposabletemporary+hello@gmail.com:192.168.100.1:mail.vitaminpowerhouse.com:Message delivered in 2.140289308s
```

{% endcode %}

**DEFER** means a sending pause has been triggered and shows you the complete error code and deferral message returned by the mailbox provider

{% code overflow="wrap" %}

```
DEFER:misunderestimated@yahoo.com:192.168.100.1:mail.vitaminpowerhouse.com:421 4.7.0 [TSS04] Messages from 192.168.100.1 temporarily deferred 
```

{% endcode %}

**SOFT** shows you the complete error code and temporary bounce message returned by the mailbox provider

{% code overflow="wrap" %}

```
SOFT:misunderestimated12345@gmail.com:192.168.100.1:mail.vitaminpowerhouse.com:452 4.2.2 The email account that you tried to reach is over quota. Please direct
4.2.2 the recipient to
4.2.2  https://support.google.com/mail/?p=OverQuotaTemp h3-20020a05600c350300b003f31a440e2fsi1991773wmq.13 - gsmtp (Rcpt) in 1.480220065s
```

{% endcode %}

**HARD** shows you the complete error code and permanent bounce reason returned by the mailbox provider

{% code overflow="wrap" %}

```
HARD:bademailonpurpose123000@gmail.com:192.168.100.1:mail.vitaminpowerhouse.com:550 5.1.1 The email account that you tried to reach does not exist. Please try
5.1.1 double-checking the recipient's email address for typos or
5.1.1 unnecessary spaces. Learn more at
5.1.1  https://support.google.com/mail/?p=NoSuchUser f7-20020a7bcd07000000b003f0ae6369e2si4683916wmj.234 - gsmtp (Rcpt) in 1.431423553s
```

{% endcode %}

Web activity for opens, clicks, and unsubscribes will be logged as HTTP GET requests, you should see output similar to the following

<pre data-overflow="wrap"><code><strong>GET /l?t=adviser&#x26;r=4KQbmSaDsWWWm8gvs-11DRR&#x26;c=nHet3QX8kNc8BdjtbTmo5x&#x26;u=45CCjYmMhYqNhpCX0tfF&#x26;l=J8VrP7iaiVoL2PeNthk8UG Mozilla/5.0 (iPhone; CPU iPhone OS 16_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.4 Mobile/15E148 Safari/604.1
</strong>
GET /l?t=adviser&#x26;r=4KQbmSaDsWWWm8gvs-11DHW&#x26;c=avDvnrUNfeHQSu8ZXppZYW&#x26;u=xaukrq6spKeymw&#x26;l=LCHLfWNEKcRy78ihbc74up Mozilla/5.0 (Linux; Android 12; SAMSUNG SM-S124DL) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/20.0 Chrome/106.0.5249.126 Mobile Safari/537.36

GET /l?t=bend&#x26;r=4KQbmSaDsWWWm8gvs-11DR8&#x26;c=nHet3QX8kNc8BdjtbTmo5x&#x26;u=n_z3_u3y_ubx-sD1uQ YahooMailProxy; https://help.yahoo.com/kb/yahoo-mail-proxy-SLN28749.html

GET /l?t=bend&#x26;r=4KQbmSaDsWWWm8gvs-11DDK&#x26;c=T6yLhvtUJy5NzEARwRj3hq&#x26;u=h-7m6ejp9Oz-9-K22Q Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)
</code></pre>

Complaints are processed by the [incoming email MX server](/docs/velocity-mta-continuing-education/incoming-email-mx-server)


# Installing Velocity MTA

{% hint style="info" %}
Installation can occur on any Ubuntu Linux server with an AMD64-compatible or ARM64 CPU.&#x20;
{% endhint %}

{% hint style="danger" %}
&#x20;Installation must be run as **root**. `sudo` is unsupported.
{% endhint %}

{% hint style="success" %}
**Velocity MTA can run on an unlimited number of remote servers.**

Velocity MTA can run on unlimited remote servers that all point back to one emaildelivery.com ESP platform installation.
{% endhint %}

{% hint style="success" %}
**Velocity MTA can run on the same server as the ESP platform.**

However, Velocity MTA needs to run on a different *ip address* than the ESP platform.\
Find more information on the explanation behind this limitation [here](https://docs.emaildelivery.com/docs/resolving-port-conflicts-with-a-second-ip).
{% endhint %}

#### Download and unpack the installation archive:

**Intel/AMD:**

```bash
curl -LO https://github.com/emaildelivery/edcom-ce/releases/latest/download/velocity-install-amd64.tgz
tar -xzvf velocity-install-amd64.tgz
cd velocity-install
```

**ARM/AArch64:**

```bash
curl -LO https://github.com/emaildelivery/edcom-ce/releases/latest/download/velocity-install-arm64.tgz
tar -xzvf velocity-install-arm64.tgz
cd velocity-install
```

{% hint style="warning" %}
**For Velocity MTA to start, all three configuration files must exist.**
{% endhint %}

If any of these files are missing, Velocity MTA will crash with ugly error messages:

* conf/ipaddresses
* conf/receiving\_domains
* conf/mta.conf

**Create the mta.conf file:**

```
cp conf/mta.defaults.conf conf/mta.conf 
```

There are only three settings in mta.conf:

* Platform URL
* Management IP
* MTA Password

{% hint style="info" %}
**Platform URL**

This is the URL to your ESP platform installation, entered exactly as it is in your web browser. <https://esp.yourdomain.com> if you've enabled SSL or <http://esp.yourdomain.com> if you haven't reached that step yet in your ESP configuration.&#x20;
{% endhint %}

{% hint style="info" %}
**Management IP**

This is the IP you used to connect to this server with SSH. The "Primary" or "Main" IP.&#x20;
{% endhint %}

{% hint style="warning" %}
The Management IP is NOT the IP of your ESP platform; it's the IP of the server you're on right now, where you're configuring the MTA.
{% endhint %}

{% hint style="success" %}
**The Management IP can&#x20;*****also*****&#x20;be used as a sending IP.**

The Management IP is not "reserved", it can be used for sending email with the MTA. However, when running on the same server as the ESP platform, the Velocity MTA Management IP cannot be the ESP platform's IP address, as explained [elsewhere](https://docs.emaildelivery.com/docs/resolving-port-conflicts-with-a-second-ip) in our documentation.
{% endhint %}

{% hint style="info" %}
**MTA Password**

This password must match the password you enter in the ESP platform Velocity MTA Server configuration.&#x20;
{% endhint %}

**Create the ipaddresses file:**

Add a list of sending IP addresses in `conf/ipaddresses`

These are the IP addresses you'll use to send email from on the MTA.&#x20;

The format for the `conf/ipaddresses` file is dead simple, one IP address per line.

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FojDVX29s5W8aOt2C5Yrq%2FScreenshot%202023-10-20%20at%203.43.46%E2%80%AFAM.png?alt=media&amp;token=7a34c805-327e-48d8-9511-77e73128ddd2" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Your Management IP can be your only sending IP in conf/ipaddresses, or you can request multiple IP addresses from your server provider. &#x20;
{% endhint %}

{% hint style="warning" %}
**Make sure extra IPs are configured&#x20;*****on*****&#x20;your server, not just provisioned&#x20;*****to*****&#x20;your server.**

When your server hosting provider provisions you more IPs, they don't automatically "just work" on your server. Someone has to enable them in Linux once they've been assigned. ChatGPT can tell you exactly what to do here, or you can try opening a ticket with your hosting provider and see if they will do it for you, if all else fails there's fiverr. Don't ask us, we'll just ask ChatGPT and tell you what that dude said.&#x20;
{% endhint %}

{% hint style="info" %}
**conf/receiving\_domains**

Receiving domains will accept feedback loop complaints, bounces, or email replies and store each message as a text file in the velocity-install/mail/new directory. This is known as Maildir format.&#x20;
{% endhint %}

{% hint style="danger" %}
All domains not in the conf/receiving\_domains file will have email delivery attempts refused, otherwise your disk will fill up with malware, spam, and exploit attempts.&#x20;
{% endhint %}

**Create the receiving\_domains file:**

Create a list of domains to accept incoming email for spam complaints, bounces, and other replies in `conf/receiving_domains`

The format for the `conf/receiving_domains` file is dead simple, one domain per line, including subdomain if applicable.

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FoQC6HBHy3PXpfJLymzB3%2FScreenshot%202023-10-20%20at%204.22.23%E2%80%AFAM.png?alt=media&amp;token=03acc1f5-1de2-4137-adf8-aa78eae6bbf7" alt=""><figcaption></figcaption></figure>

#### Docker Compose is a prerequisite

{% hint style="warning" %}
This optional next step will uninstall any older Docker versions.
{% endhint %}

{% hint style="danger" %}
This step is unnecessary if you're running Velocity MTA on the same server as the ESP, where Docker has already been installed.&#x20;
{% endhint %}

A Docker install script for Ubuntu is included for convenience:

```
./install_docker_on_ubuntu.sh
```

Load the Velocity MTA Docker Images:

```
./load_images.sh
```

Finally, start Velocity MTA:

```
./restart.sh
```

Verify Velocity MTA started properly:

```
docker logs edcom-velocity
```

Check the log file:

```
cat logs/velocity.log 
```

{% hint style="success" %}
Velocity MTA is running!&#x20;

You'll need to add your new Velocity MTA server to your ESP Platform to start sending email.
{% endhint %}


# Installing Velocity MTA (New to Linux)

{% hint style="info" %}
Installation can occur on any Ubuntu Linux server with an AMD64-compatible or ARM64 CPU.&#x20;
{% endhint %}

{% hint style="info" %}
Technically any flavor of Linux is compatible but please just use Ubuntu if you can. We get tons of support tickets, don't make us have to figure out why Alma is doing the weird thing again.&#x20;
{% endhint %}

{% hint style="success" %}
**Velocity MTA can run on unlimited remote servers.**

Velocity MTA has its own license and can run on unlimited remote servers that all point back to one emaildelivery.com ESP platform installation.
{% endhint %}

{% hint style="success" %}
**Velocity MTA can run on the same server as the ESP platform.**

However, Velocity MTA needs to run on a different *ip address* than the ESP platform.\
Find more information on the explanation behind this limitation [here](https://docs.emaildelivery.com/docs/resolving-port-conflicts-with-a-second-ip).
{% endhint %}

[https://github.com/emaildelivery/edcom-ce/releases/download/v1.0.0/edcom-install-amd64.tgz<br>](<https://github.com/emaildelivery/edcom-ce/releases/download/v1.0.0/edcom-install-amd64.tgz&#xA;>)

To install and configure the MTA you'll need to familiarize yourself with the following concepts in advance:

* [ ] Using SSH to access a Linux VPS
* [ ] Using nano to edit text files in Linux

Check out some YouTube tutorials if necessary, once you have the ability to connect to a Linux VPS and edit text files, our documentation will give you the exact commands you need to run, so there won't be any missing information that prevents you from completing your MTA setup and configuration.&#x20;

ChatGPT knows Linux better than any human and is a hugely underrated resource for all Linux questions, technical questions about email delivery, and all of the topics applicable to an MTA. &#x20;

{% hint style="warning" %}
**You'll need your IP address and root password from your server hosting provider for this next step.**

Don't copy and paste this exact command, it's just an example using a placeholder, 1.2.3.4 would be the IP of your own server here.
{% endhint %}

SSH into your server where the IP addresses to be used with the MTA are assigned:

```
ssh root@1.2.3.4 
```

{% hint style="warning" %}
**When you enter your password you won't see anything on the screen.**

This is normal. Your root password isn't shown so that someone looking over your shoulder can't see it.&#x20;
{% endhint %}

```
root@1.2.3.4's password:
```

Once you've successfully authenticated as the root user you'll find yourself at a prompt that looks something like the below, which will be slightly different for each server provider.

Digital Ocean:

```
root@ubuntu-s-2vcpu-2gb-amd-sfo3-01:~#  
```

Racknerd

```
root@racknerd-b019313:~#
```

Log into our AppSumo portal where your download links are at <https://appsumo.emaildelivery.com/>

Click the copy icon for the **MTA LICENSE**&#x20;

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FZ41dZs2o4ha7pd8nIeRY%2FScreenshot%202023-10-20%20at%202.54.07%E2%80%AFAM.png?alt=media&amp;token=717aa608-6e6a-4056-a925-1610016c1491" alt=""><figcaption></figcaption></figure>

Paste the download link from your AppSumo portal into the command prompt on your Linux server:

{% hint style="warning" %}
The below is only an example, you need to use the real download link from your own AppSumo portal.
{% endhint %}

{% code overflow="wrap" %}

```
root@ubuntu-s-2vcpu-2gb-amd-sfo3-01:~# curl -L https://api.keygen.sh/v1/accounts/5b5914e5-3f64-439e-af80-b4404f2eb853/artifacts/velocity-install.tgz -H 'Authorization: License 7EB0BD-6-A2C170-36-V3' -o velocity-install.tgz
```

{% endcode %}

This will download a file called velocity-install.tgz onto your server, you should recognize this process from when you installed the ESP platform previously.&#x20;

{% hint style="info" %}
In Linux a tgz file is like a zip file or a rar, it's an archive file.&#x20;
{% endhint %}

To extract the Velocity MTA archive run the following command:

```
tar xzvf velocity-install.tgz 
```

You should see output similar to the following:

```
velocity-install/
velocity-install/docker-compose.yml
velocity-install/VERSION
velocity-install/conf/
velocity-install/conf/mta.defaults.conf
velocity-install/images/
velocity-install/images/edcom-velocity.tgz
velocity-install/install_docker_on_ubuntu.sh
velocity-install/restart.sh
velocity-install/load_images.sh
velocity-install/mail/
velocity-install/README
velocity-install/logs/

```

Velocity MTA is self-contained within one directory called velocity-install, similar to the ESP platform.&#x20;

Change directory to velocity-install:

```
cd velocity-install
```

{% hint style="info" %}
**Creating the conf/mta.conf file**

The configuration file for the MTA is mta.conf. You'll need to create it by making a copy of the mta.defaults.conf file to get started. &#x20;
{% endhint %}

```
cp conf/mta.defaults.conf conf/mta.conf 
```

{% hint style="warning" %}
The mta.defaults.conf file exists so you can 'start over' with a new properly formatted mta.conf file as a troubleshooting step.&#x20;
{% endhint %}

Now you're going to need to edit the mta.conf file with nano, a popular Linux text file editor:

```
nano conf/mta.conf
```

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FjGIXgRFMD1jeq1EAPfOR%2FScreenshot%202023-10-20%20at%203.17.09%E2%80%AFAM.png?alt=media&amp;token=a9095348-d1aa-4a70-8acf-12de636ebd7a" alt=""><figcaption></figcaption></figure>

There are only four settings in mta.conf:

{% hint style="info" %}
**Platform URL**

This is the URL to your ESP platform installation, entered exactly as it is in your web browser. <https://esp.yourdomain.com> if you've enabled SSL or <http://esp.yourdomain.com> if you haven't reached that step yet in your ESP configuration.&#x20;
{% endhint %}

{% hint style="info" %}
**Management IP**

This is the IP you used to connect to this server with SSH. The "Primary" or "Main" IP.&#x20;
{% endhint %}

{% hint style="warning" %}
The Management IP is ***NOT*** the IP of your ESP platform, it's the IP of the server you're on right now where you're doing this MTA configuration.
{% endhint %}

{% hint style="success" %}
**The Management IP can&#x20;*****also*****&#x20;be used as a sending IP.**

The Management IP is not "reserved", it can be used for sending email with the MTA. However, when run on the same server as the ESP platform, the Management IP must be separate from the IP being used by the ESP platform due to reasons explained [elsewhere](https://docs.emaildelivery.com/docs/resolving-port-conflicts-with-a-second-ip) in our documentation.
{% endhint %}

{% hint style="info" %}
**MTA Password**

This password must match the password you enter in the ESP platform Velocity MTA Server configuration.&#x20;
{% endhint %}

{% hint style="info" %}
**License Key**

This is your MTA license key from the <https://appsumo.emaildelivery.com> portal. Make sure this is ***not*** **the ESP platform** license or you will end up opening a ticket and asking us why the MTA isn't working and be sad.
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FzF9b7lWVHFIS5QYq38xT%2FScreenshot%202023-10-20%20at%203.35.31%E2%80%AFAM.png?alt=media&amp;token=c405658e-5b97-4ba4-900f-e0b133f77e72" alt=""><figcaption></figcaption></figure>

Save your mta.conf file changes, remember to watch a tutorial on using nano in Linux if this is unfamiliar to you.&#x20;

Now you need to tell Velocity MTA which IP addresses are available to use on the server for sending email by editing the conf/ipaddresses file:

```
nano conf/ipaddresses
```

The format for the conf/ipaddresses file is dead simple: one IP address per line

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FojDVX29s5W8aOt2C5Yrq%2FScreenshot%202023-10-20%20at%203.43.46%E2%80%AFAM.png?alt=media&amp;token=7a34c805-327e-48d8-9511-77e73128ddd2" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Your Management IP can be your only sending IP in conf/ipaddresses, or you can request multiple IP addresses from your server provider. &#x20;
{% endhint %}

{% hint style="warning" %}
**Make sure extra IPs are configured&#x20;*****on*****&#x20;your server, not just provisioned&#x20;*****to*****&#x20;your server.**

When your server hosting provider provisions you more IPs, they don't automatically "just work" on your server. Someone has to enable them in Linux once they've been assigned. ChatGPT can tell you exactly what to do here, or you can try opening a ticket with your hosting provider and see if they will do it for you, if all else fails there's fiverr. Don't ask us, we'll just ask ChatGPT and tell you what that dude said.&#x20;
{% endhint %}

Save your conf/ipaddresses file changes, remember to watch a tutorial on using nano in Linux if this is unfamiliar to you.&#x20;

{% hint style="info" %}
**conf/receiving\_domains**

Receiving domains will accept feedback loop complaints, bounces, or email replies and store each message as a text file in the velocity-install/mail/new directory. This is known as Maildir format.&#x20;
{% endhint %}

Now you need to tell Velocity MTA which domains to accept email replies for by creating a list of receiving domains.&#x20;

Do this by editing the conf/receiving\_domains

```
nano conf/receiving_domains
```

The format for the conf/receiving\_domains file is dead simple: one domain per line, including subdomain if applicable:

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FoQC6HBHy3PXpfJLymzB3%2FScreenshot%202023-10-20%20at%204.22.23%E2%80%AFAM.png?alt=media&amp;token=03acc1f5-1de2-4137-adf8-aa78eae6bbf7" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
All domains not in the conf/receiving\_domains file will have email delivery attempts refused, otherwise your disk will fill up with malware, spam, and exploit attempts.&#x20;
{% endhint %}

Save your conf/receiving\_domains file changes, remember to watch a tutorial on using nano in Linux if this is unfamiliar to you.&#x20;

Next, you'll need to install Docker if you're not using the MTA on your ESP platform server.

As part of the ESP platform install process you installed Docker already, so this step wouldn't be necessary in that case.

We've included a script for automating the Docker installation process on Ubuntu:

```
./install_docker_on_ubuntu.sh
```

Now that Docker is ready, load the Velocity MTA Docker Images:

```
./load_images.sh
```

You'll see output similar to the following:

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FyrWaoupCVMW2KHUzpuq7%2Fimage.png?alt=media&amp;token=45b80f15-dbd5-4fca-a4eb-1a4b7ada4586" alt=""><figcaption></figcaption></figure>

Finally, start Velocity MTA:

```
./restart.sh
```

Verify Velocity MTA started properly:

```
docker logs edcom-velocity
```

Check the log file:

```
cat logs/velocity.log 
```

{% hint style="success" %}
Velocity MTA is running!&#x20;

You'll need to add your new Velocity MTA server to your ESP Platform to start sending email.
{% endhint %}


# Installing Velocity MTA (Advanced)

{% hint style="info" %}
Installation can occur on any Ubuntu Linux server with an AMD64-compatible or ARM64 CPU.&#x20;
{% endhint %}

{% hint style="info" %}
Technically any flavor of Linux is compatible but please just use Ubuntu if you can. We get tons of support tickets, don't make us have to figure out why Alma is doing the weird thing again.&#x20;
{% endhint %}

{% hint style="success" %}
**Velocity MTA can run on unlimited remote servers.**

Velocity MTA has its own license and can run on unlimited remote servers that all point back to one emaildelivery.com ESP platform installation.
{% endhint %}

{% hint style="success" %}
**Velocity MTA can run on the same server as the ESP platform.**

However, Velocity MTA needs to run on a different *ip address* than the ESP platform.\
Find more information on the explanation behind this limitation [here](https://docs.emaildelivery.com/docs/resolving-port-conflicts-with-a-second-ip).
{% endhint %}

[https://github.com/emaildelivery/edcom-ce/releases/download/v1.0.0/edcom-install-amd64.tgz<br>](<https://github.com/emaildelivery/edcom-ce/releases/download/v1.0.0/edcom-install-amd64.tgz&#xA;>)

To install and configure the MTA you'll need to familiarize yourself with the following concepts in advance:

* [ ] Using SSH to access a Linux VPS
* [ ] Using nano to edit text files in Linux

Check out some YouTube tutorials if necessary, once you have the ability to connect to a Linux VPS and edit text files, our documentation will give you the exact commands you need to run, so there won't be any missing information that prevents you from completing your MTA setup and configuration.&#x20;

ChatGPT knows Linux better than any human and is a hugely underrated resource for all Linux questions, technical questions about email delivery, and all of the topics applicable to an MTA. &#x20;

{% hint style="warning" %}
**You'll need your IP address and root password from your server hosting provider for this next step.**

Don't copy and paste this exact command, it's just an example using a placeholder, 1.2.3.4 would be the IP of your own server here.
{% endhint %}

SSH into your server where the IP addresses to be used with the MTA are assigned:

```
ssh root@1.2.3.4 
```

{% hint style="warning" %}
**When you enter your password you won't see anything on the screen.**

This is normal. Your root password isn't shown so that someone looking over your shoulder can't see it.&#x20;
{% endhint %}

```
root@1.2.3.4's password:
```

Once you've successfully authenticated as the root user you'll find yourself at a prompt that looks something like the below, which will be slightly different for each server provider.

Digital Ocean:

```
root@ubuntu-s-2vcpu-2gb-amd-sfo3-01:~#  
```

Racknerd

```
root@racknerd-b019313:~#
```

Log into our AppSumo portal where your download links are at <https://appsumo.emaildelivery.com/>

Click the copy icon for the **MTA LICENSE**&#x20;

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FZ41dZs2o4ha7pd8nIeRY%2FScreenshot%202023-10-20%20at%202.54.07%E2%80%AFAM.png?alt=media&amp;token=717aa608-6e6a-4056-a925-1610016c1491" alt=""><figcaption></figcaption></figure>

Paste the download link from your AppSumo portal into the command prompt on your Linux server:

{% hint style="warning" %}
The below is only an example, you need to use the real download link from your own AppSumo portal.
{% endhint %}

{% code overflow="wrap" %}

```
root@ubuntu-s-2vcpu-2gb-amd-sfo3-01:~# curl -L https://api.keygen.sh/v1/accounts/5b5914e5-3f64-439e-af80-b4404f2eb853/artifacts/velocity-install.tgz -H 'Authorization: License 7EB0BD-6-A2C170-36-V3' -o velocity-install.tgz
```

{% endcode %}

This will download a file called velocity-install.tgz onto your server, you should recognize this process from when you installed the ESP platform previously.&#x20;

{% hint style="info" %}
In Linux a tgz file is like a zip file or a rar, it's an archive file.&#x20;
{% endhint %}

To extract the Velocity MTA archive run the following command:

```
tar xzvf velocity-install.tgz 
```

You should see output similar to the following:

```
velocity-install/
velocity-install/docker-compose.yml
velocity-install/VERSION
velocity-install/conf/
velocity-install/conf/mta.defaults.conf
velocity-install/images/
velocity-install/images/edcom-velocity.tgz
velocity-install/install_docker_on_ubuntu.sh
velocity-install/restart.sh
velocity-install/load_images.sh
velocity-install/mail/
velocity-install/README
velocity-install/logs/

```

Velocity MTA is self-contained within one directory called velocity-install, similar to the ESP platform.&#x20;

Change directory to velocity-install:

```
cd velocity-install
```

{% hint style="info" %}
**Creating the conf/mta.conf file**

The configuration file for the MTA is mta.conf. You'll need to create it by making a copy of the mta.defaults.conf file to get started. &#x20;
{% endhint %}

```
cp conf/mta.defaults.conf conf/mta.conf 
```

{% hint style="warning" %}
The mta.defaults.conf file exists so you can 'start over' with a new properly formatted mta.conf file as a troubleshooting step.&#x20;
{% endhint %}

Now you're going to need to edit the mta.conf file with nano, a popular Linux text file editor:

```
nano conf/mta.conf
```

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FjGIXgRFMD1jeq1EAPfOR%2FScreenshot%202023-10-20%20at%203.17.09%E2%80%AFAM.png?alt=media&amp;token=a9095348-d1aa-4a70-8acf-12de636ebd7a" alt=""><figcaption></figcaption></figure>

There are only four settings in mta.conf:

{% hint style="info" %}
**Platform URL**

This is the URL to your ESP platform installation, entered exactly as it is in your web browser. <https://esp.yourdomain.com> if you've enabled SSL or <http://esp.yourdomain.com> if you haven't reached that step yet in your ESP configuration.&#x20;
{% endhint %}

{% hint style="info" %}
**Management IP**

This is the IP you used to connect to this server with SSH. The "Primary" or "Main" IP.&#x20;
{% endhint %}

{% hint style="warning" %}
The Management IP is ***NOT*** the IP of your ESP platform, it's the IP of the server you're on right now where you're doing this MTA configuration.
{% endhint %}

{% hint style="success" %}
**The Management IP can&#x20;*****also*****&#x20;be used as a sending IP.**

The Management IP is not "reserved", it can be used for sending email with the MTA. However, when run on the same server as the ESP platform, the Management IP must be separate from the IP being used by the ESP platform due to reasons explained [elsewhere](https://docs.emaildelivery.com/docs/resolving-port-conflicts-with-a-second-ip) in our documentation.
{% endhint %}

{% hint style="info" %}
**MTA Password**

This password must match the password you enter in the ESP platform Velocity MTA Server configuration.&#x20;
{% endhint %}

{% hint style="info" %}
**License Key**

This is your MTA license key from the <https://appsumo.emaildelivery.com> portal. Make sure this is ***not*** **the ESP platform** license or you will end up opening a ticket and asking us why the MTA isn't working and be sad.
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FzF9b7lWVHFIS5QYq38xT%2FScreenshot%202023-10-20%20at%203.35.31%E2%80%AFAM.png?alt=media&amp;token=c405658e-5b97-4ba4-900f-e0b133f77e72" alt=""><figcaption></figcaption></figure>

Save your mta.conf file changes, remember to watch a tutorial on using nano in Linux if this is unfamiliar to you.&#x20;

Now you need to tell Velocity MTA which IP addresses are available to use on the server for sending email by editing the conf/ipaddresses file:

```
nano conf/ipaddresses
```

The format for the conf/ipaddresses file is dead simple: one IP address per line

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FojDVX29s5W8aOt2C5Yrq%2FScreenshot%202023-10-20%20at%203.43.46%E2%80%AFAM.png?alt=media&amp;token=7a34c805-327e-48d8-9511-77e73128ddd2" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Your Management IP can be your only sending IP in conf/ipaddresses, or you can request multiple IP addresses from your server provider. &#x20;
{% endhint %}

{% hint style="warning" %}
**Make sure extra IPs are configured&#x20;*****on*****&#x20;your server, not just provisioned&#x20;*****to*****&#x20;your server.**

When your server hosting provider provisions you more IPs, they don't automatically "just work" on your server. Someone has to enable them in Linux once they've been assigned. ChatGPT can tell you exactly what to do here, or you can try opening a ticket with your hosting provider and see if they will do it for you, if all else fails there's fiverr. Don't ask us, we'll just ask ChatGPT and tell you what that dude said.&#x20;
{% endhint %}

Save your conf/ipaddresses file changes, remember to watch a tutorial on using nano in Linux if this is unfamiliar to you.&#x20;

{% hint style="info" %}
**conf/receiving\_domains**

Receiving domains will accept feedback loop complaints, bounces, or email replies and store each message as a text file in the velocity-install/mail/new directory. This is known as Maildir format.&#x20;
{% endhint %}

Now you need to tell Velocity MTA which domains to accept email replies for by creating a list of receiving domains.&#x20;

Do this by editing the conf/receiving\_domains

```
nano conf/receiving_domains
```

The format for the conf/receiving\_domains file is dead simple: one domain per line, including subdomain if applicable:

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FoQC6HBHy3PXpfJLymzB3%2FScreenshot%202023-10-20%20at%204.22.23%E2%80%AFAM.png?alt=media&amp;token=03acc1f5-1de2-4137-adf8-aa78eae6bbf7" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
All domains not in the conf/receiving\_domains file will have email delivery attempts refused, otherwise your disk will fill up with malware, spam, and exploit attempts.&#x20;
{% endhint %}

Save your conf/receiving\_domains file changes, remember to watch a tutorial on using nano in Linux if this is unfamiliar to you.&#x20;

Next, you'll need to install Docker if you're not using the MTA on your ESP platform server.

As part of the ESP platform install process you installed Docker already, so this step wouldn't be necessary in that case.

We've included a script for automating the Docker installation process on Ubuntu:

```
./install_docker_on_ubuntu.sh
```

Now that Docker is ready, load the Velocity MTA Docker Images:

```
./load_images.sh
```

You'll see output similar to the following:

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FyrWaoupCVMW2KHUzpuq7%2Fimage.png?alt=media&amp;token=45b80f15-dbd5-4fca-a4eb-1a4b7ada4586" alt=""><figcaption></figcaption></figure>

Finally, start Velocity MTA:

```
./restart.sh
```

Verify Velocity MTA started properly:

```
docker logs edcom-velocity
```

Check the log file:

```
cat logs/velocity.log 
```

{% hint style="success" %}
Velocity MTA is running!&#x20;

You'll need to add your new Velocity MTA server to your ESP Platform to start sending email.
{% endhint %}


# Common installation issues

{% hint style="warning" %}
**Make sure new IPs are configured&#x20;*****on*****&#x20;your server, not just provisioned&#x20;*****to*****&#x20;your server.**
{% endhint %}

When your server hosting provider provisions you more IPs, someone has to enable them in Ubuntu in order for the MTA to be able to access them.&#x20;

New IPs won't "just work" on your server.

Your server hosting provider most likely didn't touch your server at all, all they did was give your server access to more IPs on the network than it had access to before, and now someone has to tell your server what those IPs are.

ChatGPT can tell you exactly what to do here, or you can try opening a ticket with your hosting provider and see if they will do it for you.&#x20;

If all else fails there's Fiverr.&#x20;

Don't ask us, we'll just ask ChatGPT and tell you what that dude said.&#x20;

Seriously though, we can't do IT related things on your servers and be responsible for them and all the ways we will screw it up just as much as anyone else is going to. You should screw it up yourself, we believe in you 👍.&#x20;

This is what's going to happen when you start Velocity MTA and your IP addresses aren't configured in Ubuntu:&#x20;

{% hint style="danger" %}
**:PANIC::: listen tcp 1.2.3.4:25 Bind: cannot assign requested address**&#x20;
{% endhint %}

This means the IP addresses aren't configured on your server, but you put the IP addresses in conf/ipaddresses, and Velocity MTA can't see them, so it's throwing an error and crashing.&#x20;

{% hint style="warning" %}
**In order for Velocity MTA to start, all of these files need to exist**
{% endhint %}

If any of these files are missing, Velocity MTA will crash with ugly error messages:

* conf/ipaddresses
* conf/receiving\_domains
* conf/mta.conf

{% hint style="warning" %}
**Bind: address already in use**

Port 25 or Port 80 are being blocked by another application sharing this IP address
{% endhint %}

If ports required for Velocity MTA to start are being blocked by another application on the server, you'll see error messages like this and it will fail:

{% code overflow="wrap" %}

```
(7ee39b6ffb050bf61aa2e132da7044e00836d87319ee60751b301f4a613d7132): Error starting  listen tcp4 1.2.3.4:25: bind: address already in use
```

{% endcode %}

{% hint style="warning" %}
**Velocity MTA must be installed on its own IP address and can not share an IP with other applications that may cause port conflicts.**
{% endhint %}

{% hint style="info" %}
Ports needed by Velocity MTA include ports 25, 80, and 81, if any these ports are blocked and unavailable, the platform will fail to start.&#x20;
{% endhint %}

These are common scenarios where another application using the same IP address as Velocity MTA is blocking ports 25 or 80:

* You're running the ESP platform on the same server as Velocity MTA and trying to use the same IP address for both applications. The ESP platform and Velocity MTA must use two different IP addresses in order to share the same server. &#x20;
* The Linux installation you're using came with Postfix out of the box or you have another MTA running such as PowerMTA which is blocking port 25.&#x20;
* You have some type of control panel software the server came pre-installed with such as CloudPanel, CPanel, or Plesk blocking port 80.&#x20;
* You're running a web-based application on the server that isn't necessarily a website but is still accessed using http\:// in a web browser.


# Oracle Cloud and Amazon Lightsail issues

{% hint style="danger" %}
**See the required background reading on Oracle Cloud and Amazon Lightsail.**&#x20;
{% endhint %}

Read this link before continuing:

{% content-ref url="/pages/NAWVLG12wDpsKjzTdSGf" %}
[Oracle Cloud / Amazon Lightsail: "bind cannot assign requested address 8025"](/docs/common-installation-issues/oracle-cloud-amazon-lightsail-bind-cannot-assign-requested-address-8025)
{% endcontent-ref %}

{% hint style="warning" %}
**Make sure you configure Velocity MTA to use the private IP that links to the public IP you want to use for your management IP address and sending IP addresses.**&#x20;
{% endhint %}

Use the ip command to see your private IP addresses:

`ip a`&#x20;

Look for output similar to this:

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F17NwdG2NNBkY883q8oAu%2Fimage.png?alt=media&amp;token=d4d567ef-262c-4700-a27c-641cf8d05bb3" alt=""><figcaption></figcaption></figure>

You might also be shown your private IP addresses as part of the MOTD (message of the day) when you log in:

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2F498u9qa0DOSfLRIz6G9a%2Fimage.png?alt=media&amp;token=e7d8b6b7-7b08-40f9-a4bf-4e9d8edd93ff" alt="" width="563"><figcaption></figcaption></figure>

Use the 'curl' command to find your "real" IP by initiating a connection from your private IP to a compatible website that reveals your public IP:&#x20;

`# curl --interface 10.0.0.246 icanhazip.com`\
`144.24.125.61`\
`# curl --interface 10.0.0.128 icanhazip.com`\
`144.24.125.186`\
`# curl --interface 10.0.0.42 icanhazip.com`\
`144.24.125.167`\
`# curl --interface 10.0.0.231 icanhazip.com`\
`144.24.125.150`\
`# curl --interface 10.0.0.82 icanhazip.com`\
`129.159.125.34`

{% hint style="success" %}
**Add the private IP addresses to velocity-install/conf/mta.conf and velocity-install/conf/ipaddresses that correspond to the public IP addresses you want to use for Velocity MTA.**&#x20;
{% endhint %}

{% hint style="danger" %}
&#x20;:warning: **Remember: you can't add the IP address being used by the ESP platform in conf/ipaddresses or conf/mta.conf** :warning:
{% endhint %}

Restart Velocity MTA anytime you've made a change:&#x20;

```
./restart.sh
```


# What you can do with an MTA Delivery Policy

* [ ] Utilize [Velocity MTA servers](/docs/velocity-mta-basics/adding-a-server-in-the-backend-ui) for sending mail over your own home grown infrastructure.
* [ ] Create pools of IP addresses and individualized sending configurations for important mailbox providers such as Gmail, Yahoo, and iCloud.
* [ ] Place hourly and daily sending volume caps on IP addresses.
* [ ] Load balance mail volume across your IP pool by percentage allocation.
* [ ] Create individualized deferral waiting periods customized by the content of the SMTP response given by a mailbox provider.&#x20;
* [ ] Create a list of irrelevant SMTP responses to ignore, preventing the initiation of a deferral timeout.
* [ ] Throttle the number of simultaneous connections made to a mailbox provider's MX servers based on the MX domain instead of the domain in the email address.
* [ ] Automatically increase your deferral waiting period each time you receive a deferral message without any intervening delivery successes.&#x20;
* [ ] Pause mail if successful delivery volume has decreased below an expected threshold.&#x20;


# Adding a server in the backend UI

{% hint style="info" %}
Velocity MTA servers list sending IP addresses that can be used for sending email when they've been added to an [MTA delivery policy](/docs/velocity-mta-basics/creating-an-mta-delivery-policy) and the policy has been added to a [postal route](/docs/introduction/postal-routes)
{% endhint %}

Go to MTA -> Velocity MTA Servers in the backend site navigation

<div align="left"><figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FBZi3AgYzxabjs9Caq4I6%2FScreenshot%202023-06-12%20at%2011.39.15%20AM.png?alt=media&amp;token=91096a9a-9eeb-461f-97e0-ee957474c445" alt="" width="244"><figcaption></figcaption></figure></div>

{% hint style="info" %}
**Header domain**

Add the domain to use in the email headers for mail sent over each IP address&#x20;
{% endhint %}

{% hint style="info" %}
**Link domain**

Add the link domain that will be used in the email template body for mail sent over each IP address
{% endhint %}

{% hint style="warning" %}
The link domain must have a valid A record pointing to a Velocity MTA server IP address

**not** your platform installation address
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2FYnUvbCgjiKpS4NhuK9UR%2FScreenshot%202023-06-08%20at%209.22.25%20PM.png?alt=media&amp;token=1e03a4f8-3151-4cfe-bf34-95dbe7947ad0" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**MTA Management IP URL**

The service URL must be the IP address of the management ip configured in velocity-install/conf/mta.conf
{% endhint %}

{% hint style="info" %}
**MTA Password**

The MTA Password must match the password in velocity-mta/conf/mta.conf on the Velocity MTA server exactly
{% endhint %}

{% hint style="info" %}
**MTA Management IP URL Syntax**

The URL syntax must start with http\://, then the management IP address, then :81 for the port

Example valid URL Syntax: [http://172.16.50.1:81\&#x20](https://docs.emaildelivery.com/docs/velocity-mta-basics/http:/172.16.50.1:81\&#x20);
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fri69ImBHx5u1JPmQqJ3W%2FScreenshot%202023-06-08%20at%209.24.07%20PM.png?alt=media&amp;token=b2e8e4d2-1bee-4112-9b11-ca1d86922ec9" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**Verify Velocity MTA received your server configuration**

On your server where the Velocity MTA container is running, begin monitoring the log file
{% endhint %}

```
tail -f velocity-install/logs/velocity.log
```

{% hint style="info" %}
Click save to push your changes
{% endhint %}

<figure><img src="https://2024949584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHNgw7cfnOYHQr0B6GDXr%2Fuploads%2Fuv4IROvqa6nTx5kgzehY%2FScreenshot%202023-06-08%20at%2011.48.14%20PM.png?alt=media&amp;token=3b798464-5115-44c4-a955-918f7c79d954" alt=""><figcaption></figcaption></figure>

If the service URL is set properly and the access key matches what's in the velocity-install/logs/velocity.log file, velvet.log should show something like the following

```
2023/06/08 23:46:45.879865 main.go:1039: :API:::172.16.50.1:38214 POST /settings
2023/06/08 23:46:45.881480 main.go:1136: :API:::Finished writing settings
```




---

[Next Page](https://docs.emaildelivery.com/docs/llms-full.txt/1)

