commons-email-1.4.jar
javax.mail-1.5.2.jarjava
public class mail { public static void main(String[] args) { MultiPartEmail mail = new MultiPartEmail (); mail.setHostName("192.168.10.30"); mail.setAuthentication("test@hongtiantao.com", "fhAS"); mail.setCharset("UTF-8"); try { mail.setFrom("test@hongtiantao.com", "紅天桃客戶服務"); mail.addTo("17991@qq.com","Chrome"); mail.setSubject("待辦事務提醒"); mail.setMsg("A" + "有一條新記錄" + "Z" + "等待審覈"); mail.setStartTLSEnabled(true); mail.setSmtpPort(587); mail.send(); } catch (EmailException e) { e.printStackTrace(); } }
DEBUG SMTP: Found extension "PIPELINING", arg "" DEBUG SMTP: Found extension "SIZE", arg "15728640" DEBUG SMTP: Found extension "ETRN", arg "" DEBUG SMTP: Found extension "STARTTLS", arg "" DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg "" DEBUG SMTP: Found extension "8BITMIME", arg "" DEBUG SMTP: Found extension "DSN", arg "" STARTTLS 220 2.0.0 Ready to start TLS javax.mail.MessagingException: Could not convert socket to TLS; nested exception is: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:2155) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:752) at javax.mail.Service.connect(Service.java:366) at javax.mail.Service.connect(Service.java:246) at EmailTest.main(EmailTest.java:42) Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1884) at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276) at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:270) at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1439) at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:209) at sun.security.ssl.Handshaker.processLoop(Handshaker.java:878) at sun.security.ssl.Handshaker.process_record(Handshaker.java:814) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323) at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:626) at com.sun.mail.util.SocketFetcher.startTLS(SocketFetcher.java:553) at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:2150) ... 4 more Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:385) at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292) at sun.security.validator.Validator.validate(Validator.java:260) at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:326) at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:231) at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:126) at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1421) ... 14 more Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:196) at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268) at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380) ... 20 more
JDK1.7沒法運行,報錯爲PKIX:unable to find valid certification path to requested target,更換1.8後正常運行。
更換後報錯
java.lang.RuntimeException: java.io.IOException: invalid constant type: 15,需單獨指定javassist 包版本,升級爲3.20.0-GA問題解決。
spring
import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSenderImpl; JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); /** * 初始化郵件發送數據 * * @param host 服務器 * @param username 發送人 * @param passwd 發送人密碼 */ public void initData(String host, String username, String passwd) { //建立郵件發送服務器 mailSender.setHost(host); mailSender.setPort(587); mailSender.setUsername(username); mailSender.setPassword(passwd); //加認證機制 Properties javaMailProperties = new Properties(); javaMailProperties.put("mail.smtp.auth", true); javaMailProperties.put("mail.smtp.starttls.enable", true); javaMailProperties.put("mail.smtp.timeout", 5000); javaMailProperties.put("mail.smtp.ssl.trust", "*"); mailSender.setJavaMailProperties(javaMailProperties); System.out.println("初始化郵件發送信息完成"); } /** * 發送普通文本 * * @param email 對方郵箱地址 * @param subject 主題 * @param text 郵件內容 */ public void simpleMailSend(String email, String subject, String text) { //建立郵件內容 SimpleMailMessage message = new SimpleMailMessage(); message.setFrom(mailSender.getUsername()); message.setTo(email); message.setSubject(subject); message.setText(text); //發送郵件 mailSender.send(message); System.out.println("發送成功"); } @Test public void testSpringEmail() { initData("192.168.10.30","test@hongti.com","fh"); simpleMailSend("1964483239@qq.com","A","123"); }