Avatar billede mik28 Seniormester
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");
        }
Avatar billede magoo20000 Nybegynder
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;
        }
    }
}
Avatar billede mik28 Seniormester
19. marts 2003 - 10:19 #2
okay tak
Avatar billede arne_v Ekspert
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);
Avatar billede arne_v Ekspert
19. marts 2003 - 10:41 #4
Bemærk at addRecipients kun er i MimeMessage ikke i Message, så erklæringen
af m er ændret !
Avatar billede mik28 Seniormester
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
Avatar billede arne_v Ekspert
19. marts 2003 - 10:49 #6
Så tror jeg du skal bruge teknikken med Address[] og MimeMessage
addRecipients.
Avatar billede mik28 Seniormester
19. marts 2003 - 11:02 #7
Jeg er bange for at jeg ikke kan se hvordan jeg skal gøre det
Avatar billede mik28 Seniormester
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);
Avatar billede arne_v Ekspert
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");
        }
Avatar billede arne_v Ekspert
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.
Avatar billede arne_v Ekspert
19. marts 2003 - 11:12 #11
Virker det ?
Avatar billede mik28 Seniormester
19. marts 2003 - 11:14 #12
Det ser ud til at den kun sender til den første
Avatar billede arne_v Ekspert
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);
Avatar billede mik28 Seniormester
19. marts 2003 - 11:21 #14
Hmmm, det forstod jeg ikke så meget af
Avatar billede arne_v Ekspert
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).
Avatar billede mik28 Seniormester
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);
        }

}
Avatar billede arne_v Ekspert
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 ?
Avatar billede mik28 Seniormester
19. marts 2003 - 11:29 #18
ja, men burde det have nogen indflydelse
Avatar billede mik28 Seniormester
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]);
        }
Avatar billede arne_v Ekspert
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.
Avatar billede arne_v Ekspert
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.
Avatar billede mik28 Seniormester
19. marts 2003 - 11:41 #22
den ved ikke hvad m er
Avatar billede mik28 Seniormester
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
Avatar billede mik28 Seniormester
19. marts 2003 - 12:05 #24
Tak for hjælpen :-)
Avatar billede arne_v Ekspert
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.
Avatar billede mik28 Seniormester
19. marts 2003 - 12:08 #26
Det lyder godt :-)
Avatar billede arne_v Ekspert
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();
        }
    }
}
Avatar billede arne_v Ekspert
19. marts 2003 - 21:48 #28
Det virker hos mig.
Avatar billede mik28 Seniormester
19. marts 2003 - 22:34 #29
Okay, så er det bare lige hvordan jeg får bygget det ind
Avatar billede mik28 Seniormester
19. marts 2003 - 22:38 #30
Det skal jeg vist lige bruge lidt tid på :-)
Avatar billede mik28 Seniormester
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();
        }
    }
}
Avatar billede mik28 Seniormester
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
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester