OpenCart's default Mail engine uses PHP's mail() function, so on most hosting order confirmations are quietly discarded. Switching to SMTP takes one tab — with one quirk that catches almost everyone: OpenCart selects the encryption from a prefix on the hostname, not from a separate setting.
| Setting | Value |
|---|---|
| SMTP host | smtp.postwing.app |
| Port | 587 |
| Encryption | STARTTLS (the connection is upgraded to TLS before login) |
| Username | The login of an SMTP token for your domain |
| Password | The password of that token — shown once, when the token is created |
Go to System → Settings, edit your store and open the Mail tab:
| Field | Value |
|---|---|
| Mail Engine | SMTP |
| SMTP Hostname | tls://smtp.postwing.app |
| SMTP Username | The login of an SMTP token for your domain |
| SMTP Password | That token's password |
| SMTP Port | 587 |
| SMTP Timeout | 5 |
tls://smtp.postwing.app with port 587, or ssl://smtp.postwing.app with port 465. A bare hostname opens an unencrypted connection and authentication is refused. On the Store tab of the same settings page, set E-Mail to an address on your verified domain. Leaving it as a personal Gmail or Yandex address means DKIM and SPF cannot align and receipts get filtered.
Further down the Mail tab, Alert Mail controls which events notify the store owner — new orders, account registrations, affiliate signups. Customer-facing order emails are governed separately by the order status settings under System → Localisation → Order Statuses.
OpenCart has no built-in test button. Place a test order, or trigger a password reset from the customer login page — both go through the same mail engine. If nothing arrives, check System → Maintenance → Error Logs.
| Symptom | Cause and fix |
|---|---|
Error: SMTP connection failed | Missing tls:// prefix, or a blocked port — try 8587. |
| Authentication refused | Wrong credentials, or the connection is unencrypted because the prefix is absent. |
| Blank page when saving | A suppressed PHP error — commonly the openssl extension is not enabled. |
| Connection closes immediately | SMTP Timeout left empty. Set it to 5. |
| Owner gets mail, customer does not | The order status has no customer notification enabled. |
| Mail goes to spam | The store email is not on your verified domain. |
System → Settings → edit your store → Mail tab. Set Mail Engine to SMTP and the hostname, username, password, port and timeout fields become relevant. OpenCart 3 and 4 use the same panel.
OpenCart has no separate encryption setting. It passes the hostname straight to PHP's stream functions, so the transport is selected by the scheme prefix: tls://host with port 587, or ssl://host with port 465. A bare hostname means an unencrypted connection, which the server will refuse.
First check that Mail Engine is set to SMTP rather than Mail — the default uses PHP's mail() function, which most hosting does not support. Then check the Mail Alert settings on the same tab: the order notification to the customer is separate from the one to the store owner.
Leave it at 5 seconds or raise it slightly. The field is often left blank, which makes the connection fail immediately on some PHP builds. It is not a delay — it is how long OpenCart waits for the server to respond.
The store email under System → Settings → Store tab must be on the domain you verified. Shops commonly leave it as a Gmail or Yandex address, which cannot align with your DKIM signature or SPF record, so DMARC fails.
Usually a PHP error suppressed by the display settings. Check the error log under System → Maintenance → Error Logs, and your PHP error log — most often it is a missing openssl extension, which SMTP over TLS requires.