Avatar billede aslan Nybegynder
09. juli 2004 - 09:57 Der er 15 kommentarer og
1 løsning

Få fat på vedhæftede filnavne

Jeg har denne kode hvor jeg henter emails fra en server:

            // open mailbox folder
            Properties properties = new Properties();
            properties.setProperty("mail.smtp.host", host);
            Session session = Session.getInstance(properties, null);
            store = session.getStore("pop3");
            store.connect(host, username, password);
            folder = store.getFolder("inbox");
            folder.open(Folder.READ_WRITE);
           
            // get number of mails to fetch
            int fetchCount = Math.min(numberOfMessages,folder.getMessageCount());
            result = new HashMap[fetchCount];
           
           
            // fetch mails
            for (int i=1; i<=fetchCount; i++)
            {
                MimeMessage message = (MimeMessage)folder.getMessage(i);
               
                Address[] add = message.getFrom();
               
                System.out.println("from "+add[0]);

            }

Men hvordan får jeg fat på navnene på de vedhæftede filer?
Avatar billede arne_v Ekspert
09. juli 2004 - 10:01 #1
Aldrig selv prøvet, men dt her links er interessant ud:
  http://www.jguru.com/faq/view.jsp?EID=26996
Avatar billede aslan Nybegynder
09. juli 2004 - 10:25 #2
Jeg kan stadig ikke få fat på filnavne, men afsender og subject kan jeg sagtens få fat på. Jeg forsøger således:

            // open mailbox folder
            Properties properties = new Properties();
            properties.setProperty("mail.smtp.host", host);
            Session session = Session.getInstance(properties, null);
            store = session.getStore("pop3");
            store.connect(host, username, password);
            folder = store.getFolder("inbox");
            folder.open(Folder.READ_WRITE);
           
           
            // Get directory
            Message message[] = folder.getMessages();
            for (int i=0, n=message.length; i<n; i++)
            {
                System.out.println("get from "+message[i].getFrom()[0]);
                System.out.println("get filename"+message[i].getFileName());
                System.out.println("get subject"+message[i].getSubject());
            }
Avatar billede arne_v Ekspert
09. juli 2004 - 10:43 #3
Jo men attachet filnavn er jo ikke en egenskab ved mail men en egenskab ved
en del af emailen.

Hvis du vil tilgive mig at jeg snakker lidt database terminologi:

Message object---(1:1)---Multipart objekt---(1:M)---Part objekt

Det filnavn du søger er en del af Part objektet.

Derfor skal du ned igennem strukturen. Som vist i det link jeg gav.
Avatar billede arne_v Ekspert
09. juli 2004 - 10:46 #4
Multipart mp = (Multipart)message[i].getContent();
for (int j=0; i<mp.getCount(); j++) {
    Part p = mp.getBodyPart(j));
    String fnm = p.getFileName() ;
}
Avatar billede aslan Nybegynder
09. juli 2004 - 11:28 #5
Det er mærkeligt arne får når jeg forsøger således:

            Message message[] = folder.getMessages();
            for (int i=0, n=message.length; i<n; i++)
            {
                System.out.println("get from "+message[i].getFrom()[0]);
               
               
                Multipart mp = (Multipart)message[i].getContent();
                for (int j=0; i<mp.getCount(); j++)
                {
                    Part p = mp.getBodyPart(j);
                    String fnm = p.getFileName() ;
                   
                    System.out.println("file "+fnm);
                }
            }

Så udskriver den :

get from 4551234632 <9378ee4072c7ef31eb8a6eb9cde59f72f0cd595132ee857dc8293234ec51c8bf5474f800e62be970@mms.tdcmobil.dk>
file null
file Vigtig info.txt

Den udskriver jpg filen med null selvom jeg kan se på mail serveren at den eksistere?
Avatar billede aslan Nybegynder
09. juli 2004 - 11:34 #6
Jeg får faktisk denne fejl:

