
Dear all, I'm BH5HIE. After several years of exchanging QSL cards, I found it to be a rewarding experience, but the process of sending and receiving reply envelopes from distant stations was often frustrating: addresses varied in format, mixed Chinese and English characters, the postcode positions were always incorrect, and I had to send out dozens of letters each time... So, I created a small cross-platform tool myself. QSL via mailSpecifically designed to solve the problem of "neatly printing addresses on envelopes." Current version. 1.2.7It is open-source (MIT License) and available for free download and use.
One. What is this?
QSL Mail is aEnvelop production and printing workstationFor sending QSL cards in amateur radio, it also applies to any situation where a standard envelope with a return address needs to be printed. It supports:
- Sender and receiverName, call sign, address, postal code, mobile phone numberPlease complete it fully;
- Domestic / InternationalTwo shipping modes are available: domestic mode automatically displays the six-digit postcode in the upper left corner;
- The four most common envelope sizes, DL, C5, #10, and C6, as well asFully customizable dimensions;
- Horizontal/Vertical Layout, AddressAutomatic line wrapping、Frame height self-adapts;
- On the envelopeReal-time visual preview,the sender/receiver section canDirect drag and dropPositioning can also be fine-tuned using the slider value.
- Address Book: Add, delete, modify, search, and apply contacts to frequently used radio stations with a single click;
- CSV/TXT bulk importSupports both Chinese and common English naming conventions, with batch printing queue functionality;
- Layout template: Save frequently used layouts as templates for one-click application next time.
- Task History: Automatically saves each edit, allowing you to easily retrieve them at any time;
- Before printingPreviewWhen printing, automatically hides previewing aids such as lines, graphs, seals, and decorative patterns, only printing the actual content.
- Printer calibration: Print scaling, X/Y offset, safety boundaries, paper selection;
- The desktop version stores tasks and contacts in local data files.Data will not be lost when reinstalling or switching to a different desktop version (Electron ↔ Lite).。
Display "Unspecified" if call sign is not filled in. No callThis prevents unsightly blank spaces from appearing.
II. Overview of the Main Interface
Once the software is opened, the left side contains a sidebar (Workstation / Address Book / My Templates / Print Settings + Recent Tasks), the middle section is for entering information, and the right side isLive envelope preview— The paper size ratio and content positioning are displayed according to the actual printed dimensions.

