Hey,
Ik ben laatstejaarsstudent informatica en moet voor men eindwerk een applicatie schrijven in JSP/Beans.
Dit is tot nu toe redelijk vlotjes gegaan... maar ik zit nu al hele tijd te zoeken op een probleem, en snap niet wat er fout loopt
via google ook niet echt iets behulpzaam gevonden, dus richt ik me eens tot de pro-programmers hier
Eerst de code:
Dit is de JSP pagina van waaruit ik MailerBean probeer te gebruiken met behulp van jsp:useBean
En hier de Bean om mails te versturen
Sorry als de code wat lang of onoverzichtelijk is, maar hier een woordje uitleg:
Het onderste gedeelte is een MailberBean die in staat is emails te versturen. Deze is getest en doet het gewoon. Het bovenste gedeelte is de JSP pagina van waaruit ik probeer de Bean aan te roepen, als dit eenmalig gebeurt, dus gewoon usebean gebruiken, dan properties setten en dan mailer.sendMail(); aanroepen werkt dit ook gewoon netjes.
Nu is mijn probleem echter dat ik meerdere mails te versturen heb, ik dacht dit dus van in een while lus te doen, zo de Result Set te doorlopen, de subject en message opbouwen en dan telkens die MailerBean aanroepen. Dit gebeurt allemaal correct, tot als de Bean aangeroepen werd. Als ik bijvoorbeeld 5 maal door de while lus ga, krijg ik dus 5 maal het correcte subject en message, maar alleen de eerste keer wordt de mail ook werkelijk gestuurd. Het lijkt wel dat de 2de, 3de, enz... keer dat door de while lus gegaan wordt die aanroep van de MailerBean er gewoon niet staat
Ik hoop dat de code en uitleg een beetje duidelijk is...
Ik ben relatief nieuw in deze dingen, misschien doe ik wel iets helemaal verkeerd... alle hulp is welkom!
Dank bij voorbaat
Ik ben laatstejaarsstudent informatica en moet voor men eindwerk een applicatie schrijven in JSP/Beans.
Dit is tot nu toe redelijk vlotjes gegaan... maar ik zit nu al hele tijd te zoeken op een probleem, en snap niet wat er fout loopt
via google ook niet echt iets behulpzaam gevonden, dus richt ik me eens tot de pro-programmers hier
Eerst de code:
Dit is de JSP pagina van waaruit ik MailerBean probeer te gebruiken met behulp van jsp:useBean
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| // selecteert alle bugs met is_changed = 1 en die ook voorkomen in tabel van emails
String sql = "SELECT * FROM bugs WHERE bug_id IN (SELECT bug_id FROM emails) AND is_changed = 1";
java.sql.ResultSet rs = null;
rs = openrs( stat, sql);
while ( rs.next() )
{
//door de resultset lopen en voor elke bug een juist subject en message maken aan de hand van de gegevens uit de tabel
String subject = "UPDATE betreffende bug '" + rs.getString("bug_name") + "'";
String message = "Deze email werd u automatisch toegestuurd door de administrator bij JSP Reporting Tool\nU hebt zich ingeschreven om op de hoogte gehouden te worden omtrent de bug '"+rs.getString("bug_name") + "'\nDit zijn de laatste beschikbare gegevens:\nNaam: " + rs.getString("bug_name") + "\nBeschrijving: " + rs.getString("bug_desc") + "\nOplossing: "+ rs.getString("resolution") +"\nVoor meer informatie gelieve u aan te melden op JSP Reporting Tool\n\nMet vriendelijke groeten,\nHet JSP Reporting Tool administratie-team";
out.println("Mail subject: "+ subject + "<br>");
%>
<jsp:useBean id="mailer" class="mail.MailerBean">
<jsp:setProperty name="mailer" property="to" value="myemailadress@mail.com"/>
<jsp:setProperty name="mailer" property="from" value="noreply@mail.com"/>
<jsp:setProperty name="mailer" property="subject" value="<%= subject %>"/>
<jsp:setProperty name="mailer" property="message" value="<%= message %>"/>
<% mailer.sendMail();
out.println("Mail verstuurd!<br><br>");%>
</jsp:useBean>
<%
} |
En hier de Bean om mails te versturen
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
| package mail;
import java.io.*;
import java.util.*;
import javax.mail.*;
import javax.mail.event.*;
import javax.mail.internet.*;
public final class MailerBean extends Object implements Serializable {
private String to = null;
private String from = null;
private String subject = null;
private String message = null;
public static Properties props = null;
public static Session session = null;
static {
/* Setting Properties for STMP host */
props = System.getProperties();
props.put("mail.smtp.host", "uit.telenet.be");
session = Session.getDefaultInstance(props, null);
}
public void setTo(String to) {
this.to = to;
}
public void setFrom(String from) {
this.from = from;
}
public void setSubject(String subject) {
this.subject = subject;
}
public void setMessage(String message) {
this.message = message;
}
public void sendMail() throws Exception {
if(!this.everythingIsSet())
throw new Exception("Could not send email.");
try {
MimeMessage message = new MimeMessage(session);
message.setRecipient(Message.RecipientType.TO,
new InternetAddress(this.to));
message.setFrom(new InternetAddress(this.from));
message.setSubject(this.subject);
message.setText(this.message);
Transport.send(message);
} catch (MessagingException e) {
throw new Exception(e.getMessage());
}
}
private boolean everythingIsSet() {
if((this.to == null) || (this.from == null) ||
(this.subject == null) || (this.message == null))
return false;
if((this.to.indexOf("@") == -1) ||
(this.to.indexOf(".") == -1))
return false;
if((this.from.indexOf("@") == -1) ||
(this.from.indexOf(".") == -1))
return false;
return true;
}
} |
Sorry als de code wat lang of onoverzichtelijk is, maar hier een woordje uitleg:
Het onderste gedeelte is een MailberBean die in staat is emails te versturen. Deze is getest en doet het gewoon. Het bovenste gedeelte is de JSP pagina van waaruit ik probeer de Bean aan te roepen, als dit eenmalig gebeurt, dus gewoon usebean gebruiken, dan properties setten en dan mailer.sendMail(); aanroepen werkt dit ook gewoon netjes.
Nu is mijn probleem echter dat ik meerdere mails te versturen heb, ik dacht dit dus van in een while lus te doen, zo de Result Set te doorlopen, de subject en message opbouwen en dan telkens die MailerBean aanroepen. Dit gebeurt allemaal correct, tot als de Bean aangeroepen werd. Als ik bijvoorbeeld 5 maal door de while lus ga, krijg ik dus 5 maal het correcte subject en message, maar alleen de eerste keer wordt de mail ook werkelijk gestuurd. Het lijkt wel dat de 2de, 3de, enz... keer dat door de while lus gegaan wordt die aanroep van de MailerBean er gewoon niet staat
Ik hoop dat de code en uitleg een beetje duidelijk is...
Ik ben relatief nieuw in deze dingen, misschien doe ik wel iets helemaal verkeerd... alle hulp is welkom!
Dank bij voorbaat
[ Voor 15% gewijzigd door Verwijderd op 16-05-2006 16:51 ]