java - 具有 SSL-Handshake-Exception 的 Android JavaX-Mail

标签 java android email ssl jakarta-mail

希望你们都平安。最近我实现了 JavaX 邮件 在我的应用程序中。当我实现此代码时,我正在从我的 收到邮件。网络邮箱 .但是几天后我再次尝试运行这段代码,它开始给我 异常(exception) .我检查了server-side什么都没有改变。谁能帮我解决这个问题。

public class GMailSender extends javax.mail.Authenticator {
    static {
        Security.addProvider(new JSSEProvider());
    }
    private final String user;
    private final String password;
    private final Session session;

    public GMailSender(String user, String password) {
        this.user = user;
        this.password = password;
        Properties props = new Properties();
        props.setProperty("mail.smtp.host", "xtenxion.com");
        props.setProperty("mail.smtp.ssl.enable", "true");
        props.setProperty("mail.transport.protocol", "smtp");
        props.put("mail.smtp.user", user);
        props.setProperty("mail.smtp.ssl.trust", "xtenxion.com");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.port", "465");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.socketFactory.port", "465");
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.socketFactory.fallback", "false");
        props.setProperty("mail.smtp.quitwait", "false");
        session = Session.getDefaultInstance(props, this);
    }

    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(user, password);
    }

    public synchronized Boolean sendMail(String subject, String body, String sender, String recipients) {
        try {
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(sender));
            message.addRecipient(Message.RecipientType.TO,new InternetAddress(recipients));
            message.setSubject(subject);
            message.setText(body);
            Transport.send(message);
            Log.e("SendMail","message sent successfully....");
            return true;
        } catch (Exception e) {
            Log.e("SendMail", e.getMessage(), e);
            return false;
        }
    }

}
有这个异常 :

2021-04-29 16:05:11.810 14664-15084/com.xtenxion.letsplayqna E/SendMail: Could not connect to SMTP host: xtenxion.com, port: 465 javax.mail.MessagingException: Could not connect to SMTP host: xtenxion.com, port: 465; nested exception is: javax.net.ssl.SSLHandshakeException: Connection closed by peer at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1391) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412) at javax.mail.Service.connect(Service.java:310) at javax.mail.Service.connect(Service.java:169) at javax.mail.Service.connect(Service.java:118) at javax.mail.Transport.send0(Transport.java:188) at javax.mail.Transport.send(Transport.java:118) at com.xtenxion.letsplayqna.mail.GMailSender.sendMail(GMailSender.java:56) at com.xtenxion.letsplayqna.activities.ForgetPassword_One_Activity$1$1.doInBackground(ForgetPassword_One_Activity.java:86) at com.xtenxion.letsplayqna.activities.ForgetPassword_One_Activity$1$1.doInBackground(ForgetPassword_One_Activity.java:73) at android.os.AsyncTask$2.call(AsyncTask.java:345) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:257) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) at java.lang.Thread.run(Thread.java:784) Caused by: javax.net.ssl.SSLHandshakeException: Connection closed by peer at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method) at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:351) at com.android.org.conscrypt.OpenSSLSocketImpl.waitForHandshake(OpenSSLSocketImpl.java:665) at com.android.org.conscrypt.OpenSSLSocketImpl.getInputStream(OpenSSLSocketImpl.java:627) at com.sun.mail.smtp.SMTPTransport.initStreams(SMTPTransport.java:1449) at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1366) com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412)  at javax.mail.Service.connect(Service.java:310)  at javax.mail.Service.connect(Service.java:169)  at javax.mail.Service.connect(Service.java:118)  at javax.mail.Transport.send0(Transport.java:188)  at javax.mail.Transport.send(Transport.java:118)  at com.xtenxion.letsplayqna.mail.GMailSender.sendMail(GMailSender.java:56)  at com.xtenxion.letsplayqna.activities.ForgetPassword_One_Activity$1$1.doInBackground(ForgetPassword_One_Activity.java:86)  at com.xtenxion.letsplayqna.activities.ForgetPassword_One_Activity$1$1.doInBackground(ForgetPassword_One_Activity.java:73)  at android.os.AsyncTask$2.call(AsyncTask.java:345)  at java.util.concurrent.FutureTask.run(FutureTask.java:266)  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:257)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)  at java.lang.Thread.run(Thread.java:784)


更新 :
public class GMailSender extends javax.mail.Authenticator {
    static {
        Security.addProvider(new JSSEProvider());
    }

    private final Session session;

    public GMailSender(String user, String password) {
        Properties props = new Properties();
        props.setProperty("mail.smtp.host", "xtenxion.com");
        props.setProperty("mail.smtp.ssl.trust", "xtenxion.com");
        props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.setProperty("mail.smtp.socketFactory.fallback", "false");
        props.setProperty("mail.smtp.port", "465");
        props.setProperty("mail.smtp.socketFactory.port", "465");
        props.put("mail.smtp.auth", "true");
        props.put("mail.debug", "true");
        props.put("mail.store.protocol", "pop3");
        props.put("mail.transport.protocol", "smtp");
        session = Session.getInstance(props,
                new javax.mail.Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(user, password);
                    }
                });
        session.setDebug(true);
    }



    public synchronized Boolean sendMail(String subject, String body, String sender, String recipients) {
        try {
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(sender));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
            message.setSubject(subject);
            message.setText(body);
            Transport.send(message);
            Log.e("SendMail", "message sent successfully....");
            return true;
        } catch (Exception e) {
            Log.e("SendMail", "Error " + e.getMessage());
            return false;
        }
    }

}
异常(exception) :

Error Could not connect to SMTP host: xtenxion.com, port: 465


我尝试了几个代码来连接我的网络邮箱 但仍然失败。我使用的 Webmail 地址是 ahmad@xtenxion.com .我不知道出了什么问题以及如何解决。

最佳答案

How do I access Gmail with Jakarta Mail? :

String host = "smtp.gmail.com";
String username = "user";
String password = "passwd";
Properties props = new Properties();
props.setProperty("mail.smtp.host", host);
props.setProperty("mail.smtp.ssl.enable", "true");
// set any other needed mail.smtp.* properties here
Session session = Session.getInstance(props);
MimeMessage msg = new MimeMessage(session);
// set the message content here
Transport.send(msg, username, password);
点协议(protocol)属性应为 smtpsimaps .但是,您根本不需要设置它们。只需删除它们。 xtenxion.com ssl 证书需要添加到您的信任库。

关于java - 具有 SSL-Handshake-Exception 的 Android JavaX-Mail,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67315523/

相关文章:

android - ABS Theme.Sherlock.Dialog 在 GingerBread 上显示对话框标题

xml - Xcode 中的核心数据导出和邮件

c# - 雅虎联系人 api asp.net c#

java - 从 JComboBox 获取值时出错

Javadoc 链接到 Oracle 的 API 文档不再有效

android - Firebase 检查用户的身份验证状态/如果用户存在

php - 邮件内容在 Joomla 3 中显示为 html 代码

java - 如何在更改为横向模式android时继续播放视频

java - 未发送位置 header 时从http响应获取URL

android - 关闭弹出窗口时如何处理 ListView 上的触摸事件