发送邮件时出现异常,java
你好。 我正在尝试重写我们的代码,以使用ssl身份验证发送邮件。因为我们的系统管理员添加了后缀代理身份验证。在linux机器上的主机中,有smtp服务器和ip的服务器名。我检查了与telnet的连接 这里是我创建属性和会话的代码发送邮件时出现异常,java,java,jakarta-mail,Java,Jakarta Mail,你好。 我正在尝试重写我们的代码,以使用ssl身份验证发送邮件。因为我们的系统管理员添加了后缀代理身份验证。在linux机器上的主机中,有smtp服务器和ip的服务器名。我检查了与telnet的连接 这里是我创建属性和会话的代码 private Properties createProperties() { Properties properties = new Properties(); properties.setProperty("mail.smtp.host", OurS
private Properties createProperties() {
Properties properties = new Properties();
properties.setProperty("mail.smtp.host", OurSTMPHostServer);
properties.setProperty("mail.smtp.port", "587"); //SSL Port
properties.setProperty("mail.smtp.socketFactory.port", "465"); //SSL Port
properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
properties.setProperty("mail.smtp.auth", "true");
properties.setProperty("mail.smtp.user", MAIL_USER);
properties.setProperty("mail.smtp.password", MAIL_PASSWORD);
return properties;
}
private Session createSession(Properties properties) {
Session session = Session.getInstance(properties,
new javax.mail.Authenticator() {
protected PasswordAuthentication
getPasswordAuthentication() { return new PasswordAuthentication(MAIL_USER, MAIL_PASSWORD); }
});
session.setDebug(true);
return session;
}
<pre>org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Exception reading response;
nested exception is:
java.net.SocketTimeoutException: Read timed out. Failed messages: javax.mail.MessagingException: Exception reading response;
nested exception is:
java.net.SocketTimeoutException: Read timed out; message exception details (1) are:
Failed message 1:
javax.mail.MessagingException: Exception reading response;
nested exception is:
java.net.SocketTimeoutException: Read timed out
at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1611)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1369)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412)
at javax.mail.Service.connect(Service.java:288)
at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:389)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:340)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:336)
at com.zina.service.mail.MailSenderFacade.send(MailSenderFacade.java:122)
at com.zina.service.mail.MailService.sendTextMessage(MailService.java:131)
at com.zina.service.mail.MailService.sendTextMessage(MailService.java:193)
at com.zina.service.person.PersonService.sendRegistrationApproveMail(PersonService.java:255)
at com.zina.service.person.PersonService.registerUser_aroundBody4(PersonService.java:167)
at com.zina.service.person.PersonService$AjcClosure5.run(PersonService.java:1)
</pre>
下面是创建消息的代码
public MimeMessage createMimeMessage(String mailFromAddress, String mailFromName,
String subject, String mailTo, String message, String messageText, List<File> fileList) throws MessagingException, UnsupportedEncodingException {
MimeMessage msg = new MimeMessage(createSession(createProperties()));
msg.setFrom(new InternetAddress(mailFromAddress, mailFromName));
msg.setSubject(subject);
msg.setRecipients(Message.RecipientType.TO, mailTo);
MimeBodyPart wrap = new MimeBodyPart();
MimeMultipart cover = new MimeMultipart("alternative");
MimeBodyPart text = new MimeBodyPart();
text.setHeader("Content-Transfer-Encoding", "base64");
text.setContent(messageText, "text/plain;charset=UTF-8");
cover.addBodyPart(text);
MimeBodyPart html = new MimeBodyPart();
html.setHeader("Content-Transfer-Encoding", "base64");
html.setContent(message, "text/html;charset=UTF-8");
cover.addBodyPart(html);
wrap.setContent(cover);
MimeMultipart content = new MimeMultipart("related");
msg.setContent(content);
content.addBodyPart(wrap);
msg.saveChanges();
return msg;
}
public void sendTextMessage(String mailFromAddress, @Nullable String mailFromName, String subject, String mailTo, String message) {
MimeMessage msg = null;
try {
String messageText = convertService.htmlToText(message);
msg = createMimeMessage(mailFromAddress, mailFromName, subject, mailTo, message, messageText, Collections.<File>emptyList());
mailSenderFacade.send(msg);
}
}
public MimeMessage createmimessage(字符串mailFromAddress,字符串mailFromName,
字符串主题、字符串邮件收件人、字符串消息、字符串消息文本、列表文件列表)引发MessaginException、UnsupportedEncodingException{
MimeMessage msg=新的MimeMessage(createSession(createProperties());
msg.setFrom(新的InternetAddress(mailFromAddress,mailFromName));
msg.setSubject(主题);
msg.setRecipients(Message.RecipientType.TO,mailTo);
MimeBodyPart包裹=新的MimeBodyPart();
MimemMultipart封面=新的MimemMultipart(“备选”);
MimeBodyPart文本=新的MimeBodyPart();
setHeader(“内容传输编码”、“base64”);
setContent(messageText,“text/plain;charset=UTF-8”);
封面。添加正文部分(文本);
MimeBodyPart html=新的MimeBodyPart();
setHeader(“内容传输编码”、“base64”);
setContent(消息,“text/html;charset=UTF-8”);
cover.addBodyPart(html);
包装。设置内容(封面);
MimeMultipart内容=新的MimeMultipart(“相关”);
msg.setContent(content);
内容。添加车身部件(包裹);
msg.saveChanges();
返回味精;
}
这里是发送消息的代码
public MimeMessage createMimeMessage(String mailFromAddress, String mailFromName,
String subject, String mailTo, String message, String messageText, List<File> fileList) throws MessagingException, UnsupportedEncodingException {
MimeMessage msg = new MimeMessage(createSession(createProperties()));
msg.setFrom(new InternetAddress(mailFromAddress, mailFromName));
msg.setSubject(subject);
msg.setRecipients(Message.RecipientType.TO, mailTo);
MimeBodyPart wrap = new MimeBodyPart();
MimeMultipart cover = new MimeMultipart("alternative");
MimeBodyPart text = new MimeBodyPart();
text.setHeader("Content-Transfer-Encoding", "base64");
text.setContent(messageText, "text/plain;charset=UTF-8");
cover.addBodyPart(text);
MimeBodyPart html = new MimeBodyPart();
html.setHeader("Content-Transfer-Encoding", "base64");
html.setContent(message, "text/html;charset=UTF-8");
cover.addBodyPart(html);
wrap.setContent(cover);
MimeMultipart content = new MimeMultipart("related");
msg.setContent(content);
content.addBodyPart(wrap);
msg.saveChanges();
return msg;
}
public void sendTextMessage(String mailFromAddress, @Nullable String mailFromName, String subject, String mailTo, String message) {
MimeMessage msg = null;
try {
String messageText = convertService.htmlToText(message);
msg = createMimeMessage(mailFromAddress, mailFromName, subject, mailTo, message, messageText, Collections.<File>emptyList());
mailSenderFacade.send(msg);
}
}
public void sendTextMessage(String mailFromAddress、@null String mailFromName、String subject、String mailTo、String message){
mimessage msg=null;
试一试{
字符串messageText=convertService.htmlotext(消息);
msg=createMimeMessage(mailFromAddress、mailFromName、subject、mailTo、message、messageText、Collections.emptyList());
mailSenderFacade.send(msg);
}
}
其中mailSenderFacade是JavaMailSender类,其中字段host=OurSMTPHostServer,port=465
UPD:
这里是错误
org.springframework.mail.MailSendException:邮件服务器连接失败;嵌套异常为javax.mail.MessaginException:异常读取响应;
嵌套异常是:
java.net.SocketTimeoutException:读取超时。失败消息:javax.mail.MessaginException:异常读取响应;
嵌套异常是:
java.net.SocketTimeoutException:读取超时;消息异常详细信息(1)包括:
失败消息1:
javax.mail.MessaginException:异常读取响应;
嵌套异常是:
java.net.SocketTimeoutException:读取超时
在com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1611)上
在com.sun.mail.smtp.SMTPTransport.openServer上(SMTPTransport.java:1369)
在com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412)上
在javax.mail.Service.connect(Service.java:288)
位于org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:389)
位于org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:340)
位于org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:336)
位于com.zina.service.mail.MailSenderFacade.send(MailSenderFacade.java:122)
在com.zina.service.mail.MailService.sendTextMessage(MailService.java:131)上
在com.zina.service.mail.MailService.sendTextMessage(MailService.java:193)上
在com.zina.service.person.PersonService.sendRegistrationApproveMail(PersonService.java:255)上
在com.zina.service.person.PersonService.registerUser_aroundBody4上(PersonService.java:167)
在com.zina.service.person.PersonService$AjcClosure5.run(PersonService.java:1)
共享异常如何?异常的确切含义是什么?它在哪一行抛出?添加的异常是故意和故意使用两个不同的SMPT端口?我不知道这是否是一个问题,但我以前从未见过。相反,我知道的代码对“mail.smtp.port”
和“mail.smtp.socketFactory.port”
使用相同的端口。好吧,那么这样做肯定是错误的;-)