Quick Answer

Connect Mailcow to GoHighLevel by adding a custom SMTP service in GHL settings: Host is your Mailcow hostname (mail.yourdomain.com), Port 587, STARTTLS encryption, and credentials from a dedicated Mailcow mailbox. Create a separate mailbox specifically for SMTP relay — don't use a personal inbox. This routes all GHL email through your self-hosted infrastructure.

Mailcow + GoHighLevel Integration: SMTP Setup Guide

By Braedon·Mailflow Authority·Self-Hosted SMTP

Why Use Mailcow with GoHighLevel

GoHighLevel's default email runs through Mailgun on shared infrastructure. That means shared IPs, shared reputation, and Mailgun's per-email pricing. For general GHL SMTP setup, see our GoHighLevel SMTP guide.

Connecting Mailcow to GHL gives you:

  • Your own IP reputation — no shared pool risk
  • Flat-rate cost — $5-20/month instead of per-email pricing
  • Full sending logs — see exactly what's happening with every email
  • Multi-domain support — run all client domains through one server

The setup takes 15 minutes if your Mailcow DNS is already configured.

Prerequisites

Before connecting GHL to Mailcow, verify:

  1. Mailcow is running and accessible at https://mail.yourdomain.com
  2. DNS records are correctSPF, DKIM, DMARC, PTR all passing
  3. Port 587 is open on your VPS firewall
  4. You can send email from Mailcow's webmail successfully

If you haven't set up Mailcow yet, follow the complete setup guide first.

Step 1: Create a Dedicated SMTP Mailbox

In Mailcow admin panel, create a mailbox specifically for SMTP relay. Don't use a personal inbox.

  1. Go to Email → Mailboxes → Add mailbox
  2. Username: [email protected] (or [email protected])
  3. Set a strong password
  4. Quota: 1GB is fine (relay doesn't store much)

This mailbox exists solely for SMTP authentication. GHL authenticates as this user when sending.

Step 2: Configure GoHighLevel SMTP

In GoHighLevel:

  1. Go to Settings → Email Services
  2. Click Add SMTP Service or Custom SMTP
  3. Enter the following:
FieldValue
SMTP Hostmail.yourdomain.com
SMTP Port587
Username[email protected]
Password(the mailbox password)
EncryptionSTARTTLS
  1. Click Test Connection — it should succeed
  2. Save and assign to the relevant sub-account(s)

Step 3: Set the From Address

In GHL, set the "From" address to match a domain configured in Mailcow. If your Mailcow handles yourdomain.com, the From address should be [email protected].

Mismatched From domains cause SPF and DKIM failures because the authentication records are tied to the domain in Mailcow.

Step 4: Test the Integration

Send a test email from GHL to a Gmail account. Then check:

  1. Gmail headers: Click "Show original" in Gmail. Look for:

    • SPF: PASS
    • DKIM: PASS
    • DMARC: PASS
  2. Mailcow logs: In Mailcow admin → Logs → Postfix, you should see the outgoing email with a status=sent entry.

  3. Mail-Tester: Send a test to mail-tester.com and aim for 9+/10.

Practitioner note: The most common GHL + Mailcow issue is a DKIM failure because the From domain in GHL doesn't match the domain configured in Mailcow. If you're sending as [email protected], that domain must be added to Mailcow with its own DKIM key and DNS records.

Multi-Client Setup

For agencies with multiple GHL sub-accounts:

Option A: One Domain, Multiple Mailboxes

Create separate mailboxes for each client sub-account:

All send through the same domain and IP. Simple, but all clients share reputation.

Option B: Multiple Domains (Recommended)

Add each client's domain to Mailcow:

  1. In Mailcow admin → Configuration → Domains → Add domain
  2. Generate DKIM key for the new domain
  3. Client configures DNS records for their domain
  4. Create a mailbox under the client's domain
  5. Use that mailbox as the SMTP credential in their GHL sub-account

This gives each client their own domain reputation and authentication. One Mailcow server, many domains.

Practitioner note: I set up most GHL agencies with Option B. Each client domain gets isolated DKIM and SPF records. If one client sends poorly and damages their domain reputation, other clients aren't affected. The overhead of managing multiple domains in Mailcow is minimal — it's just adding DNS records and clicking "generate DKIM."

Troubleshooting

Connection Refused

Cause: Port 587 blocked by firewall. Fix: On your VPS, allow port 587:

ufw allow 587/tcp

Authentication Failed

Cause: Wrong username or password. Fix: Verify the mailbox exists in Mailcow and the password is correct. Try logging into Mailcow webmail with the same credentials.

Emails Going to Spam

Check these in order:

  1. PTR record matches mail hostname
  2. SPF record includes server IP
  3. DKIM record matches Mailcow's generated key
  4. DMARC record exists
  5. IP is not on blacklists (check MXToolbox)

See the complete self-hosted spam troubleshooting guide.

Slow Sending / Queuing

Cause: Mailcow's rate limiting or Rspamd throttling. Fix: In Mailcow admin → Configuration → Rspamd → adjust rate limits. Default limits may be too aggressive for high-volume GHL sending.

Practitioner note: GHL agencies typically need Mailcow's rate limits adjusted upward. The default Rspamd configuration is tuned for personal email, not marketing volume. I set per-mailbox rate limits to match the client's expected volume plus 20% headroom.

If you want Mailcow configured and optimized for your GoHighLevel setup, schedule a consultation — I specialize in self-hosted SMTP infrastructure for GHL agencies.

Sources


v1.0 · April 2026

Frequently Asked Questions

Can I use Mailcow with GoHighLevel?

Yes. GoHighLevel supports custom SMTP servers. Add your Mailcow server as an SMTP service using port 587 with STARTTLS. All email from GHL — campaigns, workflows, and notifications — routes through your Mailcow instance instead of GHL's default Mailgun.

What SMTP port does Mailcow use with GoHighLevel?

Port 587 with STARTTLS encryption. Port 465 (implicit TLS) also works with Mailcow but GoHighLevel's SMTP integration is most reliable with 587/STARTTLS. Never use port 25 — it's for server-to-server relay, not client submission.

Why is GoHighLevel not sending through Mailcow?

Common causes: wrong port (use 587, not 25 or 465), Mailcow mailbox password incorrect, firewall blocking port 587 on VPS, SSL/TLS mismatch, or the Mailcow mailbox doesn't exist. Test with an SMTP client like swaks before troubleshooting GHL.

Should I use Mailcow instead of Mailgun for GoHighLevel?

If you send 50K+ emails/month across GHL, yes. Mailcow on a $5-10 VPS replaces Mailgun's $75-275/month. You manage the infrastructure, but the cost savings are significant. For under 25K/month, Mailgun's simplicity wins.

How many GoHighLevel sub-accounts can one Mailcow server handle?

A 4GB RAM Mailcow server handles 20-50 sub-accounts comfortably, depending on combined email volume. Create separate mailboxes per sub-account for isolation. At 100+ sub-accounts or 500K+ total emails/month, consider upgrading the VPS or running multiple Mailcow instances.

Want this handled for you?

Free 30-minute strategy call. Walk away with a plan either way.