NetSendo v2.3.2: Localized Welcome Emails & Safer Sign-Up
First impressions count. Picture a new customer who has just ordered a NetSendo Cloud instance. They open their inbox and the first email says "We received a request to reset the password". They never asked for that, and the email may not even be in their language. It looks like a mistake or a phishing attempt, and it's a poor start for a product you're asking people to trust with their audience.
NetSendo v2.3.2 fixes this. It also makes sure password emails link to your installation, and it removes the "Sign up" link once registration is no longer possible. These are small changes, but they make onboarding clearer for every NetSendo installation, Cloud or self-hosted.
netsendo:bootstrap sends new Cloud administrators a welcome email in the language of their order instead of a password-reset email. The password relay now gets your installation's login_url (from APP_URL), so "Forgot password" links point to your own NetSendo. The sign-in page shows "Sign up" only until the first account exists. The "Registration is closed" message is now translated into en, pl, de and es and explains why registration is closed.
🚀 What's New in v2.3.2
Real Welcome Emails
New Cloud administrators get a welcome email, not a reset request.
Order Language
The --locale flag sends the email in the customer's language.
Your Own Sign-In Link
Password links are built from your APP_URL.
Sign-Up Shown Only When Possible
The registration link is hidden once an administrator exists.
Welcome emails for new Cloud instances
When a NetSendo Cloud instance is provisioned, the netsendo:bootstrap command creates the administrator and asks the password relay to send them a link for setting their password. Before this release, the relay couldn't tell a brand-new account from a forgotten password. Every new customer got the standard reset email, in English.
Now the bootstrap command tells the relay that the email is a welcome (reason: welcome) and which language to use, via --locale, which is set to the language of the order. A customer who ordered in Polish gets a Polish welcome email.
Think of the change this way: before, it was like a hotel greeting a new guest with "We hear you've lost your key." Now the guest gets a proper welcome and their key.
Password links that point to your installation
With every request, the password relay now also gets this installation's sign-in address (login_url, taken from APP_URL), plus the language and the administrator's name. The relay uses that address to build the link in the email. Before, the link could point to the relay's own host, which confused users and made the email look less trustworthy.
Below is a simplified sketch of the information sent with each request. The exact payload format may differ.
{
"reason": "welcome",
"locale": "pl",
"name": "Anna Kowalska",
"login_url": "https://mail.example.com/login"
}
Registration is offered only while it's possible
In NetSendo, registering creates the administrator. That's why the "Don't have an account? Sign up" link now appears only before the first account exists:
- Self-hosted: works as before. The first person to open a fresh installation registers as its administrator. After that, registration is closed.
- Cloud: registration is closed right after installation, because bootstrap has already created the administrator.
After that, the administrator adds further users from inside the app. The "Registration is closed" message, which used to be Polish only, is now translated into English, Polish, German and Spanish. It also explains why: the installation already has an administrator.
ℹ️ Note: This behavior is covered bytests/Feature/RegistrationClosedTest.phpandtests/Feature/BootstrapCommandTest.php.
💼 Benefits & Use Cases
- Onboarding emails match what the user actually did
- Emails arrive in the customer's language
- Links lead to your own domain, which builds trust and keeps your branding consistent
- No dead-end sign-up links on established installations
SaaS Onboarding on NetSendo Cloud
A German-speaking customer orders a Cloud instance. Bootstrap runs with the order's locale, and the customer:
- gets a German welcome email instead of an English reset request
- clicks a link that opens their own instance's sign-in page
- doesn't see a confusing sign-up option, because their account already exists
Agencies Running Client Installations
If you run separate NetSendo installations for clients, each one has its own APP_URL. Password emails now link to the correct client domain, so a client's team never ends up on an unfamiliar host.
E-commerce Teams Self-Hosting
An online store installs NetSendo and the owner registers first, becoming the administrator. From then on, visitors to the sign-in page don't see a sign-up link. If someone opens the registration page directly, a clear, translated message tells them the store already has an administrator. Staff accounts for marketing and support are added by the owner.
🛠️ Step-by-Step: Upgrading to v2.3.2
- Back up your data
Before any upgrade, back up your database and
.envfile. With self-hosting, your data is your own, and so are your backups. - Check your
APP_URLThe sign-in link in password emails comes from
APP_URL. Make sure it is the public, HTTPS address users actually visit.APP_URL=https://mail.example.com - Pull the new release
If you run Docker, pull the updated images and restart. Adjust the commands to match your setup.
docker compose pull docker compose up -d - Clear the cached configuration
If you changed
APP_URL, clear the cached configuration so the new value is used. The service name depends on your compose file.docker compose exec app php artisan config:clear - Check the sign-in page
Open
/loginin a private browser window. On an installation that already has an administrator, the "Sign up" link should be gone. - Test "Forgot password"
Request a reset for a test user and check that the link in the email points to your domain.
⚠️ Common pitfall: IfAPP_URLis still set tohttp://localhostor an internal Docker hostname, password emails will contain that address. Always set it to the public URL.
💡 Pro Tip: On a fresh self-hosted server, register your administrator account right after installing. Until the first account exists, the first person to open the installation becomes its administrator.
🎯 Expert Tips
Don't leave a fresh, publicly reachable installation without an administrator. Register right away or restrict access, for example with a firewall or VPN, until you do.
APP_URLPassword links carry sensitive tokens. An HTTPS address protects them in transit and avoids browser warnings.
Since public registration is closed, have the administrator create team members' accounts. You keep control of who has access to your lists.
If you maintain a fork, run the new tests to make sure your changes don't break registration or bootstrap behavior.
php artisan test --filter=RegistrationClosedTest
php artisan test --filter=BootstrapCommandTest🏁 Conclusion
v2.3.2 is a small release that improves onboarding:
- New Cloud administrators get a welcome email in their own language, not a password-reset email.
- Password emails link to your own installation, based on
APP_URL. - The sign-in page shows sign-up only while it's possible, and the "Registration is closed" message is translated into four languages and explains why.
For configuration details, see the documentation. To connect NetSendo to your other tools, browse the integrations.
Ready to Upgrade?
Get NetSendo v2.3.2 and give your users a better first experience on a platform you control.

