Hej Lime... och alla andra...
Tack för ditt inlägg Lime.. Det har varit till stor hjälp...
Jag vill bara att ni ska veta att jag har cirka 2 veckor Javaerfarenhet, så det kan nog vara en del tokigheter här... kanske kan vara kul att läsa om inte annat...
Imorgon är sista dagen för mitt projekt och det är nu nästan klart... :)
Jag har dock en liten bugg som jag inte vet hur jag ska hantera...
I min message.setSubject(strSubject); vet jag inte riktigt hur jag ska få message-objektet att tycka om åäö osv... Det kommer inte att bli aktuellt med åäö, men kanske áàèé och lite såna kommer att vara aktuellt och vad jag tror, finns inte de i ascii-127, eller vad det nu är som används som standard... På from name och to name har jag använt InternetAddress() och då satte jag charSet till iso-8859-1 och då funkade det jättebra... Dock har jag inte hittat något sätt att ändra charSet för subject... Kan man ändra charSet för en String eller hur gör man?
Hmm..
En annan grej som jag har problem med är att jag aldrig får någon response från min listener... Jag hittade några exempel 'där ute' och tog det bästa från alla... Min connection listener funkar bra, men känns onödig... Däremot ger min transport listener ingenting...
Det skulle vara mycket intressant att få den feedback som den ger och verkligen få veta om ett mail har gått iväg eller ej, eftersom jag för statistik över alla mail... Som det är nu tror man ju att alla mail har gått iväg i och med att jag får positiv response från SMTPn även om de inte går iväg... Jag tror väl att det är positivt response från SMTPn i form av att den säger att den har mottagit ett mail för behandling, men sedan lägger det mailet i BADMAIL eller nånstans...
Det jag gör är i alla fall detta (sorry för den massiva kodpejstningen):
Properties props = System.getProperties();
String host = "localhost";
props.put("mail.smtp.host", host);
Session session = Session.getInstance(props, null);
session.setDebug(false);
InternetAddress fromAddress = new InternetAddress(senderEmail, senderName);
Transport transport = session.getTransport("smtp");
transport.addTransportListener(new TransportHandler());
transport.connect();
// query och params har jag klippt ut här... men frågan returerar recipients iaf... massor..
ResultSet rs = dbstmt.executeQuery(query, param);
while(rs.next()) {
String strFullName = rs.getString("strName") + " " + rs.getString("strSurName");
String strEmail = rs.getString("strEmail");
MimeMessage message = new MimeMessage(session);
message.setSubject(strSubject);
message.setFrom(fromAddress);
message.addRecipient(Message.RecipientType.TO, new InternetAddress(strEmail, strFullName, "iso-8859-1"));
message.setContent(strMailBody, "text/html" );
message.saveChanges();
transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO));
}
transport.close();
Ser ni något brutalt fel där?
Jag har en klass, TransportHandler(), som har tre olika metoder som då skulle vara den som tar hand om de event som TransportListernern skulle ge:
public void messageTransferred(TransportEvent te)
public void messagePartiallyTransferred(TransportEvent te)
public void messageNotTransferred(TransportEvent te)
Vad jag trodde var att det skulle funka lika bra som min ConnectionHandler och köra dessa events, men det gör det inte och jag förstår inte varför... Jag saknar dock fundametal kännedom om listeners i allmänhet, så jag har egentligen ingen aning...
Ett sista problem som jag har är att jag får MessagingException med en nested IOException med följande kommentar "Socket Write Error"... Det är ju lite störande... Men i och med att jag inte riktigt förstog mig på hur jag skulle bära mig åt för att få bukt på det problemet har jag gjort en workaround... Jag fångar Exception:en och startar om min sändning och eftersom jag har koll på vilka jag redan har skickat till kan jag inte skicka till samma person igen... Men det sticker ändå lite i min ögon att applikationen skall tilllåtas krasha under kontrollerade former för att sedan fortsätta och krasha på nytt... Det MÅSTE ju gå att komma undan med det... En idé jag hade var att jag kör det i en tråd som jag pausar lite då och då, så jag inte steker Socket:en...
Hmm..
Hoppas jag inte har rört till allt för mycket nu... Men om någon har en liten kommentar på detta, vad som helst, är det jättevälkommet...
Tackar..
::mikeEast