Developer Documentation

Everything you need to integrate NGX Web Solutions into your application.

Quick Start

Get sending in three steps. No complex setup required.

  1. Create an account
    Register at /portal/register with your email and a secure password.
  2. Retrieve your SMTP credentials
    Your SMTP username (e.g. smtp-a3b7kz) is shown in the portal. Your SMTP password is displayed once at registration — save it immediately. You can reset it any time from the SMTP page.
  3. Configure your application
    Point your mailer at auth.borealsgroup.org:587 with STARTTLS and your credentials. See Code Examples below.

SMTP Credentials

Use these settings in any SMTP-compatible library or mail client.

Setting Value Notes
Host auth.borealsgroup.org Outbound SMTP relay
Port 587 Recommended (STARTTLS)
Encryption STARTTLS TLS 1.2 or higher
Authentication LOGIN / PLAIN Standard SASL mechanisms
Username smtp-xxxxxx Assigned at registration (6 random chars)
Password your SMTP password Shown once; reset via portal if lost
Password security Your SMTP password is displayed only once, immediately after account creation or a password reset. It is stored hashed — NGX Web Solutions cannot recover it. Reset it from the SMTP page if needed.

DNS Records

Add these records to every domain you send from. Correct DNS records dramatically improve deliverability and prevent spoofing.

SPF

Authorises NGX Web Solutions servers to send on behalf of your domain.

Type:  TXT
Name:  @  (or your domain root)
Value: v=spf1 include:borealsgroup.org ~all

DKIM

Retrieve your DKIM public key from the portal after adding your domain, then publish it:

Type:  TXT
Name:  alphamta._domainkey.yourdomain.com
Value: v=DKIM1; k=rsa; p=<your-public-key>

DMARC

Tells receiving servers what to do with unauthenticated mail.

Type:  TXT
Name:  _dmarc.yourdomain.com
Value: v=DMARC1; p=quarantine; rua=mailto:dmarc@yourdomain.com; pct=100

MX (optional — for bounce handling)

Only required if you want NGX Web Solutions to handle bounce/reply-to routing.

Type:     MX
Name:     bounces.yourdomain.com
Priority: 10
Value:    mx.borealsgroup.org
DNS changes can take up to 48 hours to propagate globally, though most resolvers pick them up within an hour. Use a tool like dig TXT yourdomain.com to verify propagation.

Code Examples

Replace smtp-xxxxxx and YOUR_SMTP_PASSWORD with your actual credentials.

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

SMTP_HOST = "auth.borealsgroup.org"
SMTP_PORT = 587
SMTP_USER = "smtp-xxxxxx"
SMTP_PASS = "YOUR_SMTP_PASSWORD"

msg = MIMEMultipart("alternative")
msg["Subject"] = "Hello from NGX Web Solutions"
msg["From"]    = "you@yourdomain.com"
msg["To"]      = "recipient@example.com"
msg.attach(MIMEText("Hello, world!", "plain"))

with smtplib.SMTP(SMTP_HOST, SMTP_PORT) as server:
    server.ehlo()
    server.starttls()
    server.login(SMTP_USER, SMTP_PASS)
    server.sendmail(msg["From"], [msg["To"]], msg.as_string())

print("Sent!")
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;

require 'vendor/autoload.php';

$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->Host       = 'auth.borealsgroup.org';
$mail->SMTPAuth   = true;
$mail->Username   = 'smtp-xxxxxx';
$mail->Password   = 'YOUR_SMTP_PASSWORD';
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port       = 587;

$mail->setFrom('you@yourdomain.com', 'Your Name');
$mail->addAddress('recipient@example.com');
$mail->Subject = 'Hello from NGX Web Solutions';
$mail->Body    = 'Hello, world!';
$mail->send();
echo 'Sent!';
?>
const nodemailer = require('nodemailer');

const transporter = nodemailer.createTransport({
  host: 'auth.borealsgroup.org',
  port: 587,
  secure: false,        // STARTTLS
  auth: {
    user: 'smtp-xxxxxx',
    pass: 'YOUR_SMTP_PASSWORD',
  },
});

await transporter.sendMail({
  from: '"Your Name" <you@yourdomain.com>',
  to:   'recipient@example.com',
  subject: 'Hello from NGX Web Solutions',
  text:    'Hello, world!',
});

console.log('Sent!');
# Send via the HTTP API (see API Reference section)
curl -X POST https://auth.borealsgroup.org/api/v1/send \
  -H "Authorization: Bearer YOUR_SMTP_PASSWORD" \
  -H "Content-Type: application/json" \
  -d '{
    "from":    "you@yourdomain.com",
    "to":      ["recipient@example.com"],
    "subject": "Hello from NGX Web Solutions",
    "text":    "Hello, world!"
  }'

API Reference

NGX Web Solutions exposes a simple HTTP API for sending mail without an SMTP library.

Base URL

https://auth.borealsgroup.org/api/v1

Authentication

Pass your SMTP password as a Bearer token in the Authorization header:

Authorization: Bearer <smtp_password>

POST /send

Send a transactional email.

Field Type Required Description
from string Yes Sender address (must be a verified domain)
to array Yes List of recipient addresses
subject string Yes Email subject line
text string One of text/html Plain-text body
html string One of text/html HTML body
reply_to string No Reply-To address

Response

// 200 OK
{ "status": "queued", "message_id": "20260219-abc123@borealsgroup.org" }

// 4xx Error
{ "error": "domain not verified" }

Troubleshooting

535 Authentication failed

Double-check your SMTP username and password. The username format is smtp-xxxxxx (not an email address). If you've lost your password, reset it from the SMTP page.

Mail delivered but landing in spam

Verify your SPF, DKIM, and DMARC records are published correctly (see DNS Records). Use dig TXT yourdomain.com to confirm propagation. Ensure your sending domain is added and verified in the portal.

DNS changes not taking effect

DNS propagation can take up to 48 hours, though it is usually much faster. Clear your local DNS cache (ipconfig /flushdns on Windows, sudo dscacheutil -flushcache on macOS) and check propagation with an online tool.

452 / 550 Quota exceeded

Your account has reached its daily or hourly sending limit. Quotas reset automatically. Contact support to request a limit increase.

530 Must issue a STARTTLS command first

Your client is not upgrading the connection to TLS before authenticating. Set secure: false and enable STARTTLS (not implicit TLS / port 465). Use port 587.