希望你们都平安。最近我实现了 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)属性应为 smtps
和 imaps
.但是,您根本不需要设置它们。只需删除它们。 xtenxion.com
ssl 证书需要添加到您的信任库。
关于java - 具有 SSL-Handshake-Exception 的 Android JavaX-Mail,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67315523/