TL;DR: If user invites fail in Odoo, the New Portal Signup email template is likely out of sync. Reset that template to the latest default, retest, then (optionally) reintroduce your custom copy carefully.
Why this guide exists (and who it’s for)
If you manage an Odoo instance—even casually—you’ll eventually hit an invite that refuses to send. It’s maddening because it looks like everything should work: the user exists, permissions look fine, mail server is configured, and yet… error.
This guide is for admins, implementers, and power users who need a safe, repeatable fix plus context for why it happens and how to keep it from recurring.
What’s actually going wrong?
Odoo’s invite flow leans on a specific email template—Settings: New Portal Signup—to generate the message and token your invitee receives. If that template was customized (even slightly) and later a system update changed how Odoo expects that template to behave, things can drift.
Result: the template doesn’t update cleanly → the invite process throws an error → you can’t add users.
Why resetting works
Resetting does two things:
- Reverts the template to Odoo’s current default version (the one Odoo expects).
- Clears any stale fields, broken dynamic variables, or XML/qWeb fragments left over from earlier edits.
After the reset, Odoo regains a known-good baseline, and the invite flow usually resumes instantly.
The fix (step-by-step, with safety built in)
Best practice: Start in a duplicate/staging database first. Verify there, then repeat in production.
-
Open Templates
Go to Settings → Review All Templates. -
Find the correct template
Search for Settings: New Portal Signup- Double-check you’re selecting the one under Settings, not a similarly named custom template.
-
Reset to default
Click Reset Template (this restores the latest Odoo default). -
Confirm the reset
Hit the purple Reset Template button. Odoo applies the default and clears drift. -
Retest invites
- Invite a test user (a non-critical email you own).
- Confirm they receive the message and can log in.
Prefer a video walkthrough? Here you go:
👉 https://drive.google.com/file/d/1QM8BmO4zzjAejd3BGsm9oYng7xyEwBRX/view?usp=sharing
Alternative path (if you don’t see Templates)
If your menu doesn’t show Review All Templates, you likely need more permissions or Developer Mode.
Enable Developer Mode → Go to Technical → Email → Templates → open Settings: New Portal Signup → Reset.
Safeguards (so you don’t lose useful custom copy)
If you’ve invested in tone, branding, or legal text:
- Copy your custom text to a safe note before resetting.
- After the reset, reapply only what’s essential (plain text, light formatting).
- Avoid changing dynamic fields or removing placeholders (e.g., ${object.partner_id.name}, ${signup_url}) unless you know exactly what you’re doing.
- Re-test after each small change. The goal is minimal customization on critical templates.
Troubleshooting if the error persists
If invites still fail after a clean reset, move down this list in order:
-
Wrong template edited?
Confirm you reset Settings: New Portal Signup, not a similarly named custom template. -
Outgoing mail server
- Check Settings → Technical → Outgoing Mail Servers.
- Verify credentials, port/SSL, and connection test.
- Look at Settings → Technical → Emails for delivery errors.
-
User access & portal rules
- Ensure invitee has the correct Access Rights (Portal vs. Internal).
- If you use portal invites for customers, verify the user isn’t already internal or archived.
-
Mail queue & bounces
- Look for messages stuck in the queue or bounced recipients.
- If using a third-party SMTP (e.g., SES, SendGrid), verify sending domain, SPF/DKIM/DMARC, and account limits.
-
Modules & customizations
- Temporarily disable any custom modules that override email templates or signup flows.
- Retest; if the issue disappears, diff the custom code.
-
Logs
- Server logs will often name the failing template, variable, or rendering step.
- Fix that directly or keep the reset default.
Preventing the problem in the future
- Keep critical templates close to default. Favor brand elements in other, less sensitive templates (newsletters, order confirmations).
- Version your edits. Paste pre/post versions in an internal SOP or repo.
- Retest after upgrades. After each Odoo update, run a short “core flow” smoke test: invite user → receive email → login works.
- Separate content from logic. Don’t remove placeholders or alter qWeb logic unless absolutely necessary.
Copy-paste SOP (for your team)
Title: Restore Odoo Invite Flow by Resetting Portal Signup Template
When to run: Any time invites fail or after major updates
Steps:
- Backup custom wording (if any)
- Reset Settings: New Portal Signup template
- Send a test invite and confirm receipt & login
- Reapply minimal copy (if needed), then retest
- Check mail server/logs if issues persist
- Document the change (who, when, why)
Frequently asked questions
Yes, it restores Odoo’s default. Copy your custom text first, reset, then reapply light edits.
Yes—just keep it minimal. Avoid touching dynamic variables or logic blocks. Test after any change.
Not always. Many instances can reset via Settings → Review All Templates. If you don’t see it, enable Developer Mode and go via Technical → Email → Templates.
Check that ${signup_url} (or equivalent) is present and intact in the template, and verify your base URL in Settings → Technical → System Parameters (e.g., web.base.url).
Yes. If the user already exists as internal/archived, or your invitation flow expects Portal only, you may hit edge cases. Align user type with your flow.