Secure Messages for Perfex CRM
Version: 1.2.0 - 05/07/2026
Author: Cloudmill
Support:
1. Introduction
Secure Messages lets you share sensitive information such as passwords and API keys through Zero-Knowledge AES-256 encryption. Messages are encrypted in the browser before anything is sent, so the server never sees the plain text or the decryption key. Staff can create secure messages from the admin area, clients can create them from the customer portal, and both sides can exchange them directly from support tickets.
2. Installation
Follow these steps to install the module in Perfex CRM.
Step 1 – Download
Download the module ZIP file from CodeCanyon.
Step 2 – Upload the Module
Log in to your Perfex CRM Admin Panel and navigate to: Setup → Modules
Click Upload Module and select: secure_messages.zip
Step 3 – Activate the Module
After uploading, click Activate to enable the module.
Step 4 – Configure Permissions
Navigate to: Setup → Staff → Permissions
Enable the Secure Messages permission for the staff members who should be allowed to create and manage secure messages.
3. Data Destruction & Security
The module is designed to ensure that sensitive information does not remain stored longer than necessary.
Two independent mechanisms ensure automatic data removal.
Burn-After-Reading
When the Burn-After-Reading option is enabled:
-
The recipient opens the secure message.
-
The message is decrypted locally in the browser.
-
Once the message is opened, the encrypted record is immediately deleted from the database.
This ensures that the message can only be viewed once.
Automated Expiration via Cronjob
Messages that are not configured for burn-after-reading are automatically removed using the Perfex CRM Cronjob system.
The system performs the following actions:
-
The module stores an expiration timestamp when the message is created.
-
The Perfex Cronjob runs.
-
During each Cronjob execution, the module scans the database for expired messages.
-
Any message whose expiration time has passed is permanently deleted from the database.
Cronjob Requirement
Your Perfex CRM Cronjob must be configured correctly on the server. This ensures that expired secure messages are removed automatically and the database remains clean.
4. How the Encryption Works
The module follows a Zero-Knowledge security model, meaning the server never has access to the decryption key.
The process works as follows:
Step 1 – Client-Side Encryption
When a user creates a secure message, JavaScript encrypts the message using AES-256 encryption directly in the browser.
Step 2 – Server Storage
Only the encrypted message blob is sent to the server and stored in the database.
The decryption key is never stored on the server.
Step 3 – Secure Link
The decryption key is embedded in the URL fragment, for example:
https://example.com/secure-message/abc123#decryptionkey
Everything after the # symbol is never transmitted to the server and only exists in the recipient's browser.
Step 4 – Decryption
When the recipient opens the link:
-
The browser extracts the key from the URL fragment.
-
The encrypted message is fetched from the server.
-
The browser decrypts the message locally.
Step 5 – Cleanup
When the message is read or when it expires, the encrypted data is permanently removed from the database.
5. Configuration
All settings are available under: Secure Messages → Settings
Default settings
These defaults apply to every new secure message, in the admin area, the customer area and tickets
- Default Expiration Period: 1 day, 3 days, 7 days, 30 days, or Never
- Default Self-destruction: Burn after reading (deleted immediately after the first view) or Time-bound only
- Password required to open message: when enabled, set a default password the recipient must enter before decryption starts
Customer area
- Availability in customer area: Disabled, Standalone page, Ticket integration, or Both. With the standalone page enabled, a "Secure Message" item appears in the customer portal menu.
- After creating (standalone page): choose what happens when a clientcreates a message. Send by email directly emails the secure link to the recipient you configured. Show link to copy shows the link on screen so the client can deliver it themselves.
- Recipient email addresses (standalone page): one or more email addresses, separated by commas. Add an optional display name per entry as `Name|
Dit e-mailadres wordt beveiligd tegen spambots. JavaScript dient ingeschakeld te zijn om het te bekijken. ` (names cannot contain commas). With a single address the client sees it as a fixed recipient; with multiple addresses the client picks the recipient from a list. The email is only ever sent to an address from this list.
Per-option controls
For the password, the expiration period and the self-destruction you decide per option who is in control, separately for the customer area page and for the secure message box on tickets:
- Sender chooses: the sender picks the value in the form
- Use default and show: your default is applied and shown to the sender
- Use default and hide: your default is applied silently
For tickets, the password option has an extra choice, No password (the default), so emailed links keep working without the recipient needing a password. When the sender sets a password themselves, it is their own password; the shared default password is never shown in the customer area.
Cronjob Integration
No additional configuration is required.
The module automatically hooks into the Perfex CRM Cronjob system using the after_cron_run action to perform cleanup tasks.
6. Customer Area
With the standalone page enabled, clients find a "Secure Message" item in the customer portal menu. The form always shows who will receive the message before it is created. Depending on your per-option settings, the client can also set a reference, the expiration period, the self-destruction behaviour and a password.
After creating the message, the secure link is either emailed directly to the configured recipient or shown on screen with instructions to copy and deliver it, depending on the "After creating" setting. In both cases the message itself is encrypted in the client's browser and never leaves it unencrypted.
7. Secure Messages in Tickets
With ticket integration enabled, a "Send secure message" button appears on the ticket detail page, for staff in the admin area and for clients in the customer portal. The sender types the sensitive text in a separate box; it is encrypted in the browser and the secure link is emailed directly to the other party. Nothing confidential is posted in the ticket thread.
- Recipient resolution: staff messages go to the ticket contact. Client messages go to the assigned staff member, or to the department email address when no one is assigned. If neither can be resolved, the button is not shown.
- Visible record: every send adds a line to the ticket conversation ("X sent a secure message to Y."), so there is a permanent record that a secure note was exchanged, even after the message expires. The line never contains the link or the content.
- Reference: ticket messages show the ticket number and subject as their reference in the admin overview.
8. Notification Email
The email that delivers the secure link uses a dedicated, editable template under Setup → Email Templates ("Secure Message Link"), available in every bundled language. You can use the merge fields `{sender_name}`, `{secure_message_link}` and `{ticket_reference}`. The email is sent immediately and is never stored in the email queue, so the link (which contains the decryption key) never sits in your database.
9. Changelog
Version 1.2.0 – July 2026:
Customer area support: clients create secure messages from the portal, via a standalone page or directly from tickets.
Configurable recipient list with optional display names, per-option controls for password, expiration and self-destruction, a visible record line in the ticket conversation, ticket references in the admin overview, and an editable notification email template. Fully translated in all bundled languages.
Version 1.1.0 – April 2026:
No more CDN assets, strict-mode JavaScript,
improved styling, admin settings groups and an uninstall script.
Version 1.0.0 – March 2026
Initial release.
Features include:
-
Client-side AES-256 encryption
-
Zero-Knowledge architecture
-
Burn-after-reading secure messages
-
Automatic Cronjob cleanup for expired messages
-
Support for 20+ languages, including:
- Brazilian Portuguese
- Bulgarian
- Canadian French
- Catalan
- Chinese
- Czech
- Dutch
- English
- Finnish
- French
- German
- Greek
- Indonesia
- Italian
- Japanese
- Norwegian
- Persian
- Polish
- Portuguese
- Romanian
- Russian
- Slovak
- Spanish
- Swedish
- Turkish
- Ukrainian
- Vietnamese
7. Support
If you encounter any issues or need help with installation, configuration, or usage, please contact: