OquMail
Loading account…
Email API3 min readUpdated

Send Email from Zapier on Your Own Domain: Webhooks Step or SMTP by Zapier

Send email from a Zap on your own domain instead of a Zapier address: a Webhooks by Zapier POST to the API with the key in the headers, or SMTP by Zapier.

"Email by Zapier" sends from a zapier-mail address that recipients do not recognise, and it is limited to a handful of sends per hour. For a Zap that emails customers, two built-in apps let the message come from your own domain: Webhooks by Zapier, which posts JSON to an API, and SMTP by Zapier, which logs in to a mailbox. Both need a mailbox on your domain and a minute of setup. Here are the exact fields for each.

Quick answer

Add a Webhooks by Zapier action, event Custom Request, method POST, URL https://API (a way for your app or website to send email automatically).oqumail.com/api/v1/emails, Data Pass-Through off, Data as JSON with to as an array, subject and html, and two headers: Authorization Bearer oqm_live_... and Content-Type application/json. Or add an SMTP by Zapier action with host mail.oqumail.com, port 587, TLS on, and the mailbox login.

Option 1: Webhooks by Zapier

  1. In the OquMail dashboard, open API keys and create one for the domain and sending address you want. Copy the key from the details screen.
  2. In your Zap, add an action, choose Webhooks by Zapier, event Custom Request.
  3. Method POST. URL https://API (a way for your app or website to send email automatically).oqumail.com/api/v1/emails. Data Pass-Through: no.
  4. Data: paste the JSON below, replacing the braces with mapped fields from the trigger step where needed. The to value must be an array, so keep the square brackets.
  5. Headers: Authorization with value Bearer and your key, and Content-Type with value application/json.
  6. Unflatten: yes. Test the step; a 202 with an id in the response means the message is queued.

The Data field, with a mapped email and name from the trigger:

{
  "to": ["{{trigger_email}}"],
  "subject": "Thanks for signing up, {{trigger_first_name}}",
  "html": "<p>Hi {{trigger_first_name}},</p><p>We received your request and will reply within one business day.</p>",
  "fromName": "Acme"
}

Option 2: SMTP by Zapier

  1. Add an action, choose SMTP by Zapier, event Send Email.
  2. Connect an account: host mail.oqumail.com, port 587, username the full mailbox address, password its webmail password, TLS or SSL set to Yes (Zapier negotiates STARTTLS on 587).
  3. In the action, set From Email to the same mailbox address, From Name to your business, and map To, Subject and Body from the trigger. Body Type HTML if you include formatting.
  4. Test. The message appears in the mailbox's Sent folder in webmail as well as in the recipient's inbox.

Free business email on your own domain

OquMail gives you up to 15 mailboxes on your domain — free — with guided SPF/DKIM/DMARC, webmail, IMAP/SMTP for any mail app, and a send API. Setup is a few DNS records; changes usually take effect within minutes, occasionally up to 48 hours. Start at oqumail.com.

Get started free

Which to choose

  • Webhooks: returns an id you can store in a later step (a sheet row, a CRM note), supports attachments as base64, and shows the exact reason when a send is refused.
  • SMTP: simpler for people who do not want to write JSON, and it puts a copy in Sent. It gives less detail when something fails.
  • Either way, the Zap runs on Zapier's schedule (every 1 to 15 minutes depending on plan), so neither is suitable for time-critical codes or login links.

What the API answers

  • 202 Accepted: the message is queued. The JSON carries id, messageId and status; store the id so a support question can be matched to the delivery log.
  • 400: the body failed validation, usually to missing or not an array, or neither html nor text present.
  • 401: the key is missing, revoked or mistyped.
  • 403: the mailbox is suspended, has reached its daily limit of 250, or sent more than 10 messages in a minute ("Sending too fast"). Back off; do not retry in a tight loop.
  • 422: the message was blocked by content checks; the response explains why. Do not retry unchanged.
  • 429: requests arrived faster than the per-key limit. Honour the Retry-After header.

Common questions

The webhook step returns 400.

Almost always to was sent as a string. Keep the square brackets around the mapped field, and switch Unflatten to yes so Zapier sends a real array.

Can I send to the person who filled a form and to my team?

Yes: to can list several addresses, or use cc. For an internal copy that should not show the customer, use bcc.

Does the key expire?

No, but you should rotate it if it is pasted anywhere it should not be. Create a new key, update the Zap header, then revoke the old one; the key management guide has the routine.