SMTP Setup

Use Quolle as an SMTP relay from any framework, CMS, or no-code tool that supports SMTP — no SDK required.

Connection settings

Enter these values wherever your application asks for an SMTP server:

SettingValue
Hostsmtp.quolle.com
Port587 (STARTTLS) · 465 (SSL/TLS) · 2525 (STARTTLS — use if 587 is blocked)
SecuritySTARTTLS on 587 / 2525, or implicit SSL/TLS on 465 — all require TLS 1.2+
Auth methodsPLAIN, LOGIN (both accepted)
UsernameYour API key — e.g. qle_…
PasswordYour API key — same value as username
Username and password are the same. Set both to your full API key (qle_…). This is intentional — the gateway authenticates by key, not by a username/password pair. Many SMTP clients require both fields to be filled in, so copy the same key into each.

Limits

LimitValue
Max message size 10 MB (message + attachments combined)
Max recipients per message 50 — To, CC and BCC are counted together. A message with 40 To + 15 CC = 55 total and will be rejected.
Daily sending cap Same as REST API — see Conventions → Sending limits
CC and BCC. Standard Cc and Bcc are supported. BCC recipients receive the message but never appear in any recipient's copy — they're delivered blind, exactly as expected.

Nodemailer (Node.js)

Set secure: false with port 587 — Nodemailer negotiates STARTTLS automatically. Port 465 also works with secure: true (implicit SSL/TLS), and 2525 is a STARTTLS fallback if your host blocks 587.

import nodemailer from "nodemailer";

const transporter = nodemailer.createTransport({
  host:   "smtp.quolle.com",
  port:   587,
  secure: false,          // STARTTLS on 587/2525. For port 465 use secure: true (implicit SSL/TLS)
  auth: {
    user: process.env.QUOLLE_API_KEY,   // qle_…
    pass: process.env.QUOLLE_API_KEY,   // same key
  },
});

await transporter.sendMail({
  from:    '"Acme" <hello@mail.yourdomain.com>',
  to:      "customer@example.com",
  subject: "Welcome!",
  html:    "<h1>Welcome to Acme</h1>",
});

Laravel

Add to your .env file:

MAIL_MAILER=smtp
MAIL_HOST=smtp.quolle.com
MAIL_PORT=587
MAIL_USERNAME=qle_your_api_key
MAIL_PASSWORD=qle_your_api_key
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=hello@mail.yourdomain.com
MAIL_FROM_NAME="${APP_NAME}"

Then send mail as usual:

Mail::to('customer@example.com')->send(new WelcomeMail());

Django

Add to settings.py:

EMAIL_BACKEND       = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST          = 'smtp.quolle.com'
EMAIL_PORT          = 587
EMAIL_USE_TLS       = True    # STARTTLS on port 587
EMAIL_HOST_USER     = 'qle_your_api_key'
EMAIL_HOST_PASSWORD = 'qle_your_api_key'
DEFAULT_FROM_EMAIL  = 'hello@mail.yourdomain.com'
from django.core.mail import send_mail

send_mail(
    subject='Welcome!',
    message='Thanks for signing up.',
    from_email='hello@mail.yourdomain.com',
    recipient_list=['customer@example.com'],
    html_message='<h1>Welcome!</h1>',
)

Ruby on Rails

# config/environments/production.rb
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  address:              'smtp.quolle.com',
  port:                 587,
  domain:               'yourdomain.com',
  user_name:            ENV['QUOLLE_API_KEY'],
  password:             ENV['QUOLLE_API_KEY'],
  authentication:       'plain',      # PLAIN is supported
  enable_starttls_auto: true
}

WordPress (WP Mail SMTP)

Install the free WP Mail SMTP plugin, then configure under Settings → WP Mail SMTP → General:

  1. Set Mailer to Other SMTP
  2. SMTP Host: smtp.quolle.com
  3. SMTP Port: 587
  4. Encryption: TLS (STARTTLS)
  5. Auto TLS: On
  6. Authentication: On
  7. SMTP Username: your API key (qle_…)
  8. SMTP Password: your API key (same value)
  9. From Email: your verified address, e.g. noreply@mail.yourdomain.com
  10. Save and use Email Test to confirm delivery

Bubble.io

In your Bubble app, go to Settings → Email:

  1. Enable Use a custom email provider
  2. Email address: your verified sending address
  3. Click Configure and enter the SMTP settings from the table above
  4. Bubble uses these credentials for all system emails and workflow email actions

FlutterFlow

In FlutterFlow, navigate to Settings → Firebase → Custom SMTP (or your email integration panel) and enter:

No-code tools and encryption. If your tool asks you to choose between SSL and TLS: pick TLS / STARTTLS with port 587 (or 2525 if 587 is blocked), or SSL/TLS with port 465. All three are supported.

Troubleshooting

Error / problemFix
Connection refused / timeout on port 587 Many ISPs and cloud hosts block outbound port 587. Either allow outbound TCP 587 in your firewall / security group, or switch to port 2525 (also STARTTLS) or 465 (SSL/TLS) — both carry identical traffic.
535 / Authentication credentials invalid Confirm you are using a valid API key (starts with qle_) as both username and password. Confirm the key exists and has not been deleted in the dashboard.
Authentication rejected before STARTTLS The server requires STARTTLS before accepting credentials. Make sure your client sends a STARTTLS command on port 587 before authenticating. In Nodemailer this is secure: false + port 587; most frameworks handle this automatically when you set "TLS" or "STARTTLS".
550 Error: Sending domain not verified Your From address must use a domain that has been added and verified in your dashboard. Add the domain under Domains and complete DNS verification first.
500 Error: Too many recipients Your message has more than 50 recipients across To and CC combined. Split the send into multiple messages of 50 or fewer.
TLS handshake error Set encryption to STARTTLS (not SSL). Port 587 with STARTTLS is the only supported mode. Port 465 (implicit SSL) is not available.