This guide explains how to configure Wikantik to send transactional emails (account verification, password reset, notifications) from a self-hosted installation.
Sending email directly from a home server will fail because:
You need a transactional email relay service.
For low volume (few hundred emails per week), Brevo or SendGrid free tiers are more than sufficient.
This example uses Brevo, but the process is similar for other providers.
jakefear.com or wiki.jakefear.com)Add the DNS records provided by your email service. Typical records include:
| Type | Host | Value | Purpose |
|---|---|---|---|
| TXT | @ | v=spf1 include:sendinblue.com ~all | SPF - authorizes service to send |
| TXT | mail._domainkey | k=rsa; p=MIGf... | DKIM - email signing |
| TXT | _dmarc | v=DMARC1; p=quarantine; rua=mailto:... | DMARC - policy |
Note: If you already have an SPF record, merge them:
v=spf1 include:existing.com include:sendinblue.com ~all
In your email service dashboard:
smtp-relay.brevo.com)587 (TLS) or 465 (SSL)Add to your wikantik-custom.properties:
# Email configuration
mail.from = Wikantik <wiki@yourdomain.com>
mail.smtp.host = smtp-relay.brevo.com
mail.smtp.port = 587
mail.smtp.account = your-login@email.com
mail.smtp.password = your-smtp-key-here
mail.smtp.starttls.enable = true
mail.smtp.timeout = 5000
mail.smtp.connectiontimeout = 5000
To keep credentials out of properties files, configure the mail session in Tomcat's context file.
Add to your Wikantik.xml (in conf/Catalina/localhost/):
<Resource name="mail/Session"
auth="Container"
type="jakarta.mail.Session"
mail.smtp.host="smtp-relay.brevo.com"
mail.smtp.port="587"
mail.smtp.auth="true"
mail.smtp.starttls.enable="true"
mail.smtp.user="your-login@email.com"
password="your-smtp-key-here"
mail.from="wiki@yourdomain.com"/>
Wikantik will automatically use the JNDI session mail/Session when available.
mail.smtp.host = smtp-relay.brevo.com
mail.smtp.port = 587
mail.smtp.starttls.enable = true
mail.smtp.host = smtp.sendgrid.net
mail.smtp.port = 587
mail.smtp.account = apikey
mail.smtp.password = SG.your-api-key-here
mail.smtp.starttls.enable = true
mail.smtp.host = in-v3.mailjet.com
mail.smtp.port = 587
mail.smtp.starttls.enable = true
mail.smtp.host = email-smtp.us-east-1.amazonaws.com
mail.smtp.port = 587
mail.smtp.starttls.enable = true
| Property | Default | Description |
|---|---|---|
mail.from | ${user.name}@${mail.smtp.host} | The sender email address |
mail.smtp.host | 127.0.0.1 | SMTP server hostname |
mail.smtp.port | 25 | SMTP server port |
mail.smtp.account | (not set) | SMTP username for authentication |
mail.smtp.password | (not set) | SMTP password for authentication |
mail.smtp.starttls.enable | true | Enable TLS encryption |
mail.smtp.timeout | 5000 | Socket I/O timeout (ms) |
mail.smtp.connectiontimeout | 5000 | Connection timeout (ms) |
jspwiki.mail.jndiname | mail/Session | JNDI name for container-managed session |
apikey as the username with API key as password