Environment
-
OS: Ubuntu (kernel 6.8.0-87-generic)
-
Web server: Apache/2.4.58 (Ubuntu)
-
PHP: 8.3.30 (NTS)
-
SuiteCRM: 8.9.2 (legacy app under
/public/legacy) -
Mail provider: IONOS (smtp.ionos.com)
Issue description
I am testing outbound email in SuiteCRM 8.9.2 and observe inconsistent SMTP authentication behavior that looks like the SMTP password is not reliably persisted or reloaded.
Observed behavior
-
Configure an Outbound Email Account (Admin → Outbound Email Accounts) with:
-
SMTP server: smtp.ionos.com
-
Port: 587
-
Encryption: STARTTLS / TLS
-
Auth type: Basic Auth
-
Username: full mailbox address (e.g. user@domain.com)
-
-
Enter the SMTP password and save.
-
Immediately after saving:
-
“Send Test Email” works.
-
Sending an email from a record (Target / Contact) works.
-
-
After logging out and logging back into SuiteCRM (or after some navigation):
-
Sending email fails.
-
Error shown:
SMTP Error: Could not authenticate -
SMTP log shows successful STARTTLS, AUTH LOGIN attempted, but fails with:
535 Authentication credentials invalid
-
-
Re-entering the same SMTP password, saving again:
-
Email sending works again immediately.
-
After another reload / logout, it fails again.
-
This cycle is 100% reproducible.
Important details
-
The mailbox credentials are correct and work consistently in:
-
IONOS webmail
-
Other applications (e.g. Nextcloud)
-
-
TLS handshake and SMTP protocol negotiation succeed every time.
-
Failure always happens at AUTH with 535, unless the password was just re-entered.
-
The error occurs both via “Send Test Email” and when sending real emails from records.
-
UI sometimes shows a generic “Unexpected error when calling action” when sending from a record.
Expectation
SMTP credentials should remain valid after being saved once. Authentication should not depend on re-entering the password each session.
Question
Is this a known issue in SuiteCRM 8.x regarding outbound email password storage (encryption, truncation, or cache persistence)?
Are there recommended fixes or patches (DB schema, config, or code-level) for this behavior?