Documentation
Everything you need to get started with BgLetter - from connecting your own mailbox and the recipient list as a CSV file to tracking and the REST API.
See it in action



Getting started
BgLetter is a Channel: a tool for sending emails through your own mailbox (bring-your-own-SMTP). Delivery runs over your mail server, you remain the sender, and the sender reputation stays yours - we provide no sending infrastructure and charge nothing per email.
Your recipient list stays with you: recipients come from a CSV file, per send. There is no contact management - no stored lists, no segments, no sign-up forms. And whatever data a send needs is deleted again after 30 days at the latest (see Retention and deletion).
Ready in four steps
- Create an account. Sign up for free at /register.
- Connect your own mailbox. Add your mail server credentials (see “Connect SMTP”).
- Write your content. Compose your email in the block builder or the code editor.
- Upload the recipient list and send. Upload the CSV file for this send, then send immediately or schedule it.
The service is intended exclusively for businesses and other commercial or institutional users, not for consumers.
Connect SMTP
Under Sender accounts you add one or more sending accounts. BgLetter comes with preconfigured provider presets that fill in host, port and encryption (e.g. Gmail/Google Workspace, Microsoft 365, Brevo, SendGrid, Mailgun, Postmark). For some providers (e.g. Amazon SES and all-inkl/KAS) you enter the host yourself, as it varies by region or plan.
Typical settings
Host: smtp.yourdomain.com
Port: 587 (STARTTLS) or 465 (SSL/TLS)
Username: send@yourdomain.com
Password: •••••••• (app password recommended)
Sender: "Your Name" <newsletter@yourdomain.com>After saving you can run a test connection. BgLetter reports whether login and encryption are working.
Deliverability (SPF / DKIM / DMARC)
Whether your emails arrive depends above all on your DNS configuration. Three records are key:
| Record | Purpose | Example (TXT) |
|---|---|---|
| SPF | Defines which servers are allowed to send on your behalf. | v=spf1 include:_spf.yourprovider.com -all |
| DKIM | Signs emails cryptographically - recipients verify their authenticity. | selector._domainkey → v=DKIM1; k=rsa; p=… |
| DMARC | Defines how to handle checks that fail. | v=DMARC1; p=quarantine; rua=mailto:dmarc@yourdomain.com |
In short: SPF authorizes servers, DKIM proves authenticity, and DMARC tells recipients what to do with forgeries. Together, all three significantly improve your delivery rate.
Recipients & sending
Recipients come from a CSV file, per send. You upload the file in the editor, map the columns and send. There are no stored lists, no segments and no sign-up forms - your recipient list stays with you, and the original file stays on your computer.
How the CSV file is structured
The first row is the header row with the column names. Comma and semicolon are both common separators; save the file as UTF-8 so accented characters survive.
| Column | Required | Description |
|---|---|---|
| Yes. The recipient address. The column is detected from the header row. | {{EMAIL}} | |
| Name | Optional. The recipient’s name for a personal salutation. | {{NAME}} |
| Custom fields | Optional. Every additional column can be used as a placeholder in the subject and the content. | {{INVOICE}} |
| Language | Optional. Controls which language version a recipient gets on a multilingual send. | en · en-US · English |
| Country | Optional. Used as a fallback for language mapping when there is no language column. | GB · United Kingdom |
Email;Name;Invoice;Language;Country
anna@example.com;Anna Berger;R-2041;de;DE
paul@example.org;Paul Vetter;R-2042;fr;FRThe columns can have any name: after uploading, you pick in the editor which column holds the email address, which holds the name and which holds the language or country. A sample file is available in the editor under “What should the CSV look like?”.
Duplicates and the suppression list
- Duplicates are merged automatically: if the same address appears several times in the file, it is emailed only once - the first row and its personalization values win. Comparison ignores upper and lower case.
- Incomplete rows with a missing or clearly invalid address are filtered out before the send.
- The suppression list always applies. Addresses on your unsubscribe list are skipped automatically on every send - you do not have to clean the CSV file first.
Sending
- Preview for desktop and mobile - with sample data from the first row of your CSV file.
- Personalization via placeholders such as {{NAME}}, {{EMAIL}} and your own columns.
- An unsubscribe link is inserted automatically - mandatory and good for your reputation.
- Sending is throttled through your own mailbox to stay within its sending limits.
Under Sending mode you choose one of three speeds: Safe delivery (maximum reliability, recommended), Medium speed (balanced) or Fast speed (only for mailboxes with generous sending limits). BgLetter automatically spaces the send so that emails to the same provider do not follow each other too closely - no manual interval settings are needed, and temporarily failed deliveries are retried automatically up to twice. You send immediately or scheduled for a chosen time.
For an immediate send you follow the progress live and can pause, resume or cancel the ongoing send. Open and click tracking is always active.
Unsubscribes / suppression list
The unsubscribe management page is your central suppression list: every address listed here is reliably skipped on every send - even if it is still in your CSV file. When a recipient clicks the unsubscribe link - including one-click list-unsubscribe straight from their inbox - they land here immediately.
From the Pro plan a dedicated Unsubscribes menu item opens the page; you can also reach it directly at /app/unsubscribes.
- Add: enter addresses manually (one per line) - with a reason from the dropdown: Manual, Complaint, Undeliverable (bounce) or Other.
- Import: load existing suppression lists as a CSV or text file.
- Export: download the full list as CSV (email, reason, date).
The suppression list is the only data set that is stored permanently. That is a legal requirement: it is the only way an unsubscribe outlives a single send, even if the same address turns up in a CSV file months later.
Retention and deletion
BgLetter stores as little as possible, for as short a time as possible. A fixed deadline applies to every send: 30 days after the send at the latest, the send-related data is deleted automatically. This happens without any action from you and cannot be extended.
What is deleted after 30 days
- Recipient addresses from the uploaded CSV file.
- Personalization data - names and every other column of your file.
- The message content of the send (text, HTML, blocks, translations).
- Tracking events - individual opens and clicks, including their time and recipient reference.
What is kept
- The subject line and the time of the send.
- Anonymous metrics: recipient count, sent, failed, delivery rate, plus opens and clicks as totals - with no link to individual people.
- The unsubscribe list (suppression list). It is kept permanently, because otherwise an unsubscribe would stop working after 30 days.
Drafts and templates
Even untouched drafts are deleted 30 days after their last change. Content you want to keep and reuse therefore belongs in a template: templates are not tied to a send and stay until you delete them yourself.
Less stored data means less that can go missing. The deadline is not a limitation but the reason why your recipient list never sits with us permanently.
Messages (transactional)
The Messages area lets you send individual transactional emails - such as invoices, payment reminders, payment receipts, appointment reminders, order confirmations or notifications - to exactly one recipient via your own sender account. Messages are available on every plan (including Free).
For payments, the block builder ships with two blocks: the pay button (a payment link as a template - PayPal.Me, PayPal checkout, Stripe Payment Link or any custom URL; variables like {{AMOUNT}} or {{INVOICE_NUMBER}} are filled in per recipient at send time, amounts in dot format like 12.50) and the SEPA QR code (Girocode): recipients scan it with their banking app and get a pre-filled bank transfer with IBAN, amount and payment reference - without any payment provider. Both blocks are already prepared in the “Invoice” and “Payment reminder” templates and are only included in the email once they are configured (URL or IBAN).
- Templates for the most common cases (invoice, payment reminder, receipt, appointment reminder, order confirmation, notification).
- Attachments: up to 10 files totalling max. 10 MB (e.g. an invoice PDF).
- Personalization via {{NAME}} and {{EMAIL}}.
- Optional open tracking per message.
POST /api/v1/messages (from Pro).Editor & block builder
You compose newsletters in the editor, which offers two modes: the block builder (drag & drop blocks, with inline formatting – select text and change its size, colour, bold, etc. directly) and the code editor for your own HTML. The block builder generates email code that renders reliably in Outlook, Gmail and Apple Mail.
Available blocks
- Text, button and image for content.
- Columns (2, 3 or 4), divider and spacer for layout.
- Social links and an HTML block for your own snippets.
AI translation
In the editor you translate the subject and content into up to 36 languages with one click. You pick the source language, the tone of address (formal or informal) and the desired target languages. Placeholders such as {{NAME}} are preserved.
For multilingual sending, each recipient receives the matching language variant: if your CSV file contains a language column (e.g. “Language”) or a country column (e.g. “Country”), the correct translation is sent per recipient automatically - otherwise the source version.
You don’t need to translate in advance: every language detected among your recipients is translated automatically at the start of the send (shown as status “Translating”) - delivery only begins once all versions are ready.
How the language mapping works: the column can have any name - after uploading you pick which column holds the language. Recognised: language codes (de, deu, ger), locales (de-DE, en-US), language names (Deutsch, German) and country names and codes (Deutschland, Germany, DE, AT). Empty or unknown values get the original version. The column also stays usable as a placeholder.
Tracking
BgLetter records opens and clicks per send. In the analytics you see open and click rates and the most-clicked links.
Individual events stay linked to a recipient only for as long as the send exists - 30 days after the send at the latest they are deleted. After that only the anonymous totals remain (see Retention and deletion).
Sends & reports
Under Campaigns & statistics you find every send with date, subject, status, recipient count, sent, failed and the delivery rate (sent ÷ total recipients). The newest are at the top. The eye icon opens the report.
The report shows the key figures at the top, including opens and clicks, plus a “Sending progress” bar. The Recipient reactions card reports opens and clicks each as unique and total and computes the click rate (CTR) from unique clicks per unique open. A table lists the most-clicked links with clicks and unique clicks.
- Recipient table: per recipient the email, email provider, name, status and - on failure - the exact SMTP error message, plus the send time. This table is available for 30 days.
- Filters: All, Sent, Failed, Pending.
- CSV export: “Export as table (CSV)” downloads all recipients - regardless of the active filter. Export in good time, while the data is still there.
There is no manual delete in the overview - and none is needed: after 30 days BgLetter removes recipient data, content and tracking events by itself. The subject and the anonymous metrics remain as a history.
REST API (quick overview)
For integrations, BgLetter offers a REST API. You generate API keys in the developer area of your account. Authentication uses a bearer token in the header.
# Send a transactional message
curl -X POST https://bgletter.com/api/v1/messages \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "to": "customer@example.com", "subject": "Your invoice", "html": "<p>Hello …</p>" }'The base URL is <your-domain>/api/v1; authentication uses Authorization: Bearer bgl_… or X-Api-Key: bgl_…. Available endpoints cover transactional messages (POST /api/v1/messages), the unsubscribe list, and read endpoints for account and sends. The full specification is available at /api/v1/openapi.json.
- Idempotency: an
Idempotency-Keyheader when sending messages prevents duplicate delivery on retries. - Webhook signature: every delivery carries
X-BgLetter-Signature: sha256=…(HMAC-SHA256 over the raw body with yourwhsec_key) - verify it before processing. - Rate limit: 120 requests/minute per account (messages additionally 300/hour).
In addition, webhooks are available to notify your system in real time about events (e.g. unsubscribe, bounce). You’ll find endpoints and example responses in the developer area.
Billing
BgLetter bills with a fixed monthly plan price - no per-email cost. Plans differ in monthly sending volume, the number of sender accounts and other limits.
- Free Free plan to try things out - no credit card required.
- Upgrade any time in the Billing area. To move to a lower plan, cancel your subscription (it lapses to Free at the period end).
- All prices are in euros; billing is handled by Fontemia GmbH, Grammetstr. 14, CH-4410 Liestal.
Team & account
Under Administration you invite team members and assign roles: Owner, Admin or Member. Only owners and admins can see Administration; only the owner can invite, change roles and remove members.
The number of seats depends on your plan - a second team member is possible from the Pro plan. Each member activates their own two-factor authentication (2FA) under Settings.
Settings
Under Settings you manage your account on a single page with five cards. Password and two-factor authentication are open to every member; the billing address, branding and Data & privacy are reserved for the owner.
- Change password - a new password of at least 8 characters. Changing it automatically logs out all other sessions.
- Two-factor authentication - set up via a QR code; you are then shown 8 one-time recovery codes exactly once (keep them safe - they cannot be shown again). Disabling it requires a current code from your app.
- Billing address - company, address and VAT ID; appears on your invoices (owner only).
- Branding - brand colour, logo URL, postal address and a custom email footer (details below).
- Data & privacy - “Export my data (JSON)” as a file, plus the permanent deletion of the account (two-step, irreversible).
In Branding, the brand colour and logo URL only affect the public pages your recipients see - such as the unsubscribe page - not sent emails. The postal address (sender), by contrast, is inserted into the footer of every outgoing email - leave it empty and the address line is missing (legally required under § 5 TMG in Germany). A custom HTML footer is available from the Business plan.
Troubleshooting
The most common questions and their fixes at a glance. Most deliverability problems can be resolved in a few minutes.
| Problem | Solution | Hint |
|---|---|---|
| Emails land in spam | Check your domain with the deliverability check and set up SPF, DKIM and DMARC. | SPF · DKIM · DMARC |
| SMTP test fails | Use an app password instead of your account password and check the host and port. | Authentication failed |
| “Quota exhausted” | Choose a higher plan or wait for the monthly reset date. | Quota … exhausted |
| Recipients missing from the report | Duplicate addresses are merged, invalid ones filtered out and suppressed ones skipped. Check the unsubscribe list. | Skipped / suppression list |
| The report is gone | After 30 days recipients, content and tracking events are deleted automatically; subject and metrics remain. Export reports in good time. | Deleted after 30 days |
| A draft has disappeared | Untouched drafts expire after 30 days. Save reusable content as a template. | Draft older than 30 days |
| Bounce or complaint | The address is added to the suppression list and skipped automatically on future sends. | Undeliverable / Complaint |
Is a feature greyed out? Then it is not included in your plan - the required plan is shown next to the button (e.g. “From Pro”). An upgrade in the Billing area unlocks it.