java收取和发送邮件 sslWord下载.docx
《java收取和发送邮件 sslWord下载.docx》由会员分享,可在线阅读,更多相关《java收取和发送邮件 sslWord下载.docx(5页珍藏版)》请在冰点文库上搜索。
![java收取和发送邮件 sslWord下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/4/76497842-177e-4930-be78-630148c96159/76497842-177e-4930-be78-630148c961591.gif)
mail.pop3.socketFactory.fallback"
"
false"
);
mail.pop3.port"
995"
mail.pop3.socketFactory.port"
//以下步骤跟一般的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&
lt;
messages.length;
i++){//邮件发送者Stringfrom=decodeText(messages[i].getFrom()[0].toString());
InternetAddressia=newInternetAddress(from);
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;
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.MimeMessage;
/***使用Gmail发送邮件*@authorWinterLau*/publicclassGmailSender{publicstaticvoidmain(String[]args)throwsAddressException,MessagingException{Security.addProvider(new.ssl.internal.ssl.Provider());
mail.smtp.host"
mail.smtp.socketFactory.class"
mail.smtp.socketFactory.fallback"
mail.smtp.port"
465"
mail.smtp.socketFactory.port"
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);
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:
atcom.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:
1462)
atcom.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:
1260)
...4more
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
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
atsun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:
atjava.security.cert.CertPathBuilder.build(CertPathBuilder.java:
238)
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上,需要的可以去资源页下载。
下载地址:
参考: