imanEsmaeili
پنج شنبه 14 بهمن 1389, 19:15 عصر
با سلام
من از کتابخانه JavaMail API برای ارسال ایمیل در سایتم استفاده می کنیم و از کدهای زیر برای ارسال ایمیل نمونه استفاده می کنم.
من در ابتدا یک کلاس برای ارسال ایمیل نوشتم که بصورت زیر می باشد.
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
public class EmailManagement {
private final String PROTOCOL="smtp";
private final String HOST="smtp.salekanpublishing.ir";
private final String USER="My Username";
private final String PASSWORD="My Password";
private Properties props;
private Session mailSession;
private MimeMessage message;
private String subject;
private String content;
public EmailManagement() throws NoSuchProviderException {
props = new Properties();
props.setProperty("mail.transport.protocol", PROTOCOL);
props.setProperty("mail.host", HOST);
props.setProperty("mail.mime.charset", "UTF-8");
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.starttls.enable", "true");
SMTPAuthenticator auth = new SMTPAuthenticator();
mailSession=Session.getDefaultInstance(props, auth);
message=new MimeMessage(mailSession);
}
public boolean sendTextMessage(String recipients[],String subject, String content) throws MessagingException{
message.setFrom(new InternetAddress(USER));
Address addressTo[]=new Address[recipients.length];
for (int i = 0; i < addressTo.length; i++) {
addressTo[i]=new InternetAddress(recipients[i]);
}
message.setRecipients(Message.RecipientType.TO, addressTo);
this.subject=subject;
this.content=content;
boolean flag=false;
message.setSubject(this.subject);
message.setContent(this.content, "text/html; charset=UTF-8");
Transport.send(message);
flag=true;
return flag;
}
private class SMTPAuthenticator extends javax.mail.Authenticator{
public PasswordAuthentication getPasswordAuthentication()
{
String username = USER;
String password = PASSWORD;
return new PasswordAuthentication(username, password);
}
}
}
و سپس از کدهای زیر برای استفاده از کلاس فوق و ارسال ایمیل نمونه استفاده می کنم.
EmailManagement emailManagement=null;
try {
emailManagement = new EmailManagement();
} catch (NoSuchProviderException ex) {
ex.printStackTrace();
}
String subject="test mail";
String content="this is a test mail";
String recipients[]={"iman.esmaeili.14@gmail.com"};
try {
if(emailManagement.sendTextMessage(recipients, subject, content))
JOptionPane.showMessageDialog(this, "emails sent correctly");
} catch (MessagingException ex) {
JOptionPane.showMessageDialog(this, "Error in sending mail");
ex.printStackTrace();
}
که متاسفانه پس از اجرا با خطای زیر روبرو می شوم.
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.SunCertPathBuilderE xception: unable to find valid certification path to requested target
at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTrans port.java:1652)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SM TPTransport.java:534)
at javax.mail.Service.connect(Service.java:313)
at javax.mail.Service.connect(Service.java:172)
at javax.mail.Service.connect(Service.java:121)
at javax.mail.Transport.send0(Transport.java:190)
at javax.mail.Transport.send(Transport.java:120)
at tools.EmailManagement.sendTextMessage(EmailManagem ent.java:57)
at mainForm.jButton2ActionPerformed(mainForm.java:190 )
at mainForm.access$100(mainForm.java:35)
at mainForm$2.actionPerformed(mainForm.java:68)
at javax.swing.AbstractButton.fireActionPerformed(Abs tractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed (AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed (DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultB uttonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseRe leased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.jav a:6038)
at javax.swing.JComponent.processMouseEvent(JComponen t.java:3260)
at java.awt.Component.processEvent(Component.java:580 3)
at java.awt.Container.processEvent(Container.java:205 8)
at java.awt.Component.dispatchEventImpl(Component.jav a:4410)
at java.awt.Container.dispatchEventImpl(Container.jav a:2116)
at java.awt.Component.dispatchEvent(Component.java:42 40)
at java.awt.LightweightDispatcher.retargetMouseEvent( Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(C ontainer.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Conta iner.java:3916)
at java.awt.Container.dispatchEventImpl(Container.jav a:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2429 )
at java.awt.Component.dispatchEvent(Component.java:42 40)
at java.awt.EventQueue.dispatchEvent(EventQueue.java: 599)
at java.awt.EventDispatchThread.pumpOneEventForFilter s(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(E ventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarch y(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThre ad.java:121)
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderE xception: unable to find valid certification path to requested target
at com.sun.net.ssl.internal.ssl.Alerts.getSSLExceptio n(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(S SLSocketImpl.java:1520)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Ha ndshaker.java:182)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Ha ndshaker.java:176)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serv erCertificate(ClientHandshaker.java:975)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.proc essMessage(ClientHandshaker.java:123)
at com.sun.net.ssl.internal.ssl.Handshaker.processLoo p(Handshaker.java:511)
at com.sun.net.ssl.internal.ssl.Handshaker.process_re cord(Handshaker.java:449)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRec ord(SSLSocketImpl.java:817)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.perform InitialHandshake(SSLSocketImpl.java:1029)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHa ndshake(SSLSocketImpl.java:1056)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHa ndshake(SSLSocketImpl.java:1040)
at com.sun.mail.util.SocketFetcher.configureSSLSocket (SocketFetcher.java:503)
at com.sun.mail.util.SocketFetcher.startTLS(SocketFet cher.java:443)
at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTrans port.java:1647)
... 35 more
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderE xception: unable to find valid certification path to requested target
at sun.security.validator.PKIXValidator.doBuild(PKIXV alidator.java:285)
at sun.security.validator.PKIXValidator.engineValidat e(PKIXValidator.java:191)
at sun.security.validator.Validator.validate(Validato r.java:218)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl. validate(X509TrustManagerImpl.java:126)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl. checkServerTrusted(X509TrustManagerImpl.java:209)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl. checkServerTrusted(X509TrustManagerImpl.java:249)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serv erCertificate(ClientHandshaker.java:954)
... 45 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderE xception: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder. engineBuild(SunCertPathBuilder.java:174)
at java.security.cert.CertPathBuilder.build(CertPathB uilder.java:238)
at sun.security.validator.PKIXValidator.doBuild(PKIXV alidator.java:280)
... 51 more
از شما عزیزان صمیمانه تقاضا دارم که مورد من رابررسی و در صورت امکان نتیجه را به من انتقال دهید
من از کتابخانه JavaMail API برای ارسال ایمیل در سایتم استفاده می کنیم و از کدهای زیر برای ارسال ایمیل نمونه استفاده می کنم.
من در ابتدا یک کلاس برای ارسال ایمیل نوشتم که بصورت زیر می باشد.
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
public class EmailManagement {
private final String PROTOCOL="smtp";
private final String HOST="smtp.salekanpublishing.ir";
private final String USER="My Username";
private final String PASSWORD="My Password";
private Properties props;
private Session mailSession;
private MimeMessage message;
private String subject;
private String content;
public EmailManagement() throws NoSuchProviderException {
props = new Properties();
props.setProperty("mail.transport.protocol", PROTOCOL);
props.setProperty("mail.host", HOST);
props.setProperty("mail.mime.charset", "UTF-8");
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.starttls.enable", "true");
SMTPAuthenticator auth = new SMTPAuthenticator();
mailSession=Session.getDefaultInstance(props, auth);
message=new MimeMessage(mailSession);
}
public boolean sendTextMessage(String recipients[],String subject, String content) throws MessagingException{
message.setFrom(new InternetAddress(USER));
Address addressTo[]=new Address[recipients.length];
for (int i = 0; i < addressTo.length; i++) {
addressTo[i]=new InternetAddress(recipients[i]);
}
message.setRecipients(Message.RecipientType.TO, addressTo);
this.subject=subject;
this.content=content;
boolean flag=false;
message.setSubject(this.subject);
message.setContent(this.content, "text/html; charset=UTF-8");
Transport.send(message);
flag=true;
return flag;
}
private class SMTPAuthenticator extends javax.mail.Authenticator{
public PasswordAuthentication getPasswordAuthentication()
{
String username = USER;
String password = PASSWORD;
return new PasswordAuthentication(username, password);
}
}
}
و سپس از کدهای زیر برای استفاده از کلاس فوق و ارسال ایمیل نمونه استفاده می کنم.
EmailManagement emailManagement=null;
try {
emailManagement = new EmailManagement();
} catch (NoSuchProviderException ex) {
ex.printStackTrace();
}
String subject="test mail";
String content="this is a test mail";
String recipients[]={"iman.esmaeili.14@gmail.com"};
try {
if(emailManagement.sendTextMessage(recipients, subject, content))
JOptionPane.showMessageDialog(this, "emails sent correctly");
} catch (MessagingException ex) {
JOptionPane.showMessageDialog(this, "Error in sending mail");
ex.printStackTrace();
}
که متاسفانه پس از اجرا با خطای زیر روبرو می شوم.
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.SunCertPathBuilderE xception: unable to find valid certification path to requested target
at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTrans port.java:1652)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SM TPTransport.java:534)
at javax.mail.Service.connect(Service.java:313)
at javax.mail.Service.connect(Service.java:172)
at javax.mail.Service.connect(Service.java:121)
at javax.mail.Transport.send0(Transport.java:190)
at javax.mail.Transport.send(Transport.java:120)
at tools.EmailManagement.sendTextMessage(EmailManagem ent.java:57)
at mainForm.jButton2ActionPerformed(mainForm.java:190 )
at mainForm.access$100(mainForm.java:35)
at mainForm$2.actionPerformed(mainForm.java:68)
at javax.swing.AbstractButton.fireActionPerformed(Abs tractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed (AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed (DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultB uttonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseRe leased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.jav a:6038)
at javax.swing.JComponent.processMouseEvent(JComponen t.java:3260)
at java.awt.Component.processEvent(Component.java:580 3)
at java.awt.Container.processEvent(Container.java:205 8)
at java.awt.Component.dispatchEventImpl(Component.jav a:4410)
at java.awt.Container.dispatchEventImpl(Container.jav a:2116)
at java.awt.Component.dispatchEvent(Component.java:42 40)
at java.awt.LightweightDispatcher.retargetMouseEvent( Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(C ontainer.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Conta iner.java:3916)
at java.awt.Container.dispatchEventImpl(Container.jav a:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2429 )
at java.awt.Component.dispatchEvent(Component.java:42 40)
at java.awt.EventQueue.dispatchEvent(EventQueue.java: 599)
at java.awt.EventDispatchThread.pumpOneEventForFilter s(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(E ventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarch y(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThre ad.java:121)
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderE xception: unable to find valid certification path to requested target
at com.sun.net.ssl.internal.ssl.Alerts.getSSLExceptio n(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(S SLSocketImpl.java:1520)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Ha ndshaker.java:182)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Ha ndshaker.java:176)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serv erCertificate(ClientHandshaker.java:975)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.proc essMessage(ClientHandshaker.java:123)
at com.sun.net.ssl.internal.ssl.Handshaker.processLoo p(Handshaker.java:511)
at com.sun.net.ssl.internal.ssl.Handshaker.process_re cord(Handshaker.java:449)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRec ord(SSLSocketImpl.java:817)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.perform InitialHandshake(SSLSocketImpl.java:1029)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHa ndshake(SSLSocketImpl.java:1056)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHa ndshake(SSLSocketImpl.java:1040)
at com.sun.mail.util.SocketFetcher.configureSSLSocket (SocketFetcher.java:503)
at com.sun.mail.util.SocketFetcher.startTLS(SocketFet cher.java:443)
at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTrans port.java:1647)
... 35 more
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderE xception: unable to find valid certification path to requested target
at sun.security.validator.PKIXValidator.doBuild(PKIXV alidator.java:285)
at sun.security.validator.PKIXValidator.engineValidat e(PKIXValidator.java:191)
at sun.security.validator.Validator.validate(Validato r.java:218)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl. validate(X509TrustManagerImpl.java:126)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl. checkServerTrusted(X509TrustManagerImpl.java:209)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl. checkServerTrusted(X509TrustManagerImpl.java:249)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serv erCertificate(ClientHandshaker.java:954)
... 45 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderE xception: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder. engineBuild(SunCertPathBuilder.java:174)
at java.security.cert.CertPathBuilder.build(CertPathB uilder.java:238)
at sun.security.validator.PKIXValidator.doBuild(PKIXV alidator.java:280)
... 51 more
از شما عزیزان صمیمانه تقاضا دارم که مورد من رابررسی و در صورت امکان نتیجه را به من انتقال دهید