PDA

View Full Version : [Java] Problema JavaMail


UnknownSoldier
23-02-2009, 17:19
Salve a tutti. Ho scritto questa servlet, ma il problema è che l'e-mail arriva 2 volte! Perchè?


package servlets;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import java.util.Properties;
import java.util.Date;
import javax.mail.Transport;
import javax.mail.Session;
import javax.mail.Message;
import javax.mail.Address;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.InternetAddress;

public class TestMailer extends HttpServlet {
private String smtp = "mail.libero.it";
private String mitt = "[email protected]";
private String dest = "[email protected]";

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();

out.println("<html>");
out.println("<head>");
out.println("<title>Servlet TestMail</title>");
out.println("</head>");
out.println("<body>");
try
{
Properties props = System.getProperties();
props.put ("mail.smtp.host", smtp);

Session session = Session.getDefaultInstance (props);
Message message = new MimeMessage (session);

message.setFrom (new InternetAddress (mitt));
message.setRecipient (Message.RecipientType.TO, new InternetAddress (dest));
message.setSubject ("E-mail test");
message.setSentDate (new Date());
message.setText ("Questa è una e-mail di prova");

Transport.send (message);

out.println ("E-mail inviata");
}
catch (Exception exception)
{
out.println ("E-mail NON inviata");
}
out.println("</body>");
out.println("</html>");

out.close();
}

protected void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
processRequest (request, response);
}

protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
processRequest (request, response);
}
}

Ma l'host smtp deve essere sempre quello del mio provider? Perchè provando con mail.tin.it non va... e se invece di eseguire questa servlet in locale la eseguissi su un server, che host dovrei specificare? Non esiste un metodo di invio e-mail senza l'uso dell'smtp? Come ad esempio la funzione mail() del PHP...

^TiGeRShArK^
23-02-2009, 17:46
perchè hai messo la chiamata a processrequest sia nel doGet che nel doPost? :mbe:

UnknownSoldier
23-02-2009, 18:25
perchè hai messo la chiamata a processrequest sia nel doGet che nel doPost? :mbe:

Per fare in modo che qualsiasi tipo di richiesta manda in output la stessa cosa.

^TiGeRShArK^
23-02-2009, 18:37
Per fare in modo che qualsiasi tipo di richiesta manda in output la stessa cosa.

si, ma mi sa che così viene scatenata due volte la stessa richiesta, apposta ti manda la mail due volte.
metti un booleano che viene valorizzato non appena mandi il primo messaggio e metti un controllo su quel booleano prima di mandare il messaggio, così risolvi il problema del doppio messaggio.
Quanto al server se hai un account con tin ti basta loggarti al server col tuo account e poi puoi inviare tranquillamente la posta con l'indirizzo mittente che vuoi e a chi vuoi.

UnknownSoldier
23-02-2009, 19:45
si, ma mi sa che così viene scatenata due volte la stessa richiesta, apposta ti manda la mail due volte.
metti un booleano che viene valorizzato non appena mandi il primo messaggio e metti un controllo su quel booleano prima di mandare il messaggio, così risolvi il problema del doppio messaggio.
Quanto al server se hai un account con tin ti basta loggarti al server col tuo account e poi puoi inviare tranquillamente la posta con l'indirizzo mittente che vuoi e a chi vuoi.

Errato. Quando si richiede una pagina ad un server normalmente, si utilizza il metodo GET. Comunque, giusto per accertarmi, ho eliminato il metodo POST, ma il risultato è lo stesso... due e-mail inviate. Non riesco a capire cos'è che non va o_O

UnknownSoldier
23-02-2009, 19:49
Credo di aver risolto l'arcano mistero:

Il problema è la nuova versione di NetBeans! Se avvio la servlet per prima, è come se venisse eseguita 2 volte. Se invece accedo prima ad un'altra pagina dell'applicazione, e poi mi sposto sulla servlet, viene inviata 1 sola volta ;)

Mi rimangono comunque altri dubbi:

- posso utilizzare solo l'host che corrisponde alla mia connessione? Quindi come devo agire se volessi eseguire la servlet on-line?

- non esiste un metodo di invio e-mail in cui non bisogna specificare l'host? Come la funzione mail() in PHP

^TiGeRShArK^
24-02-2009, 08:45
Credo di aver risolto l'arcano mistero:

Il problema è la nuova versione di NetBeans! Se avvio la servlet per prima, è come se venisse eseguita 2 volte. Se invece accedo prima ad un'altra pagina dell'applicazione, e poi mi sposto sulla servlet, viene inviata 1 sola volta ;)

Mi rimangono comunque altri dubbi:

- posso utilizzare solo l'host che corrisponde alla mia connessione? Quindi come devo agire se volessi eseguire la servlet on-line?

- non esiste un metodo di invio e-mail in cui non bisogna specificare l'host? Come la funzione mail() in PHP

no, la funzione mail di PHP funziona solo su linux e si appoggia al servizio SMTP di sistema credo.
Per utilizzare un host ti avevo già scritto che se hai un account tin puoi usare tranquillamente quello, a meno di non dover fare mass-mailing perchè altrimenti il server ti butta fuori se mandi troppe mail in una volta...