You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio应用中使用JavaMail API发邮件:服务器连接代码存在Bug

解决无法修改发件人邮箱信息的问题

看起来你遇到的核心问题是sendMail函数没有使用每次点击按钮时最新提取的邮箱信息,大概率是因为你要么依赖了全局/静态变量缓存旧值,要么没有正确把新获取的邮箱参数传递给sendMail。下面是具体的排查和解决步骤:

第一步:修正EditText的初始化与文本提取逻辑

首先,findViewById不需要每次点击按钮时都执行,控件实例在Activity生命周期内是固定的,你可以在onCreate里只初始化一次:

private EditText et_email_from;
private EditText et_password;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout);
    
    // 只初始化一次控件实例
    et_email_from = findViewById(R.id.et_email_from);
    et_password = findViewById(R.id.et_password);
    
    // 绑定按钮点击事件
    Button sendBtn = findViewById(R.id.btn_send);
    sendBtn.setOnClickListener(v -> onSendMailClicked());
}

然后在点击事件里,每次都提取最新的文本内容:

private void onSendMailClicked() {
    // 获取最新的邮箱和密码,记得trim()避免空格干扰
    final String user = et_email_from.getText().toString().trim();
    final String password = et_password.getText().toString().trim();
    
    // 关键:把最新的user和password传递给sendMail
    sendMail(user, password);
}

第二步:修改sendMail函数,使用传入的最新参数

如果你的sendMail之前是依赖全局变量(比如private String mUser;)来获取邮箱信息,那肯定会导致旧值被重复使用。现在要改成直接使用传入的参数:

错误示例(依赖全局变量):

private String mUser;
private String mPassword;

private void sendMail() {
    // 这里用的是之前缓存的mUser/mPassword,不是最新的
    // 比如配置邮件客户端
    MailSender sender = new MailSender(mUser, mPassword);
    // ...发送逻辑
}

正确示例(使用传入的参数):

private void sendMail(String user, String password) {
    // 直接使用本次点击传入的最新值
    if (TextUtils.isEmpty(user) || TextUtils.isEmpty(password)) {
        // 可以加个空值判断,避免无效请求
        Toast.makeText(this, "请输入完整的邮箱和密码", Toast.LENGTH_SHORT).show();
        return;
    }
    
    // 配置邮件发送器
    MailSender sender = new MailSender(user, password);
    // ...后续发送邮件的逻辑
}

额外排查点

  • 如果sendMail是异步执行的(比如用了AsyncTask、Coroutine或者线程),确保在异步任务中使用的是传入的user/password参数,而不是外部的全局变量
  • 检查EditText是否在布局中正确设置了android:inputType(比如邮箱类型textEmailAddress),避免输入格式问题导致的无效内容

这样修改后,每次点击按钮都会提取最新的邮箱和密码,并传递给sendMail函数,自然就能修改发件人信息了。

内容的提问来源于stack exchange,提问作者user9612191

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:10:30