Avatar billede changelevel Nybegynder
12. marts 2013 - 13:46 Der er 24 kommentarer

Email i java

er det muligt at sende emails i java?

Jeg har emails i arrayList som String type.

jeg vil gerne sende til dem alle sammen på en gang, og samtidig skal

jeg også modtage dem og læse den i java? (JTextArea)
Avatar billede arne_v Ekspert
12. marts 2013 - 14:13 #1
Ja.

Der er et API kaldet JavaMail.
Avatar billede arne_v Ekspert
12. marts 2013 - 14:16 #2
http://www.eksperten.dk/guide/77

er lidt gammel, men burde stadig kunne bruges.
Avatar billede arne_v Ekspert
12. marts 2013 - 14:18 #3
Man kan ogsaa laese email - fra POP3 og IMAP4 servere.

Eksempel fra lageret:


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Properties;

import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Store;

public class Pop {
    public static void main(String[] args) {
        String server = args[0];
        String username = args[1];
        String password = args[2];
        list(server, username, password);
        get(server, username, password, 1);
    }
    public static void list(String server, String username, String password) {
        try {
            Properties props = System.getProperties();
            Session session = Session.getDefaultInstance(props, null);
            Store store = session.getStore("pop3");
            store.connect(server, username, password);
            Folder folder = store.getFolder("INBOX");
            folder.open(Folder.READ_ONLY);
            Message[] msgs = folder.getMessages(); 
            for(int i = 0; i < msgs.length; i++) {
                System.out.println(msgs[i].getMessageNumber() + " " +
                                  msgs[i].getFrom()[0] + " " +
                                  msgs[i].getSubject());     
            }
            folder.close(false);
            store.close();
        } catch (NoSuchProviderException e) {
            e.printStackTrace();
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
    public static void get(String server, String username, String password, int n) {
        try {
            Properties props = System.getProperties();
            Session session = Session.getDefaultInstance(props, null);
            Store store = session.getStore("pop3");
            store.connect(server, username, password);
            Folder folder = store.getFolder("INBOX");
            folder.open(Folder.READ_WRITE);
            if(folder.getMessageCount() >= n) {
                Message[] msgs = folder.getMessages(n, n); 
                System.out.println(msgs[0].getFrom()[0] + " " +
                                  msgs[0].getAllRecipients()[0] + " " +
                                  msgs[0].getSubject()); 
                BufferedReader body = new BufferedReader(new InputStreamReader(msgs[0].getInputStream()));
                String line;
                while((line = body.readLine()) != null) {
                    System.out.println(line); 
                }
                msgs[0].setFlag(Flags.Flag.DELETED, true);
            }
            folder.close(true);
            store.close();
        } catch (NoSuchProviderException e) {
            e.printStackTrace();
        } catch (MessagingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Avatar billede changelevel Nybegynder
12. marts 2013 - 14:39 #4
Tak, men jeg får mange røde streger når jeg paste dem i Netbeans?

Skal jeg installere noget før?
Avatar billede changelevel Nybegynder
12. marts 2013 - 14:40 #5
f.eks  Session session = Session.getDefaultInstance(props, null);?
Avatar billede arne_v Ekspert
12. marts 2013 - 14:50 #6
JavaMail
Activation Framework
Avatar billede changelevel Nybegynder
12. marts 2013 - 15:03 #7
øøøhhhh?    :D
Avatar billede arne_v Ekspert
12. marts 2013 - 15:12 #8
Du skal have fat i de to og have dem i classpath!
Avatar billede changelevel Nybegynder
12. marts 2013 - 18:36 #9
cool cool, nu  er røde streg væk...
Avatar billede changelevel Nybegynder
16. marts 2013 - 20:03 #10
nu kan jeg godt sende mail, :D
men er det muligt at modtage ulæst emails fra gmail i java?
Avatar billede arne_v Ekspert
16. marts 2013 - 20:11 #11
Gmail understoetter saa vidt jeg ved POP3/IMAP4, saa det skulle vaere muligt.
Avatar billede changelevel Nybegynder
17. marts 2013 - 01:34 #12
InputStream is = p.getInputStream();
        // If "is" is not already buffered, wrap a      BufferedInputStream
        // around it.
        if (!(is instanceof BufferedInputStream)) {
            is = new BufferedInputStream(is);
        }
        int c;
        System.out.println("Message : ");
        while ((c = is.read()) != -1) {
            System.out.write(c);
         
        }

Er det muligt at convertere int c til String.
Jeg vil gerne have tekst i String?
Avatar billede arne_v Ekspert
17. marts 2013 - 01:37 #13
Kan du ikke wrappe i en BufferedReader og bruge readLine?
Avatar billede arne_v Ekspert
17. marts 2013 - 01:38 #14
Men eller kan du laese ind i et byte[] via den read med 3 argumenter og saa bruge den rette String constructor.
Avatar billede changelevel Nybegynder
17. marts 2013 - 01:48 #15
har aldrig brugt byte[] før?
Avatar billede arne_v Ekspert
17. marts 2013 - 01:51 #16
byte[] b = new byte[10240];
int n = is.read(b, 0, b.length);

laeser op til 10240 bytes fra en InputStream
Avatar billede changelevel Nybegynder
17. marts 2013 - 01:54 #17
InputStreamReader r = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(r);
        String vi = br.readLine();
       
        System.out.println(vi);

jeg får null, når jeg kører ovenstående kode?
Avatar billede changelevel Nybegynder
17. marts 2013 - 02:02 #18
byte[] b = new byte[10240];
int n = is.read(b, 0, b.length);

Jeg vil gerne have det i String??
Avatar billede changelevel Nybegynder
17. marts 2013 - 02:08 #19
Jeg har fået det til virke ! :D

  InputStream is = p.getInputStream();
       
        BufferedReader br = new BufferedReader(
                new InputStreamReader(is));
       
        StringBuilder sb = new StringBuilder();
       
        String line;
        while ((line = br.readLine()) != null) {
            sb.append(line);
        }       
       
        System.out.println("test "+sb.toString());
       
        br.close();
Avatar billede arne_v Ekspert
17. marts 2013 - 02:14 #20
Det er nok den paeneste loesning men ellers kan:

String s = new String(b, 0,n);

lave en String fra en byte[].
Avatar billede changelevel Nybegynder
17. marts 2013 - 14:20 #21
er det muligt at smide et baggrundsbillede til Jpanel?
Avatar billede arne_v Ekspert
17. marts 2013 - 15:13 #22
Der er visse muligheder.

Proev og laes:

http://tips4java.wordpress.com/2008/10/12/background-panel/
Avatar billede changelevel Nybegynder
29. maj 2013 - 08:33 #23
skriver du et svar??
Avatar billede arne_v Ekspert
29. maj 2013 - 14:57 #24
svar
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