J'ai copié le code d'ici seulement pour envoyer des mails en utilisant le serveur SMTP Gmail. Mais je reçois des exceptions de sécurité. J'ai atteint la cible une fois que j'ai réussi à envoyer 4 mails mais plus tard j'ai fait quelques changements dans mon code selon ma demande d'application et il y a une exception de sécurité. Je suis sûr que ça va marcher mais j'ai quelques problèmes.Problème dans l'envoi de courrier avec Gmail SMTP en utilisant le courrier Java
Quel est le problème avec ce code?
Le code est:
package com.ibm.lims;
import java.security.Security;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class mails {
private static final String SMTP_HOST_NAME = "smtp.gmail.com";
private static final String SMTP_PORT = "465";
//private static final String emailMsgTxt = "robin borrowed a book";
//private static final String emailSubjectTxt = "online library management system notification";
private static final String emailFromAddress = "[email protected]";
private static final String SSL_FACTORY ="javax.net.ssl.SSLSocketFactory";
//private static final String[] sendTo = {"[email protected]","[email protected]"};
public static void mailer(String[] sendTo,String emailSubjectTxt,String emailMsgTxt) throws Exception{
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
new mails().sendSSLMessage(sendTo,emailSubjectTxt,emailMsgTxt,emailFromAddress);
System.out.println("Sucessfully Sent mail to All Users");
}
public void sendSSLMessage(String[] recipients,String subject,String message,String from) throws MessagingException {
boolean debug = true;
Properties props = new Properties();
props.put("mail.smtp.host", SMTP_HOST_NAME);
props.put("mail.smtp.auth", "true");
props.put("mail.debug", "true");
props.put("mail.smtp.port", SMTP_PORT);
props.put("mail.smtp.socketFactory.port", SMTP_PORT);
props.put("mail.smtp.socketFactory.class", SSL_FACTORY);
props.put("mail.smtp.socketFactory.fallback", "false");
Session session = Session.getDefaultInstance(props,new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("[email protected]","weakpaasword");
}
}
);
MimeMessage message1 =new MimeMessage(session);
message1.setFrom(new InternetAddress(from));
for(int i=0;i<=recipients.length;i++){
message1.addRecipient(Message.RecipientType.TO,new InternetAddress(recipients[i]));
}
message1.setSubject(subject);
// Create the message part.
MimeBodyPart messageBodyPart =new MimeBodyPart();
//Fill message.
messageBodyPart.setText(message);
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
// Part two is attachment.
// Put parts in message
message1.setContent(multipart);
// Send the message
Transport.send(message1);
}
}
Je l'appelais de JSP:
<%
String requestedopration = request.getParameter("operation");
if("Borrow".equalsIgnoreCase(requestedopration)){
Borrow borrow = new Borrow();
borrow.setBook_id(request.getParameter("bookid"));
borrow.setUser_id((String)session.getAttribute("userid"));
boolean c=LimsHandler.getInstance().borrowbook(borrow);
if(c){
final String[] sendTo = {"[email protected]","[email protected]"};
mails.mailer(sendTo,"lims notification","robin borrowed a book");
%>
Mais je reçois des exceptions de sécurité. Je reçois comme exception:
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error() that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: java.lang.ArrayIndexOutOfBoundsException: 2
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:413)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
root cause
java.lang.ArrayIndexOutOfBoundsException: 2
com.ibm.lims.mails.sendSSLMessage(mails.java:64)
com.ibm.lims.mails.mailer(mails.java:35)
org.apache.jsp.borrow_jsp._jspService(borrow_jsp.java:144)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
note The full stack trace of the root cause is available in the Apache Geronimo (Embedded Tomcat/6.0.20-20090724) logs.
Apache Geronimo (Embedded Tomcat/6.0.20-20090724)
Veuillez publier le texte de ces exceptions de sécurité. Les trouvez-vous dans les journaux de votre serveur d'applications Web ou apparaissent-ils sur la page HTML renvoyée? –
Est-ce que ce sont vos vraies informations d'identification dans cet article? Je supprimerais ceux si j'étais vous? –
Je pensais que les employés d'IBM avaient des mentors. – BalusC