19. marts 2003 - 10:11
Der er
31 kommentarer og 1 løsning
java mail
Jeg bruger java mail. Jeg ønsker i dette tilfælde at der bliver sendt mails til 2 personer. Det virker også. Mit spørgsmål er om koden er korrekt, eller om man kan lave det på en smartere måde? Properties props = System.getProperties(); props.put("mail.smtp.host","smtp.mail.dk"); Session session = Session.getInstance(props, null); try { // send to EMAIL1 Message m = new MimeMessage(session); m.setSubject("SUBJEKT"); m.setText(comment); Address address = new InternetAddress("EMAIL1", name); m.setFrom(address); Address toAddress = new InternetAddress("EMAIL1"); m.addRecipient(Message.RecipientType.TO, toAddress); Transport trans = session.getTransport("smtp"); trans.send(m); // send EMAIL2 Message m1 = new MimeMessage(session); m1.setSubject("SUBJEKT"); m1.setText(comment); Address address1 = new InternetAddress("EMAIL2", name); m1.setFrom(address1); Address toAddress1 = new InternetAddress("EMAIL2"); m1.addRecipient(Message.RecipientType.TO, toAddress1); Transport trans1 = session.getTransport("smtp"); trans.send(m1); } catch (MessagingException e) { System.out.println("MessagingException"); }
Annonceindlæg fra Kommando
19. marts 2003 - 10:17
#1
Denne klasse er glimrende til at sende mail med: import java.util.*; import java.text.SimpleDateFormat; import javax.mail.*; import javax.mail.internet.*; public class SendMail { private String recipient = ""; private String sender = ""; private String body = ""; private String subject = ""; private SimpleDateFormat sfDateTime = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); public String getTimeStampNow() { return (sfDateTime.format(new Date())); } public void setRecipient(String recipient) { this.recipient = recipient; } public void setSender(String sender) { this.sender = sender; } public void setBody(String body) { this.body = body; } public void setSubject(String subject) { this.subject = subject; } public boolean sendMail() { boolean sendMail = true; try { Properties props = new Properties(); props.put("mail.smtp.host", "pop3.mail.dk"); Session mailsession = Session.getDefaultInstance(props, null); Message msg = new MimeMessage(mailsession); msg.setFrom(new InternetAddress(sender)); msg.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient)); msg.setSubject(subject); msg.setText(body); Transport.send(msg); return true; } catch (AddressException e) { System.out.println(getTimeStampNow()); e.printStackTrace(); return false; } catch (MessagingException e) { System.out.println(getTimeStampNow()); e.printStackTrace(); return false; } } }
19. marts 2003 - 10:19
#2
okay tak
19. marts 2003 - 10:40
#3
Stop. Stop. Hvis jeg har forstået spørgsmålet rigtigt, så er pointen at der skal sendes samme email til 2 personer. Den originale kode + det postede stykke kode sender begge to separate emails til de 2 ikke en enkelt email til 2 modtagere. For at gøre det må man skulle lave: MimeMessage m = new MimeMessage(session); ... Address[] toAddress = new Address[2]; toAddress[0] = new InternetAddress("EMAIL1"); toAddress[1] = new InternetAddress("EMAIL2"); ... m.addRecipients(Message.RecipientType.TO, toAddress);
19. marts 2003 - 10:41
#4
Bemærk at addRecipients kun er i MimeMessage ikke i Message, så erklæringen af m er ændret !
19. marts 2003 - 10:44
#5
Det er rigtigt at det er den samme email som skal sendes til 2 (eller i princippet * antal) personer
19. marts 2003 - 10:49
#6
Så tror jeg du skal bruge teknikken med Address[] og MimeMessage addRecipients.
19. marts 2003 - 11:02
#7
Jeg er bange for at jeg ikke kan se hvordan jeg skal gøre det
19. marts 2003 - 11:06
#8
MimeMessage m = new MimeMessage(session); m.setSubject("SUBJEKT"); m.setText(comment); Address[] toAddress = new Address[2]; toAddress[0] = new InternetAddress("EMAIL1"); toAddress[1] = new InternetAddress("EMAIL2"); m.addRecipients(Message.RecipientType.TO, toAddress);
19. marts 2003 - 11:06
#9
Properties props = System.getProperties(); props.put("mail.smtp.host","smtp.mail.dk"); Session session = Session.getInstance(props, null); try { // send to EMAIL1 & EMAIL2 MimeMessage m = new MimeMessage(session); m.setSubject("SUBJEKT"); m.setText(comment); Address address = new InternetAddress("EMAIL1", name); m.setFrom(address); Address[] toAddress = new Address[2]; toAddress[0] = new InternetAddress("EMAIL1"); toAddress[1] = new InternetAddress("EMAIL2"); m.addRecipients(Message.RecipientType.TO, toAddress); Transport trans = session.getTransport("smtp"); trans.send(m); } catch (MessagingException e) { System.out.println("MessagingException"); }
19. marts 2003 - 11:07
#10
Ovenfor har jeg bare proppet ændringerne ind i din kode - jeg har ikke engang prøvet om det compiler.
19. marts 2003 - 11:12
#11
Virker det ?
19. marts 2003 - 11:14
#12
Det ser ud til at den kun sender til den første
19. marts 2003 - 11:14
#13
I real life skal det jo nok være: String[] group; Address[] toAddress = new Address[group.length]; for(int i = 0; i < toAddress.length; i++) toAddress[i] = new InternetAddress(group[i]); m.addRecipients(Message.RecipientType.TO, toAddress);
19. marts 2003 - 11:21
#14
Hmmm, det forstod jeg ikke så meget af
19. marts 2003 - 11:25
#15
Det var bare for at vise, hvordan man sender email til et vilkårligt antal modtagere (gemt i et String array - her kaldet group).
19. marts 2003 - 11:27
#16
Er det mon noget i den her retning :-) MimeMessage m = new MimeMessage(session); m.setSubject("SUBJEKT"); m.setText(comment); Address address = new InternetAddress("EMAIL1", name); m.setFrom(address); Address[] toAddress = new Address[2]; toAddress[0] = new InternetAddress("EMAIL1"); toAddress[1] = new InternetAddress("EMAIL2"); for(int i = 0; i < toAddress.length; i++){ m.addRecipients(Message.RecipientType.TO, toAddress[i]); Transport trans = session.getTransport("smtp"); trans.send(m); } }
19. marts 2003 - 11:27
#17
Jeg kan ikke forklare hvorfor der kun sendes til den første. Det burde virke. Er de 2 adresser du sender til forskellige ?
19. marts 2003 - 11:29
#18
ja, men burde det have nogen indflydelse
19. marts 2003 - 11:37
#19
er det ikke fordi jeg skal lave noget i den her retning for(int i = 0; i < toAddress.length; i++){ m.addRecipients(Message.RecipientType.TO, toAddress[i]); }
19. marts 2003 - 11:40
#20
Jeg tænkte bare på om den havde været smart og havde konverteret 2 ens modtagere til 1 modtagere.
19. marts 2003 - 11:41
#21
Jeg er ikke sikker på at den løkke virker. Jeg er bange for at den overskriver og ikke appender. Men du kan jo prøve.
19. marts 2003 - 11:41
#22
den ved ikke hvad m er
19. marts 2003 - 11:45
#23
Jeg bliver nok nød til at lade det være som det er :-( selv om det er noget rod. Tilgængæld virker det
19. marts 2003 - 12:05
#24
Tak for hjælpen :-)
19. marts 2003 - 12:07
#25
Hvis har tid vil jeg muligvis kigge lidt på det i aften. Og smider noget her, hvis jeg finder noget.
19. marts 2003 - 12:08
#26
Det lyder godt :-)
19. marts 2003 - 21:47
#27
Følgende sender enemail til 3 bruger (faktisk 3 kopier til samme men det er det samme): import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class SendEmailMany { public static void main(String[] args) { String[] users = { "arne@xxx.dk", "arne@xxx.dk", "arne@xxx.dk" }; sendEmail(users); } public static void sendEmail(String[] users) { try { Properties props = System.getProperties(); props.put("mail.smtp.host", "192.168.1.10"); Session session = Session.getDefaultInstance(props, null); MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress("arne@xxx.dk")); InternetAddress[] toaddr = new InternetAddress[users.length]; for(int i = 0; i < users.length; i++) { toaddr[i] = new InternetAddress(users[i]); } message.addRecipients(Message.RecipientType.TO, toaddr); message.setSubject("Test"); message.setText("Dette er en test"); Transport.send(message); } catch (AddressException e) { e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } } }
19. marts 2003 - 21:48
#28
Det virker hos mig.
19. marts 2003 - 22:34
#29
Okay, så er det bare lige hvordan jeg får bygget det ind
19. marts 2003 - 22:38
#30
Det skal jeg vist lige bruge lidt tid på :-)
19. marts 2003 - 23:32
#31
Hvor er det bare fedt !!!!!!!!!!!!!!!!!!!!!!!!!! Du er da den ondeste haj, altså på den gode måde *lol*. Nu har jeg denne her klasse jeg bare kan bruge når der skal sendes mails i den ene eller anden sammenhæng. import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class Sendmail { public void Sendmail(String comment) { String[] users = { "email1", "email2"}; sendEmail(users, comment); } public static void sendEmail(String[] users, String comment) { try { Properties props = System.getProperties(); props.put("mail.smtp.host", "smtp.mail.dk"); Session session = Session.getDefaultInstance(props, null); MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress("email")); InternetAddress[] toaddr = new InternetAddress[users.length]; for(int i = 0; i < users.length; i++) { toaddr[i] = new InternetAddress(users[i]); } message.addRecipients(Message.RecipientType.TO, toaddr); message.setSubject("New entry in guestbook"); message.setText(comment); Transport.send(message); } catch (AddressException e) { e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } } }
19. marts 2003 - 23:34
#32
Det er da for sejt at jeg bare kan skrive Sendmail start = new Sendmail(); start.Sendmail(comment); i min Updateguestbook klasse
Kurser inden for grundlæggende programmering