Sending an email is a conversation between your app and an outgoing mail server. Your app must know the correct address, the correct port, and the correct password or token. If any of those is wrong, the server refuses the message and it sits in the outbox.
Authentication is the most common modern cause. Many providers no longer accept a plain password and require an app-specific password or an OAuth sign-in. After a password change, the app often keeps trying the old one until the account is updated.
Size limits create a different symptom. Attachments that look small on your device can be much larger after encoding, and many servers reject messages above a few megabytes. The email stays in the outbox without a clear explanation.
Connection security settings also matter. Servers now expect encrypted connections on specific ports. A setting that worked years ago may be rejected today because the server no longer allows older, unencrypted methods.