java.lang.ArrayIndexOutOfBoundsException: 2 >= 2
    at java.util.Vector.elementAt(Vector.java:431)
    at javax.mail.Multipart.getBodyPart(Multipart.java:126)
    at javax.mail.internet.MimeMultipart.getBodyPart(MimeMultipart.java:173)
    at rf.MailReader.fetchMailContents(MailReader.java:56)
    at rf.HandleMails.<init>(HandleMails.java:57)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:274)
    at java.lang.Class.newInstance0(Class.java:308)
    at java.lang.Class.newInstance(Class.java:261)
    at java.beans.Beans.instantiate(Beans.java:204)
    at java.beans.Beans.instantiate(Beans.java:48)
    at com.caucho.server.http.Application.instantiateServlet(Application.java:3183)
    at com.caucho.server.http.Application.createServlet(Application.java:3104)
    at com.caucho.server.http.Application.loadServlet(Application.java:3065)
    at com.caucho.server.http.QServletConfig.loadServlet(QServletConfig.java:435)
    at com.caucho.server.http.Application.getFilterChainServlet(Application.java:2809)
    at com.caucho.server.http.Application.buildFilterChain(Application.java:2765)
    at com.caucho.server.http.Invocation.service(Invocation.java:313)
    at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:246)
    at com.caucho.server.http.HttpRequest.handleConnection(HttpRequest.java:163)
    at com.caucho.server.TcpConnection.run(TcpConnection.java:139)
    at java.lang.Thread.run(Thread.java:534)
java.lang.ArrayIndexOutOfBoundsException: 2 >= 2
    at java.util.Vector.elementAt(Vector.java:431)
    at javax.mail.Multipart.getBodyPart(Multipart.java:126)
    at javax.mail.internet.MimeMultipart.getBodyPart(MimeMultipart.java:173)
    at rf.MailReader.fetchMailContents(MailReader.java:56)
    at rf.HandleMails.<init>(HandleMails.java:57)
    at rf.HandleMails.service(HandleMails.java:42)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:103)
    at com.caucho.server.http.FilterChainServlet.doFilter(FilterChainServlet.java:96)
    at com.caucho.server.http.Invocation.service(Invocation.java:315)
    at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:246)
    at com.caucho.server.http.HttpRequest.handleConnection(HttpRequest.java:163)
    at com.caucho.server.TcpConnection.run(TcpConnection.java:139)
    at java.lang.Thread.run(Thread.java:534)
Avatar billede arne_v Ekspert
09. juli 2004 - 12:02 #7
Exception er fordi jeg er en skovl !

Ret fra j til i:
  j<mp.getCount();

:-)
Avatar billede arne_v Ekspert
09. juli 2004 - 12:03 #8
p.getFileName() returnerer null men er der nogen andre interessante get'ere ?
Avatar billede aslan Nybegynder
09. juli 2004 - 12:30 #9
Tak arne nu får jeg ikke fejl, men får stadig udskrevet null på den jpg fil. Hvis jeg skal være ærlig så tror jeg der er noget galt med den måde emails er sendt ind til serveren.
Avatar billede aslan Nybegynder
09. juli 2004 - 13:25 #10
Arne det seer ud til jeg selv bliver nød til at lave en email klient fordi den klient vi bruger ikke kan læse filer odentligt. Findes der ikke et bibliotek i commens til sådan noget?
Avatar billede aslan Nybegynder
09. juli 2004 - 13:25 #11
læg lige et svar også
Avatar billede arne_v Ekspert
09. juli 2004 - 13:29 #12
Hvad mangler du som der ikke er i selve javamail ?
Avatar billede arne_v Ekspert
09. juli 2004 - 13:29 #13
svar
Avatar billede arne_v Ekspert
09. juli 2004 - 13:30 #14
Jakarta Commons Net indeholder POP3
Avatar billede aslan Nybegynder
09. juli 2004 - 13:33 #15
Problemet med den er at den på et eller anden måde læser filerne forkert så jeg ikke kan få fat på navnene på jpg filerne. Dette sker kun hvis man sender emails via mobil telefoner til serveren, det virker udmærket hvis emails blivers sendt almindeligt. Derfor tænkte jeg at jeg lige ville forsøge mig med et andet bibliotek?
Avatar billede arne_v Ekspert
09. juli 2004 - 13:42 #16
Det er værd at prøve.
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