NetSendo
Platform Updates

NetSendo v2.3.2: Localized Welcome Emails & Safer Sign-Up

NetSendo Team6 min read

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.

TL;DR: In v2.3.2, 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 by tests/Feature/RegistrationClosedTest.php and tests/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

  1. Back up your data

    Before any upgrade, back up your database and .env file. With self-hosting, your data is your own, and so are your backups.

  2. Check your APP_URL

    The 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
  3. 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
  4. 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
  5. Check the sign-in page

    Open /login in a private browser window. On an installation that already has an administrator, the "Sign up" link should be gone.

  6. Test "Forgot password"

    Request a reset for a test user and check that the link in the email points to your domain.

⚠️ Common pitfall: If APP_URL is still set to http://localhost or 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

1
Claim new installations quickly

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.

2
Use HTTPS in APP_URL

Password links carry sensitive tokens. An HTTPS address protects them in transit and avoids browser warnings.

3
Add users from inside the app

Since public registration is closed, have the administrator create team members' accounts. You keep control of who has access to your lists.

4
Run the test suite on custom builds

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.

#release#onboarding#security#localization#netsendo-cloud#self-hosted
Share