Email Message

Hallo zusammen,

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 :)

Hallo,

der Content ist nunmal HTML.

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…”);

Gruß,

Martin

wo holst Du denn die Mail ab? wäre POP3 als Protokoll nicht besser geeignet?

bye
TT

Das Protokoll ist doch wohl irrelevant. Pop3 macht aus html auch nicht einen Text.

[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…

bye
TT

Ja, aber hier macht doch keiner was mit web-frontend. Jedenfalls sehe ich im Quelltext, dass hier eindeutig imap benutzt wird.

Also das Protokoll über das die E-Mail übertragen wird ist egal. Wäre auch schlimm, wenn es nicht so wäre ;D

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.

[QUOTE=Anko]
Im content stand dann wirklich nur der Text der Mail drin.[/QUOTE]

Weil du Glück hattest und der Part 0 der Message der Textteil war. Lass dir doch mal alle Parts ausgeben.

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Generator" content="Microsoft Word 12 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0cm;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-priority:99;
	color:purple;
	text-decoration:underline;}
span.E-MailFormatvorlage17
	{mso-style-type:personal-compose;
	font-family:"Calibri","sans-serif";
	color:windowtext;}
.MsoChpDefault
	{mso-style-type:export-only;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>

Der restliche HTML Code der Mail steht natürlich auch noch drin.

Ist das jetzt die Ausgabe von deinen Code oben, oder hast du jetzt alle Parts ausgegeben?

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.

Zeig doch mal den kompletten Code…

			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()
				Multipart multipart =  (Multipart)msg.getContent();
				content = multipart.getBodyPart(2).getContent();
//				content = msg.getContent();  ```


Wenn ich die Applikation jetzt starte bekomme ich folgende Fehlermeldung:


Error |
org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object ’

Test

________________________________________________________________________________________________

Mit freundlichen Grüßen

Max Mustermann

ererrer@few.de
www.fhgfhf.de

' 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) ```

Cannot cast object ‘…’ with class ‘java.lang.String’ to class ‘javax.mail.Multipart’

Vermutlich knallt es hier: Multipart multipart = (Multipart)msg.getContent();. getContent() scheint direkt einen String zurückzugeben.