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:
| Setting | Value |
|---|---|
| Host | smtp.quolle.com |
| Port | 587 (STARTTLS) · 465 (SSL/TLS) · 2525 (STARTTLS — use if 587 is blocked) |
| Security | STARTTLS on 587 / 2525, or implicit SSL/TLS on 465 — all require TLS 1.2+ |
| Auth methods | PLAIN, LOGIN (both accepted) |
| Username | Your API key — e.g. qle_… |
| Password | Your 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
| Limit | Value |
|---|---|
| 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:
- Set Mailer to Other SMTP
- SMTP Host:
smtp.quolle.com - SMTP Port:
587 - Encryption: TLS (STARTTLS)
- Auto TLS: On
- Authentication: On
- SMTP Username: your API key (
qle_…) - SMTP Password: your API key (same value)
- From Email: your verified address, e.g.
noreply@mail.yourdomain.com - Save and use Email Test to confirm delivery
Bubble.io
In your Bubble app, go to Settings → Email:
- Enable Use a custom email provider
- Email address: your verified sending address
- Click Configure and enter the SMTP settings from the table above
- 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:
- Host:
smtp.quolle.com - Port:
587 - Username: your API key
- Password: your API key (same value)
- From: your verified sender address
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 / problem | Fix |
|---|---|
| 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. |