Company email you manage yourself
This guide is for domain administrators: from the first login and DNS setup to creating mailboxes, moving old email, and sending OTP codes from your application.
- Server:
mx1.trivapost.com - IMAP
993· SMTP465/587 - Example domain in this guide:
yourcompany.com
01Quick start
Once your domain is registered, Trivapost sends an onboarding summary with the domain administrator username, an initial password (sent only once), your plan (mailboxes, quota, sending limit) and the DNS records to add.
- Sign in to the domain panel. Open mx1.trivapost.com/domainadmin/ and sign in with the
tp-…username and the initial password. - Change the password. On the panel home page, open Change password. Use at least 14 characters and keep it in your company password manager.
- Turn on two-factor authentication (2FA). On the same page choose Two-factor authentication›Time-based OTP, scan the QR code with Google Authenticator, Authy or 1Password, and enter the 6-digit code.
- Add the DNS records at your domain's DNS provider (see section 2).
- Create mailboxes for staff and one
no-reply@address for OTP (see section 3). - Move existing email if you have any, then point MX to Trivapost (see section 4).
Three addresses to remember
| For | Address | Used by |
|---|---|---|
| Domain panel | mx1.trivapost.com/domainadmin/ | Domain administrators (IT team) |
| Account settings | mx1.trivapost.com | Each mailbox owner: app passwords, spam filter, personal sync jobs |
| Webmail | webmail.trivapost.com/SOGo/ | All staff: read & send email, calendar, contacts |
What you can and cannot change in the panel
| You manage | Managed by Trivapost (contact support) |
|---|---|
| Create, edit, deactivate and delete mailboxes · aliases · sync jobs (migration) · spam quarantine · spam policy & filters · app passwords · per-mailbox protocol access · BCC maps (archiving) · domain description · webmail access | Hourly sending limit · plan mailbox count & total quota · alias domains · relaying through other servers · resetting domain admin 2FA |
02Connect your domain (DNS)
Add the records below at your domain's DNS provider (Cloudflare, your registrar, or an internal DNS server). The DKIM value is unique to your domain — copy it exactly from the onboarding summary or from the panel: E-Mail›Configuration›Domains›DNS.
| Type | Name / host | Value | Purpose |
|---|---|---|---|
| MX | @ | mx1.trivapost.com · priority 10 | Incoming mail. Add it last when moving existing email. |
| TXT | @ | v=spf1 include:_spf.trivapost.com -all | SPF: servers allowed to send for the domain. |
| TXT | dkim._domainkey | v=DKIM1;k=rsa;t=s;s=email;p=MIIB… | Digital signature. Copy the full value from the panel. |
| TXT | _dmarc | v=DMARC1; p=none; rua=mailto:postmaster@yourcompany.com; fo=1 | Policy when SPF/DKIM fail. |
| CNAME | autodiscover | mx1.trivapost.com | Outlook automatic setup. |
| CNAME | autoconfig | mx1.trivapost.com | Thunderbird automatic setup. |
| SRV | _autodiscover._tcp | 0 1 443 mx1.trivapost.com | Optional; helps email apps find the server. |
| SRV | _imaps._tcp | 0 1 993 mx1.trivapost.com | |
| SRV | _submissions._tcp | 0 1 465 mx1.trivapost.com | |
| SRV | _submission._tcp | 0 1 587 mx1.trivapost.com |
If the domain also sends through another service (a ticketing tool or CRM, for example), combine them in one record: v=spf1 include:_spf.trivapost.com include:other-service.com -all. Two separate v=spf1 records make SPF fail.
The autodiscover and autoconfig CNAME records must be DNS only (grey cloud), not Proxied.
Checking your records
The easiest way: in the panel open E-Mail›Configuration›Domains and click the DNS button next to your domain. Correct records are marked green. DNS changes usually show up within 5–60 minutes.
From a terminal:
dig +short MX yourcompany.com
dig +short TXT yourcompany.com
dig +short TXT dkim._domainkey.yourcompany.com
dig +short TXT _dmarc.yourcompany.comnslookup -type=mx yourcompany.com 1.1.1.1
nslookup -type=txt dkim._domainkey.yourcompany.com 1.1.1.1Tightening DMARC step by step
- Weeks 1–4:
p=none— monitoring only. Reports go to theruaaddress; create apostmaster@mailbox or alias so they are not rejected. - Once every legitimate sender passes SPF/DKIM:
p=quarantine— forged mail lands in the recipient's spam folder. - Final stage:
p=reject— forged mail using your domain is refused. This matters for payment companies, whose names are popular with phishers.
03Mailboxes & aliases
Creating a mailbox
- Open E-Mail›Configuration›Mailboxes and click Add mailbox.
- Enter the Username (the part before @, e.g.
jane), choose the domain, and fill in Full name. - Set the Quota (up to your plan, e.g. 10240 MiB = 10 GB).
- Set a strong password or use the generator icon. Hand it to the employee over a secure channel, not by email to the same mailbox.
- Click Add. The mailbox works in webmail and email apps right away.
If you have reached your plan's mailbox count, the panel refuses new mailboxes. Remove unused ones or contact us to upgrade.
Everyday tasks
| Task | How |
|---|---|
| Reset a staff password | Mailboxes›Edit on the mailbox, enter a new password. |
| Employee leaves | Deactivate first (turn off Edit›Active) so old mail is kept. Forward new mail to a manager with an alias if needed. Delete once the data is secured. |
Extra addresses (info@, billing@) | Aliases›Add alias: enter the alias and its destination (several mailboxes allowed, comma-separated). |
| Forwarding outside | Create an alias whose destination is an external address. Careful: forwarding spam to Gmail hurts reputation. |
| Archive copies (compliance) | BCC›Add BCC map: all mail to/from an address is copied to an archive mailbox. |
| Review held messages | Quarantine: release legitimate mail or delete dangerous mail. |
An @yourcompany.com alias (catching every address) attracts heavy spam and fills quota. Create specific aliases instead.
04Move from an old server
This works for CyberPanel, cPanel, Plesk or any other IMAP server. Existing mail is copied with a sync job; nothing is deleted on the old server.
- One day before: lower the TTL. Set the TTL of the domain's MX record to 300 seconds (5 minutes) so the switch takes effect quickly.
- Create mailboxes in Trivapost with exactly the same addresses as on the old server.
- Add a temporary SPF that allows both servers during the transition:
Also add DKIM (TXT @ (temporary)
v=spf1 include:_spf.trivapost.com ip4:OLD_SERVER_IP ~alldkim._domainkey),autodiscoverandautoconfig. The Trivapost DKIM selector isdkim, so it does not clash with the old server's DKIM (usuallydefault). - Create a sync job for each mailbox: E-Mail›Configuration›Sync jobs›Add sync job.
The first sync can take a few hours for large mailboxes. Watch progress with the Logs button on the sync job.
Field Value Username Destination mailbox in Trivapost Host Old server name, e.g. mail.yourcompany.com, or its IPPort / Encryption 993/SSLUsername & password (source) Full email address and password on the old server Interval (min) 20during the transitionDelete from source when completed Leave unchecked Exclude objects (regex) Keep the default (spam/junk folders are skipped) - Switch day: change MX to
mx1.trivapost.com(priority 10) and remove the old MX. Mail that still reaches the old server is copied by the sync job. - Set up staff devices with the new settings (see section 5).
- Day 3 to day 7: finish. Confirm new mail arrives in Trivapost, turn off the sync jobs, change SPF to the final
v=spf1 include:_spf.trivapost.com -all, and disable email on the old server.
Make sure the old server's firewall allows inbound port 993 from 169.58.47.102 and that the source password is correct. The full error is under Logs.
05Set up email apps
Outlook and Thunderbird usually configure themselves from just the email address and password (once the autodiscover/autoconfig records exist). For manual setup:
| Protocol | Server | Port | Security |
|---|---|---|---|
| IMAP (incoming, recommended) | mx1.trivapost.com | 993 | SSL/TLS |
| POP3 (incoming) | mx1.trivapost.com | 995 | SSL/TLS |
| SMTP (outgoing) | mx1.trivapost.com | 465 | SSL/TLS |
| SMTP (outgoing, alternative) | mx1.trivapost.com | 587 | STARTTLS |
The username is always the full email address (jane@yourcompany.com). Authentication: normal password. SMTP requires sign-in.
Outlook (Windows / Mac)
- File›Add account, enter the email address.
- If asked for an account type, choose IMAP and enter the servers from the table above.
- Enter the password and finish.
iPhone / iPad / Mac Mail
Fastest: sign in to mx1.trivapost.com with the email account, download the Apple connection profile from the account page and open it on the device. Mail, calendar and contacts are set up at once.
Manual: Settings›Mail›Accounts›Add Account›Other›Add Mail Account, choose IMAP and enter the servers from the table above for Incoming and Outgoing.
Android (Gmail app)
- Add account›Other, enter the email address.
- Choose Personal (IMAP) and enter the password.
- Incoming server
mx1.trivapost.comport 993 SSL/TLS; outgoing servermx1.trivapost.comport 465 SSL/TLS.
Thunderbird
Account Settings›Account Actions›Add Mail Account, enter name, email and password. Thunderbird picks up the settings from autoconfig.
Calendar & contacts (CalDAV / CardDAV)
Server address: https://mx1.trivapost.com/SOGo/dav/ with the email address and password. In webmail, each calendar's full link is in that calendar's three-dot menu.
06Send OTP from your app
For automated email (login OTP, password reset, PIN change) use one dedicated mailbox, such as no-reply@yourcompany.com. Do not use a staff mailbox.
Preparation
- Create the
no-reply@mailbox (section 3). - Sign in to mx1.trivapost.com as
no-reply@, open App passwords›Create app password. Name it after the application (e.g.api-production) and tick only SMTP. - Store the app password in a secret manager or server environment variable — never in the code repository.
- Create separate app passwords for staging and production, so one can be revoked without affecting the other.
| Setting | Value |
|---|---|
| Host | mx1.trivapost.com |
| Port & encryption | 465 + SSL/TLS (recommended) or 587 + STARTTLS |
| Username | no-reply@yourcompany.com |
| Password | The app password |
| From | Must be the signed-in mailbox (or one of its aliases) |
Code samples
MAIL_MAILER=smtp
MAIL_HOST=mx1.trivapost.com
MAIL_PORT=465
MAIL_SCHEME=smtps # Laravel 10 and older: MAIL_ENCRYPTION=ssl
MAIL_USERNAME=no-reply@yourcompany.com
MAIL_PASSWORD=your-app-password
MAIL_FROM_ADDRESS=no-reply@yourcompany.com
MAIL_FROM_NAME="Your Company"use PHPMailer\PHPMailer\PHPMailer;
$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->Host = 'mx1.trivapost.com';
$mail->Port = 465;
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
$mail->SMTPAuth = true;
$mail->Username = 'no-reply@yourcompany.com';
$mail->Password = getenv('MAIL_PASSWORD');
$mail->CharSet = 'UTF-8';
$mail->Timeout = 20;
$mail->setFrom('no-reply@yourcompany.com', 'Your Company');
$mail->addReplyTo('support@yourcompany.com');
$mail->addAddress($userEmail);
$mail->Subject = 'Your verification code';
$mail->isHTML(true);
$mail->Body = "<p>Verification code: <b>{$code}</b></p><p>Valid for 5 minutes. Never share this code.</p>";
$mail->AltBody = "Verification code: {$code}\nValid for 5 minutes. Never share this code.";
$mail->send();const nodemailer = require('nodemailer');
// Create once at startup and reuse for every message
const transporter = nodemailer.createTransport({
host: 'mx1.trivapost.com',
port: 465,
secure: true,
pool: true,
maxConnections: 3,
auth: { user: 'no-reply@yourcompany.com', pass: process.env.MAIL_PASSWORD },
});
await transporter.sendMail({
from: '"Your Company" <no-reply@yourcompany.com>',
replyTo: 'support@yourcompany.com',
to: userEmail,
subject: 'Your verification code',
text: `Verification code: ${code}\nValid for 5 minutes. Never share this code.`,
html: `<p>Verification code: <b>${code}</b></p><p>Valid for 5 minutes.</p>`,
});import os, ssl, smtplib
from email.message import EmailMessage
msg = EmailMessage()
msg["From"] = "Your Company <no-reply@yourcompany.com>"
msg["To"] = user_email
msg["Reply-To"] = "support@yourcompany.com"
msg["Subject"] = "Your verification code"
msg.set_content(f"Verification code: {code}\nValid for 5 minutes. Never share this code.")
msg.add_alternative(f"<p>Verification code: <b>{code}</b></p><p>Valid for 5 minutes.</p>", subtype="html")
with smtplib.SMTP_SSL("mx1.trivapost.com", 465, context=ssl.create_default_context(), timeout=20) as s:
s.login("no-reply@yourcompany.com", os.environ["MAIL_PASSWORD"])
s.send_message(msg)package mail
import (
"crypto/tls"
"fmt"
"net/smtp"
"os"
"time"
)
func SendOTP(to, code string) error {
const host, from = "mx1.trivapost.com", "no-reply@yourcompany.com"
conn, err := tls.Dial("tcp", host+":465", &tls.Config{ServerName: host})
if err != nil {
return err
}
c, err := smtp.NewClient(conn, host)
if err != nil {
return err
}
defer c.Close()
if err = c.Auth(smtp.PlainAuth("", from, os.Getenv("MAIL_PASSWORD"), host)); err != nil {
return err
}
if err = c.Mail(from); err != nil {
return err
}
if err = c.Rcpt(to); err != nil {
return err
}
w, err := c.Data()
if err != nil {
return err
}
fmt.Fprintf(w, "From: Your Company <%s>\r\nTo: %s\r\nSubject: Your verification code\r\nDate: %s\r\n"+
"MIME-Version: 1.0\r\nContent-Type: text/plain; charset=UTF-8\r\n\r\nVerification code: %s\r\nValid for 5 minutes.\r\n",
from, to, time.Now().Format(time.RFC1123Z), code)
if err = w.Close(); err != nil {
return err
}
return c.Quit()
}Test the connection from your app server
# 1. Is the port reachable? (should say "succeeded" / "open")
nc -vz mx1.trivapost.com 465
# 2. Send a test message (swaks package: apt install swaks)
swaks --server mx1.trivapost.com:465 --tls-on-connect \
--auth LOGIN --auth-user no-reply@yourcompany.com --auth-password 'your-app-password' \
--from no-reply@yourcompany.com --to you@gmail.com \
--header "Subject: Trivapost test"Best practices for OTP deliverability
- Short and consistent. Same subject every time (Your verification code), the code in the body. No large images or many links.
- Send both text and HTML parts (as in the samples above).
- No link shorteners (bit.ly and similar) — they are a strong phishing signal.
- Throttle resend requests in your app, e.g. at most 1 code per 60 seconds and 5 per hour per user. This stops abuse from burning your sending limit.
- Send from a queue, not inside the user's request. On a
4xxreply retry after 1, 5 and 15 minutes. A5xxreply is a permanent failure — do not retry. - Reuse connections (pooling) when sending many messages in a row.
- Check the
no-reply@mailbox weekly in webmail: wrong user addresses bounce back there. Flag those addresses in your app so they are not mailed again. - Transactional email only. Promotions, newsletters and mass announcements are not allowed on Trivapost (see section 8).
07Security
- 2FA is required for the domain admin account. Keep backup access safe; if a device is lost, contact support from the registered contact address.
- One app password per device or application. If a laptop is lost or a server is compromised, revoke just that app password.
- Limit unused protocols per mailbox (Mailboxes›Edit›Allowed protocols). For example, turn off POP3 everywhere if nobody uses it.
- Be wary of emails asking you to sign in. Trivapost never asks for passwords by email. The only official sign-in pages are
mx1.trivapost.comandwebmail.trivapost.com. - Move DMARC to
p=rejectafter the monitoring period (section 2) so your domain cannot be forged to deceive customers. - Quarantine: suspicious mail is held back. Release it only when you are sure the sender is legitimate.
- All connections to the server (web, IMAP, SMTP) are TLS-encrypted. Mailboxes are stored on Trivapost servers and backed up regularly, encrypted, to a separate location.
08Limits & policies
| Item | Limit |
|---|---|
| Message size | 100 MB (including attachments; attachments grow about 33% in transit, so about 70 MB of files) |
| Mailboxes & quota | As listed in your onboarding summary |
| Sending limit | Per domain per hour, according to your plan (listed in the onboarding summary). When exceeded, mail is deferred, not lost. |
| Aliases | Up to 400 per domain |
| Dangerous attachments | Executable or infected files may be rejected or quarantined |
Acceptable use
- Allowed: staff business email and transactional email (OTP, password resets, transaction notices, invoices).
- Not allowed: bulk marketing, newsletters to large lists, purchased address lists, spam, phishing or fraudulent content.
- Violations or unusual sending spikes may lead to temporary sending restrictions to protect the server's reputation for every customer. We will contact your registered contact person.
Need a higher sending limit, more mailboxes or more quota? Contact support@trivacloud.com.
09Troubleshooting
Our mail lands in the recipient's spam folder
- In Gmail, open the message and choose ⋮›Show original. Check that SPF, DKIM and DMARC say
PASS. - If any says
FAIL, check the DNS records from section 2 with the DNS button in the panel. - If all say
PASS: new domains need time to build reputation. Ask a few recipients to mark Not spam, avoid shortened links, and keep content consistent.
App: “Authentication failed” / 535
- The username must be the full email address.
- Use an app password with the SMTP protocol ticked.
- Match port and encryption:
465with SSL/TLS,587with STARTTLS. - Too many failed attempts block the IP temporarily. Wait 30 minutes, fix the password, then try again.
App: connection timeout
Some cloud providers block outgoing mail ports. Test with nc -vz mx1.trivapost.com 465 and then 587. If both fail, open an egress firewall rule on your server or cloud provider.
“Ratelimit” / 4xx reply when sending
The domain's hourly sending limit was reached. Mail is not lost: email apps and properly built queues retry. Look for unusual spikes (such as a bot requesting OTPs repeatedly), then contact us if you genuinely need a higher limit.
Mail is not arriving
- Check MX with
dig +short MX yourcompany.com— it must bemx1.trivapost.com. - Check Quarantine in the panel and the Junk folder in webmail.
- Check mailbox quota. A full mailbox rejects new mail (the sender gets a mailbox full notice).
- Make sure the mailbox and domain are active.
Sync job stopped or shows errors
Open Sync jobs›Logs. Common causes: the old server password changed, the old server's firewall blocks 169.58.47.102, or wrong host/port (use 993 + SSL).
10Support
Email support@trivacloud.com from your registered contact address. To get help faster, include:
- The domain and the affected email address
- When it happened, with time zone (e.g. 14:05 UTC+7)
- The full error message (copied text, not only a screenshot)
- For spam or delivery issues: the full message headers (Show original in Gmail)
We will never ask for your password. Do not send passwords or 2FA codes to anyone.