ich habe mir ein Mail Job mit Grails & Groovy geschrieben.
Es wird jede Minute automatisch abgefragt, ob neue Mails eingegangen sind.
Falls neue Mails eingegangen sind werde die Mails in eine MySql Datenbank geschrieben.
Funktioniert auch alles Wunderbar!
Allerdings wird immer die ganze Mail (HTML Code etc.) mit in die Datenbank gespeichert.
Ich möchte aber nur die Message gespeichert bekommen.
Codeausschnitt:
Session session = Session.getInstance(props, auth)
IMAPSSLStore store = new IMAPSSLStore(session, new URLName("imap", Company.get(7).emailHost, Integer.parseInt(Company.get(7).emailPort), "", Company.get(7).emailUsername, pw));
store.connect();
Folder inbox = store.getFolder("INBOX")
inbox.open(Folder.READ_WRITE)
Flags seen = new Flags(Flags.Flag.SEEN)
FlagTerm unseenFlagTerm = new FlagTerm(seen, false)
inbox.search(unseenFlagTerm).each { msg ->
mailFrom = msg.getFrom()[0].toString();
sbj = msg.getSubject().toString();
sentdate = msg.getSentDate().toString();
def task = new Task()
content = msg.getContent(); ```
```content = msg.getContent();```
Im Content steht die ganze Mail als HTML Code.
Hat jemand eine Lösungsansatz für mich wie ich ausschließlich nur die Message rausbekomme?
Vielen Dank :)
Du musst das HTML entsprechend visualisieren. Oder eben den tatsächlichen Conent daraus parsen. Ich befürchte aber, dass dies schwierig ist, da Du ja nicht unterscheiden kannst zwischen Nutzinformationen und irgenteinem Text, der drunter und drüber steht. (Disclaimer oder „Falls Sie diese Mail…“);
[quote=Marcinek]Das Protokoll ist doch wohl irrelevant. Pop3 macht aus html auch nicht einen Text.[/quote]Wenn die Mail selbst sowiso HTML ist nicht, aber Webfrontends machen aus reiner Text-Mail eben auch HTML-Geschlunze…
Kommt immer auf die Mail darauf an. Newsletter und so Zeugs bekommst meist nur als HTML, wie das bei automatisch erzeugten Rechnungen aussieht, keine Ahnung. Bei manuell verschickten Email erzeugt der Client meistens eine Multipart Email, ergo. einen HTML und einen Reintext-Content.
Ich habe es schonmal mit einem “googlemail” Konto realisiert bekommen.
content = multipart.getBodyPart(0).getContent().toString();```
Im content stand dann wirklich nur der Text der Mail drin.
Nun läuft das ganze mit Outlook365. Und damit funktioniert es nicht mehr.
Das ist eine Fehlermeldung, welche erscheint, wenn er versucht eine Email zu lesen.
Egal welche index ich im getBodyPart angebe, es erscheint immer diese Fehlermeldung.
' with class 'java.lang.String' to class 'javax.mail.Multipart'
Error |
at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.castToType(DefaultTypeTransformation.java:360)
Error |
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.castToType(ScriptBytecodeAdapter.java:599)
Error |
at pms.MailJob$_execute_closure1.doCall(MailJob.groovy:91)
Error |
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Error |
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
Error |
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
Error |
at java.lang.reflect.Method.invoke(Method.java:597)
Error |
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1254)
Error |
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
Error |
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
Error |
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1086)
Error |
at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1110)
Error |
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:910)
Error |
at groovy.lang.Closure.call(Closure.java:411)
Error |
at pms.MailJob$_execute_closure1.call(MailJob.groovy)
Error |
at groovy.lang.Closure.call(Closure.java:427)
Error |
at pms.MailJob$_execute_closure1.call(MailJob.groovy)
Error |
at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:1325)
Error |
at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:1297)
Error |
at org.codehaus.groovy.runtime.dgm$148.invoke(Unknown Source)
Error |
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:271)
Error |
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:53)
Error |
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
Error |
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
Error |
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
Error |
at pms.MailJob.execute(MailJob.groovy:86)
Error |
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Error |
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
Error |
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
Error |
at java.lang.reflect.Method.invoke(Method.java:597)
Error |
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1254)
Error |
at grails.plugin.quartz2.GrailsArtefactJob.execute(GrailsArtefactJob.java:59)
Error |
at grails.plugin.quartz2.GrailsArtefactNonConcurrentJob.execute(GrailsArtefactNonConcurrentJob.java)
Error |
at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
Error |
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557)
```