Decision: prove a usable mechanism before changing a password
- No authenticators available
- No usable mechanism was selected. Check the local SASL feature, plugin files and dependencies, the server's AUTH advertisement after TLS, and any forced authenticator list.
- SASL authentication failed
- A mechanism was selected and attempted, so move to the username, app-password or OAuth policy, and the exact bounded server reply.
- Message accepted
- Authentication is no longer the failing boundary. Preserve the SMTP response and follow provider and recipient delivery evidence.
Never post smtp_pass, an app password, OAuth token, raw .muttrc, AUTH payload, or a full Mutt debug log. The planner below requests only bounded states and runs entirely in this browser.
Browser-local evidence planner
Find the first missing SMTP AUTH boundary
No email address, username, hostname, password, app password, token, configuration text, message, or debug log is requested or transmitted.
- Runtime
- Plugin load
- Server
- Policy
- Outcome
- Boundary
- Next action
- Exit condition
- Safety
What the current Termux recipes prove
At Termux Mutt recipe revision 95ba7f4a806bb363e0d9b4cb3f63484a94631c81, Mutt 2.4.1 depends on libsasl and is configured with --enable-debug, --enable-smtp, --with-sasl, and --with-ssl. The recipe therefore does not support a blanket conclusion that Termux compiled SMTP or SASL out.
At libsasl recipe revision ce7bd64f2cf6145ca67a78997c2ba953d7d89320, plugins are installed under $PREFIX/lib/sasl2, LOGIN is enabled, and the package build is gated on the expected shared-object files. That gate proves file creation, not whether each plugin's runtime libraries will be installed on a user's device.
The official libsasl_2.1.28-2_aarch64.deb artifact, SHA-256 d4cc056f8509583ccd6d7d42cb41bee47715343536bc08dabd06fb1c81131ab8, shows that both libplain.so and liblogin.so need libcrypt.so. Its package control metadata has no Depends field, while Termux ships libcrypt separately. Plugin files can therefore pass presence and package-integrity checks without being loadable. This is a verifiable packaging boundary, not proof that libcrypt is missing on any particular device.
In the current issue, the reporter has now shown +USE_SASL, both plugin files present, post-TLS AUTH PLAIN LOGIN, an unset automatic authenticator policy, and no attempted-method line before the same error. That evidence narrows the next safe check to plugin loadability; it does not justify changing or exposing the password.
A historical Termux report produced the same message when libplain.so was absent at runtime. The package was repaired and a plugin-presence build gate was added. That history makes package integrity a useful first check; it is not proof that every current report has the same cause.
Run the bounded local checks
These commands report feature, package, file-presence, and dependency-presence evidence. They do not print a mail password:
mutt -v 2>&1 | grep -E '[+-]USE_(SASL|GSASL)'
apt-cache policy mutt libsasl libcrypt
dpkg -V mutt libsasl
for plugin in libplain.so liblogin.so; do
test -r "$PREFIX/lib/sasl2/$plugin" \
&& echo "$plugin present" \
|| echo "$plugin missing"
done
test -r "$PREFIX/lib/libcrypt.so" \
&& echo "libcrypt.so present" \
|| echo "libcrypt.so missing"
mutt -Q smtp_authenticators
If and only if that check prints libcrypt.so missing, install the official dependency with pkg install libcrypt, repeat the same check, and rerun one controlled Mutt attempt. The package-level repair is to declare libcrypt as a libsasl dependency and bump the package revision.
If libcrypt.so is already present but no method is attempted, keep the full log local and inspect only bounded loader evidence:
for plugin in libplain.so liblogin.so; do
ldd "$PREFIX/lib/sasl2/$plugin" 2>&1 | grep -E 'libcrypt|not found'
done
grep -E 'SASL:|sasl_client_start|No worthy mechs|No authenticators available' \
"$HOME/.muttdebug0"
An empty smtp_authenticators value is intentional: Mutt's documented default is to try the mechanisms available to both the client and server. A forced list is useful only when it names a mechanism the server actually advertises.
Inspect the post-TLS capability list
For STARTTLS, Mutt sends EHLO again after TLS specifically to obtain the authentication mechanisms. The relevant capability is the post-TLS 250-AUTH line, not a pre-TLS line and not a provider's generic setup page.
mutt -d 2
# Inspect locally after the controlled attempt:
grep -E '250[- ]AUTH|smtp_authenticate: Trying method| unavailable|SASL authentication failed' \
"$HOME/.muttdebug0"
Do not publish the full log. It can contain account, host, message, and protocol data. A safe issue update needs only: SASL feature present or absent, PLAIN/LOGIN plugin present or absent, libcrypt.so present or missing, bounded loader messages, post-TLS AUTH mechanism names, whether smtp_authenticators is unset or intersects that list, and the final bounded outcome.
Classify the first evidenced boundary
- SASL feature absent
- Verify the actual Termux repository and installed Mutt package. Do not repair this by changing a provider password.
- PLAIN or LOGIN plugin absent
- Refresh package metadata, reinstall the official
libsaslpackage, and rerun package verification before another send. - Plugin present, libcrypt absent
- Install the official
libcryptpackage, prove the library is readable, and repeat the same attempt. Do not download a standalone shared object. - Plugin and libcrypt present, still no method
- Inspect local
lddoutput and only the bounded SASL loader lines before moving to server or credential policy. - No AUTH after TLS
- Confirm the SMTP endpoint, port, TLS mode, and whether that provider enables SMTP AUTH for the account. The client has no server mechanism to choose.
- Forced list has no intersection
- For one controlled test, leave
smtp_authenticatorsunset so Mutt can intersect its available mechanisms with the server list. - Mechanism attempted, then 53x
- The selection stage passed. Follow the provider's current credential policy, account state, app-password or OAuth requirement, and exact reply.
Keep Gmail account policy separate
Google no longer supports ordinary account-password sharing for third-party mail clients. Its current guidance prefers Sign in with Google; where a client cannot use that flow, an app password may be available only for eligible accounts with 2-Step Verification. A Google 534 5.7.90 or 535 5.7.80 reply belongs to this later credential-policy stage, not to the earlier "No authenticators available" stage.
Other providers can expose different mechanisms and account controls. Use their current documentation only after the local runtime and the post-TLS AUTH list identify what the client can actually attempt.
Evidence required before calling it fixed
mutt -vreports a SASL feature and the installed package versions are known.- The required local plugin file is readable and
dpkg -Vreports no unexplained package-integrity failure. libcrypt.sois readable and the PLAIN or LOGIN plugin has no unresolved runtime dependency.- The post-TLS EHLO advertises at least one mechanism the client can use.
smtp_authenticatorsis unset or intersects that server list.- A controlled attempt advances beyond mechanism selection and receives either a bounded credential reply or successful message acceptance.
- If accepted, the SMTP response, provider event, recipient-server outcome, and mailbox visibility remain separate evidence.
Decode the bounded SMTP reply locally, or check the public sender domain only after submission is proven.
Primary references
- Termux issue 30683: Mutt SMTP reports no authenticators
- Current reporter evidence: SASL feature, post-TLS PLAIN and LOGIN, and no attempted method
- Termux Mutt recipe: Mutt 2.4.1 SMTP, debug, SSL, and SASL build
- Termux libsasl recipe: plugin directory, LOGIN, and plugin file gate
- Official Termux aarch64 libsasl 2.1.28-2 package artifact
- Official Termux aarch64 libcrypt 0.2-6 package artifact
- Termux issue 1582: historical missing PLAIN plugin and package repair
- Mutt 2.4.1 source: post-TLS EHLO, mechanism selection, and distinct failure messages
- Mutt manual: SMTP support and default authenticator selection
- Mutt manual: version features and debug level 2
- Google Account Help: current app-password eligibility and guidance