java收取和发送邮件 ssl.docx
- 文档编号:2871382
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:5
- 大小:16.29KB
java收取和发送邮件 ssl.docx
《java收取和发送邮件 ssl.docx》由会员分享,可在线阅读,更多相关《java收取和发送邮件 ssl.docx(5页珍藏版)》请在冰点文库上搜索。
java收取和发送邮件ssl
Java收取和发送邮件+SSL
这里使用Gmail邮箱测试1.收取邮件
[java]viewplaincopypackagelius.javamail.ssl;importjava.io.UnsupportedEncodingException;importjava.security.*;importjava.util.Properties;importjavax.mail.*;importjavax.mail.internet.InternetAddress;importjavax.mail.internet.MimeUtility;/***用于收取Gmail邮件*@authorWinterLau*/publicclassGmailFetch{publicstaticvoidmain(Stringargv[])throwsException{Security.addProvider(new.ssl.internal.ssl.Provider());finalStringSSL_FACTORY=".ssl.SSLSocketFactory";//GetaPropertiesobjectPropertiesprops=System.getProperties();props.setProperty("mail.pop3.socketFactory.class",SSL_FACTORY);props.setProperty("mail.pop3.socketFactory.fallback","false");props.setProperty("mail.pop3.port","995");props.setProperty("mail.pop3.socketFactory.port","995");//以下步骤跟一般的JavaMail操作相同Sessionsession=Session.getDefaultInstance(props,null);//请将红色部分对应替换成你的邮箱帐号和密码URLNameurln=newURLName("pop3","",995,null,"邮箱帐号","邮箱密码");Storestore=session.getStore(urln);Folderinbox=null;try{store.connect();inbox=store.getFolder("INBOX");inbox.open(Folder.READ_ONLY);FetchProfileprofile=newFetchProfile();profile.add(FetchProfile.Item.ENVELOPE);Message[]messages=inbox.getMessages();inbox.fetch(messages,profile);System.out.println("收件箱的邮件数:
"+messages.length);for(inti=0;i<messages.length;i++){//邮件发送者Stringfrom=decodeText(messages[i].getFrom()[0].toString());InternetAddressia=newInternetAddress(from);System.out.println("FROM:
"+ia.getPersonal()+'('+ia.getAddress()+')');//邮件标题System.out.println("TITLE:
"+messages[i].getSubject());//邮件大小System.out.println("SIZE:
"+messages[i].getSize());//邮件发送时间System.out.println("DATE:
"+messages[i].getSentDate());}}finally{try{inbox.close(false);}catch(Exceptione){}try{store.close();}catch(Exceptione){}}}protectedstaticStringdecodeText(Stringtext)throwsUnsupportedEncodingException{if(text==null)returnnull;if(text.startsWith("=?
GB")||text.startsWith("=?
gb"))text=MimeUtility.decodeText(text);elsetext=newString(text.getBytes("ISO8859_1"));returntext;}}
2.发送邮件[java]viewplaincopypackagelius.javamail.ssl;importjava.security.Security;importjava.util.Date;importjava.util.Properties;importjavax.mail.Authenticator;importjavax.mail.Message;importjavax.mail.MessagingException;importjavax.mail.PasswordAuthentication;importjavax.mail.Session;importjavax.mail.Transport;importjavax.mail.internet.AddressException;importjavax.mail.internet.InternetAddress;importjavax.mail.internet.MimeMessage;/***使用Gmail发送邮件*@authorWinterLau*/publicclassGmailSender{publicstaticvoidmain(String[]args)throwsAddressException,MessagingException{Security.addProvider(new.ssl.internal.ssl.Provider());finalStringSSL_FACTORY=".ssl.SSLSocketFactory";//GetaPropertiesobjectPropertiesprops=System.getProperties();props.setProperty("mail.smtp.host","");props.setProperty("mail.smtp.socketFactory.class",SSL_FACTORY);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");finalStringusername="邮箱帐号";finalStringpassword="邮箱密码";Sessionsession=Session.getDefaultInstance(props,newAuthenticator(){protectedPasswordAuthenticationgetPasswordAuthentication(){returnnewPasswordAuthentication(username,password);}});//--Createanewmessage--Messagemsg=newMimeMessage(session);//--SettheFROMandTOfields--msg.setFrom(newInternetAddress(username+"@"));msg.setRecipients(Message.RecipientType.TO,InternetAddress.parse("[收件人地址]",false));msg.setSubject("Hello");msg.setText("Howareyou");msg.setSentDate(newDate());Transport.send(msg);System.out.println("Messagesent.");}}
现在发送邮件时会发生异常信息,如下:
.ssl.SSLHandshakeException:
sun.security.validator.ValidatorException:
PKIXpathbuildingfailed:
sun.security.provider.certpath.SunCertPathBuilderException:
unabletofindvalidcertificationpathtorequestedtarget
atorg.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:
419)
atorg.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:
342)
Causedby:
javax.mail.MessagingException:
Exceptionreadingresponse;
nestedexceptionis:
.ssl.SSLHandshakeException:
sun.security.validator.ValidatorException:
PKIXpathbuildingfailed:
sun.security.provider.certpath.SunCertPathBuilderException:
unabletofindvalidcertificationpathtorequestedtarget
atcom.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:
1462)
atcom.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:
1260)
...4more
Causedby:
.ssl.SSLHandshakeException:
sun.security.validator.ValidatorException:
PKIXpathbuildingfailed:
sun.security.provider.certpath.SunCertPathBuilderException:
unabletofindvalidcertificationpathtorequestedtarget
at.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:
174)
at.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:
1611)
at.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:
187)
...8more
Causedby:
sun.security.validator.ValidatorException:
PKIXpathbuildingfailed:
sun.security.provider.certpath.SunCertPathBuilderException:
unabletofindvalidcertificationpathtorequestedtarget
atsun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:
285)
atsun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:
191)
atsun.security.validator.Validator.validate(Validator.java:
218)
at.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:
126)
at.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:
209)
...20more
Causedby:
sun.security.provider.certpath.SunCertPathBuilderException:
unabletofindvalidcertificationpathtorequestedtarget
atsun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:
174)
atjava.security.cert.CertPathBuilder.build(CertPathBuilder.java:
238)
atsun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:
280)
...26more
原因是需要保存安装证书
官方的QA
Q:
WhenconnectingtomymailserveroverSSLIgetanexceptionlike"unabletofindvalidcertificationpathtorequestedtarget".A:
Yourserverisprobablyusingatestcertificateorself-signedcertificateinsteadofacertificatesignedbyacommercialCertificateAuthority.You'llneedtoinstalltheserver'scertificateintoyourtruststore.TheInstallCertprogramwillhelp.
使用DOS命令进入InstallCert.java存放目录
运行javacInstallCert.java将InstallCert.java编译成.class文件
在运行javaInstallCert:
465【其中xyz是要使用的mail,例如:
】【465是端口号】
得到jssecacerts文件后复制到jdk1.6.0_14\jre\lib\security目录
然后再发送邮件就OK了
代码都是测试过的,运行没问题。
InstallCert.java资源已经上传到CSDN上,需要的可以去资源页下载。
下载地址:
参考:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java收取和发送邮件 ssl java 收取 发送 邮件