Below the preview area, you can directly switch envelope sizes (DL / C5 / #10 / C6 / Custom), orientation (landscape or portrait), and the "Precise Positioning" panel (X position, Y position, font size, box width).
III. Getting Started Quickly: 5 Steps to Send Your First Email
Step 1: Enter sender and recipient information
In the "Recipient Information" section, enter the recipient's name, call sign, address, and postal code (phone number optional). In the "Sender Information" section, enter your return address. The bottom of the sidebar will display your radio station information, and you can click "Fill in from my profile ↗" to quickly import radio station information saved in your print settings.
Don't worry about the long address; the preview will automatically wrap the lines, and the height of the box will adjust accordingly.
Step 2: Choose shipping method and envelope specifications.
Choosing an international mail serviceInternationalThe postal code will be displayed in the recipient's address field; for domestic mail, select.DomesticThe envelope will have six postal code fields in the upper left corner, and an additional "Domestic Postal Code" panel, which can be adjusted independently.Position, font size (per character), character spacing。

Select the envelope size based on the envelopes you have: DL (220x110), C5 (229x162), #10 (241x105), C6 (162x114), or select "Custom" and enter the width and height in the print settings.
Step 3: Precise layout positioning
The recipient/sender section in the preview can be directly...Drag with the mouse; You can also use the "Precise Positioning" panel's slider to fine-tune the X/Y position, font size, and box width. Select the "Recipient/Sender" tab to adjust them separately, and then click the "↺" button to restore the default settings with a single click.

Step 4: Preview and print
Click "Print Envelope" in the upper right corner to first display it.Print previewConfirm the content and dimensions, then send it to the printer. The dashed safety margins, envelope lines, postage stamps, and decorative patterns in the preview are also included.It cannot be printed.Ensures clean printing pages.
Before printing, it is recommended to first check the printer, paper, and calibration settings in the "Printing Settings" section (see Section 6). For your first print, it's best to use a standard A4 sheet before using envelopes for added security.

IV. Address Book and Quick Application
Once frequently used radio stations are added to your address book, you can quickly apply them in two ways:
- On the right side of the workstation, you can quickly enter the most recently contacted person with a single click.
- Open the "Address Book" to search by name/call sign/city, then click "Apply".

The contact person support includes creating, editing, and deleting contacts. The fields include name, call sign, address, postal code, mobile phone number, and notes (e.g., "Japan · Tokyo").

5. Bulk import and bulk printing via CSV
When you need to import data from multiple radio stations simultaneously using a single connection, importing in bulk via CSV is the most convenient method:
- Use the "Download Template" option in the recipient panel to obtain a standard CSV file.
- Fill in according to the template (or modify the column names using an address table exported from LOTW/logging software).
- Click "Import CSV", select the file, and the first row (header) will automatically recognize Chinese or English column names (e.g., Name, Call Sign, Address, Zip Code, Mobile Number), as well as compatibility with formats like name / callsign / address / zip.
- A pop-up appears after import.Batch printing queueYou can select the records you want to print, first apply the first record for preview and verification, then perform a "batch printing" to output all envelopes, with each envelope on its own page while maintaining the actual size.
Standard CSV format (first row is header, UTF-8):
Name,Call sign,Address,Postal code,Phone number
Takahashi Ken,JA7QXG,1-2-3 Chiyoda Tokyo,100000,090-1234-5678
Michael Lane,VK3LQ,15 Collins St Melbourne,3000,+61 400 123 456

6. Printing Settings and Calibration
The "Print Settings" section includes three categories: printer, paper, and radio information.
- Printer: The desktop version reads the system's printer list and allows you to select specific printers.
- Paper being fed to the printer: Based on the actual envelope size, or A4/Letter (manual insertion).
- Envelope specifications: DL / C5 / #10 / C6 / Custom (name + dimensions in mm)
- Printer calibration: Horizontal offset X, vertical offset Y (units in mm, positive values indicate right/downward), print scaling 80%-120%;
- Safety boundary: Safety area guidelines are displayed in the preview.
- My radio profile: Name, call sign, return address, postal code, mobile phone number. After saving, automatically fill in the sender information.

If the overall print job is skewed: useOffsetMove the content back to its correct position; if the size of the content is incorrect: useZoomFine-tuning is much more intuitive than messing with printer settings.
Seven. My template.
The adjusted layout (envelope specifications + font size for sender/receiver positions + mode + printing parameters) can be saved as a template, such as "Japanese QSL horizontal" or "domestic envelope-style C5". The next time, you can directly use it from the "My Templates" section without having to reconfigure.

VIII. Downloading and Installation
Project open-source address:https://github.com/net3pang/QSLMailPrint
The release page offers two series with identical interfaces and operations:
QSL Mail (Complete version of Electron)Suitable for users who require device-level printing parameters and a complete installation experience.
| Platform | File |
| Windows | QSL.Mail.Setup.1.2.7.exe(Installation version)QSL.Mail.1.2.7.exe(Portable version, no installation required) |
| macOS | QSL.Mail-1.2.7-arm64.dmg(Apple Silicon)QSL.Mail-1.2.7.dmg / - mac.zip(Intel) |
| Linux | QSL.Mail-1.2.7.AppImage、qsl-mail_1.2.7_amd64.deb |
QSL Mail Lite (Lightweight version for Wails)It has a small size and fast startup time, uses the system WebView, and supports both real printing and batch printing.
| Platform | File |
| Windows | QSL-Mail-Lite-windows-x64.exe |
| macOS | QSL-Mail-Lite-macos-arm64.zip / QSL-Mail-Lite-macos-x64.zip |
| Linux | QSL-Mail-Lite-linux-x64 |
macOS users, please note: The application has been configured with a Developer ID signature and notarization process. If you are prompted that the developer cannot be verified when opening it, please allow it to run in "System Settings → Privacy & Security", or right-click to open.
9. Where is the data stored?
- Drafts, formatting, templates, presets, print settings: saved in local application storage.
- Task History and Contacts: The desktop version writes task history data to a Go JSON file, with a default location of:
- macOS:
~/Library/Application Support/QSLMail/qsl-mail-data.json
- Windows:
%AppData%\QSLMail\qsl-mail-data.json
- Linux:
~/.config/QSLMail/qsl-mail-data.json
- Available environment variables
QSL_MAIL_DB Specify the location of the data file.
The Electron and Lite versions share the same set of data files, so you can switch between them without losing your tasks and contacts.
10. Frequently Asked Questions
Q: How do I use the browser version?
A: The browser version is designed for quick testing and should be run within the project directory. python3 -m http.server 4173 Then open it. http://127.0.0.1:4173; Do not directly double-click. index.htmlThe browser version always displays the system print dialog, and data is stored in the browser's localStorage.
Q: Is the printed position incorrect/the size wrong?
A: First, print a single page on regular paper to check. Use the "Print Settings" section's X/Y offset correction (mm) to adjust for overall misalignment, and use print scaling to address minor size discrepancies. The safety boundary guidelines can help you determine if the content is outside the printable area.
Q: What are the differences between the Lite version and the full version?
A: The functionality and interface are consistent. The full version bundles Chromium and provides device-level printing parameters (specifying printers, silent printing, etc.). The Lite version uses the system WebView, is small in size and starts quickly, and macOS printing follows the system's native workflow.
Q: Will there be a charge?
A: Completely free and open-source, under the MIT license. We welcome you to submit issues, suggestions, or pull requests on GitHub.
73 de BH5HIE