Ciao a tutti,
qualcuno potrebbe aiutarmi?
...devo mandare una mail da una servlet java.
Tutto sembra funzionare, ma se provo a mandare mail ad indirizzi con dominio libero.it mi torna indietro un delivery status che dice in succo: "...other o undefined security status..." riportando i vari indirizzi a cui è stata mandata la mail...
codice:
import java.io.*;
import java.net.*;
public class SendMail {
static Socket socket;
static DataInputStream in;
static DataOutputStream out;
static PrintStream prout; // non usato
public static void sendMail(String mailServer,
String[] recipient,
String[] cc,
String subject,
String messaggio,
String userName,
String from)throws Exception {
//try {
Socket s = new Socket(mailServer, 25);
BufferedReader in = new BufferedReader( new InputStreamReader(s.getInputStream(), "8859_1") );
BufferedWriter out = new BufferedWriter( new OutputStreamWriter(s.getOutputStream(), "8859_1") );
//String boundary = "Dat_Sep_Str_#COD#"; // Servirà?? -- Data Separator String --
sendln(in, out, "EHLO " + userName);
sendln(in, out, "MAIL FROM: <"+ from + ">");
for (int i=0; i<recipient.length; i++)
sendln(in, out, "RCPT TO: <" + recipient[i] + ">" );
for (int i=0; i<cc.length; i++)
sendln(in, out, "RCPT CC: <" + cc[i] + ">");
sendln(in, out, "DATA");
sendln(out, "MIME-Version: 1.0");
sendln(out, "Subject: " + subject);
sendln(out, "From: " + userName + " <" + from + ">");
for (int i=0; i<recipient.length; i++)
sendln(out, "To: <" + recipient[i] + ">");
for (int i=0; i<cc.length; i++)
sendln(out, "Cc: <" + cc[i] + ">");
/*sendln(out, "Content-Type: multipart/mixed; boundary=\"" + boundary +"\"");
sendln(out, "\r\n--" + boundary);*/
// Send the body
sendln(out, "Content-Type: text/plain; charset=\"us-ascii\"\r\n");
sendln(out, messaggio);
//sendln(out, "\r\n--" + boundary );
// send the attachment
/*String nomeFile = (new File(fileName)).getName();
sendln(out, "Content-Type:image/gif; name="+nomeFile);
sendln(out, "Content-Disposition: attachment;filename=\""+fileName+"\"");
sendln(out, "Content-transfer-encoding: base64\r\n");
MIMEBase64.encode(fileName, out);
sendln(out, "\r\n--" + boundary);*/
//sendln(out, "\r\n\r\n--" + boundary + "--\r\n");
sendln(in, out,".");
sendln(in, out, "QUIT");
s.close();
// }
// catch (Exception e) {
// e.printStackTrace();
// }
}
public static void sendln(BufferedReader in, BufferedWriter out, String s) {
try {
out.write(s + "\r\n");
out.flush();
Thread.sleep(1000);
s = in.readLine();
}
catch (Exception e) {
e.printStackTrace();
}
}
public static void sendln(BufferedWriter out, String s) {
try {
out.write(s + "\r\n");
out.flush();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
Questa è la classe java...trovata tra l'altro su questo forum (grazie!)...e sotto la semplicissima servlet.
codice:
public class MailSender extends HttpServlet {
/** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String [] destinatari = {"mail@mail.it","mail@libero.it"}; //destinatari
String [] cc = {"blabla@bla.it"};
String hostName = "smtp.mail.it"; // server smtp
String oggetto = "oggetto";
String messaggio = "ciao ...";
String nomeUtente = "Prova";
String emailMittente = "mail@mail.it"; // mail mittente
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet MailSender</title>");
out.println("</head>");
out.println("<body>");
try{
SendMail.sendMail(hostName,destinatari,cc,oggetto,messaggio,/*nomeFile,*/nomeUtente,emailMittente);
}catch(Exception e) {out.println("<h1>"+e.toString()+"</h1>");}
out.println("<h1>Mail inviata...</h1>");
out.println("</body>");
out.println("</html>");
out.close();
}
Naturalmente vanno cambiati gli indirizzi mail e il server smtp...ma questo sicuramente lo sapevate già.
Ringrazio anticipatamente per l'aiuto...spero di essere stato chiaro.