Android JavaX-Mail 出现 SSL 握手异常
Android JavaX-Mail Having SSL-Handshake-Exception
希望你们都平安。最近我在我的应用程序中实现了 JavaX mail。当我实现此代码时,它工作正常,我从我的 Webmail 收到邮件。但几天后我再次尝试 运行 这段代码,它开始给我 异常 。我检查了 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.doInBackground(ForgetPassword_One_Activity.java:86)
at com.xtenxion.letsplayqna.activities.ForgetPassword_One_Activity.doInBackground(ForgetPassword_One_Activity.java:73)
at android.os.AsyncTask.call(AsyncTask.java:345)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor.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.doInBackground(ForgetPassword_One_Activity.java:86)
at com.xtenxion.letsplayqna.activities.ForgetPassword_One_Activity.doInBackground(ForgetPassword_One_Activity.java:73)
at android.os.AsyncTask.call(AsyncTask.java:345)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor.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;
}
}
}
异常:
Error Could not connect to SMTP host: xtenxion.com, port: 465
我尝试了几个代码来连接我的 Webmail 但仍然失败。我使用的 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);
点协议属性应为 smtps
和 imaps
。但是,您根本不需要设置它们。只需删除它们。 xtenxion.com
ssl 证书需要添加到您的信任库。
希望你们都平安。最近我在我的应用程序中实现了 JavaX mail。当我实现此代码时,它工作正常,我从我的 Webmail 收到邮件。但几天后我再次尝试 运行 这段代码,它开始给我 异常 。我检查了 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.doInBackground(ForgetPassword_One_Activity.java:86) at com.xtenxion.letsplayqna.activities.ForgetPassword_One_Activity.doInBackground(ForgetPassword_One_Activity.java:73) at android.os.AsyncTask.call(AsyncTask.java:345) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at android.os.AsyncTask$SerialExecutor.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.doInBackground(ForgetPassword_One_Activity.java:86) at com.xtenxion.letsplayqna.activities.ForgetPassword_One_Activity.doInBackground(ForgetPassword_One_Activity.java:73) at android.os.AsyncTask.call(AsyncTask.java:345) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at android.os.AsyncTask$SerialExecutor.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;
}
}
}
异常:
Error Could not connect to SMTP host: xtenxion.com, port: 465
我尝试了几个代码来连接我的 Webmail 但仍然失败。我使用的 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);
点协议属性应为 smtps
和 imaps
。但是,您根本不需要设置它们。只需删除它们。 xtenxion.com
ssl 证书需要添加到您的信任库。