Giter Club home page Giter Club logo

clojure-mail's Introduction

clojure-mail's People

Contributors

andrewmacquarrie avatar anujsrc avatar c-garcia avatar cguckes avatar christianblunden avatar danieltreacy avatar devth avatar erjoalgo avatar f0086 avatar feifanzhou avatar fvides avatar hacklschorsch avatar jozseftiborcz avatar juhani-hietikko avatar kouphax avatar kwieloch avatar mathias avatar mkremins avatar nrakochy avatar owainlewis avatar quan-nh avatar shmish111 avatar skammer avatar tangrammer avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

clojure-mail's Issues

reading body from a message with attachments

There's a known issue with the javamail class, that if a message has attachments sometimes the message body is received as com.sun.mail.util.BASE64DecoderStream@1135a5f5
And this is what I find when I do read-message using clojure-mail and take :body

A solution suggested is:
https://javaee.github.io/javamail/FAQ#mainbody

I have a hard time putting that solution to work here as I don't understand exactly what the body element here is in terms of java classes and how it relates to the solution above. Or perhaps there's an easier way?

uberjar

It seems we can't do lein uberjar.

Consider updating Clojars with more recent fixes

I just ran into the now-closed issue 15 for clojure-mail using the version currently on Clojars (0.1.6). I've gotten around it now, but wanted to suggest updating the Clojars copy so that the fix is available using "normal" means. Thanks for maintaining a useful library.

RuntimeException: Unable to find static field: SIZE in class javax.mail.FetchProfile$Item Round 2

as mentioned here:

#66

the issue appears to be with javax/mail/mailapi/1.4.3 and the exception is

Caused by: java.lang.RuntimeException: Unable to find static field: SIZE in class javax.mail.FetchProfile$Item
	at clojure.lang.Util.runtimeException(Util.java:221)
	at clojure.lang.Compiler.analyzeSymbol(Compiler.java:7196)
	at clojure.lang.Compiler.analyze(Compiler.java:6752)

called here

Exception in thread "main" java.lang.RuntimeException: Unable to find static field: SIZE in class javax.mail.FetchProfile$Item, compiling:(clojure_mail/folder.clj:64:14)
	at clojure.lang.Compiler.analyze(Compiler.java:6792)
	at clojure.lang.Compiler.analyze(Compiler.java:6729)

https://github.com/owainlewis/clojure-mail/blob/master/src/clojure_mail/folder.clj#L70

it appears SIZE is indeed non-existant

https://docs.oracle.com/javaee/6/api/javax/mail/FetchProfile.Item.html

but might instead be in CONTENT_INFO

CONTENT_INFO

This item is for fetching information about the content of the message.
This includes all the attributes that describe the content of the message. Implementations >should include the following attributes: ContentType, ContentDisposition, >ContentDescription, Size and LineCount. Other items may be included as well.

Can this field be removed to get rid of the exception? I have a hard dependency on mailapi 1.4.3

reflection error

Hi there,

I used this lib [io.forward/clojure-mail "1.0"] in my test, it works fine on my local box, but when I run in in jenkins, there is a strange reflection error, any clue why it happened?

Thanks!

18:40:02,623 ERROR [SoapUI] An error occurred [No matching field found: getDefaultFolder for class java.lang.Character], see error log for details
java.lang.IllegalArgumentException: No matching field found: getDefaultFolder for class java.lang.Character
at clojure.lang.Reflector.getInstanceField(Reflector.java:271)
at clojure.lang.Reflector.invokeNoArgInstanceMember(Reflector.java:315)
at clojure_mail.core$open_folder.invoke(core.clj:136)
at clojure_mail.core$search_inbox.invoke(core.clj:207)
at everbridge.mail_service$get_mail_by_title.invoke(mail_service.clj:145)
at everbridge.qa$_EmailsearchEmail.invoke(qa.clj:130)
at everbridge.qa.EmailsearchEmail(Unknown Source)
at everbridge.qa$EmailsearchEmail.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:124)
at Script1.run(Script1.groovy:4)
at com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.run(SoapUIGroovyScriptEngine.java:92)
at com.eviware.soapui.support.scripting.groovy.SoapUIProGroovyScriptEngineFactory$SoapUIProGroovyScriptEngine.run(SourceFile:79)
at com.eviware.soapui.impl.wsdl.teststeps.WsdlGroovyScriptTestStep.run(WsdlGroovyScriptTestStep.java:138)
at com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner.runTestStep(AbstractTestCaseRunner.java:213)
at com.eviware.soapui.impl.wsdl.testcase.WsdlTestCaseRunner.runCurrentTestStep(WsdlTestCaseRunner.java:47)
at com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner.internalRun(AbstractTestCaseRunner.java:139)
at com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner.internalRun(AbstractTestCaseRunner.java:47)
at com.eviware.soapui.impl.wsdl.support.AbstractTestRunner.run(AbstractTestRunner.java:129)
at java.util.concurrent.Executors

Push released non-snapshot?

Leiningen doesn't like releasing projects that depend on SNAPSHOTs:

Release versions may not depend upon snapshots.
Freeze snapshots to dated versions or set the LEIN_SNAPSHOTS_IN_RELEASE environment variable to override.

Would you mind deploying a non-snapshot version? I use the lein-release plugin to do this automatically.

Date searches not working on GMail

For some reason GMail appears to be completely ignoring my date searches. Is this a known issue? Basically just calling:

(search-inbox store [:sent-after date :to "address"]])

But getting messages from betfore the date. I'm also confused because the signature of search-inbox doesn't match some of the examples in the readme, so I'm worried I'm missing something fundamental.

Unable to find static field in com.sun.mail.imap.IMAPFolder$FetchProfileItem

Hello there.

I added clojure-mail to my project and am now unable to compile the project. I ran across this similar bug report which might be helpful.

Attached are a few screenshots. I'm not sure if this is user error (me) or a bug further upstream, and I would appreciate any insight which you might have to sort it out. Many thanks.

Runtime Exception:
imap_exception

Project ns:
email_parser

Maven repo locally installed:
mvn_clojure_mail

possible memory leak?

Hi,

Is there any need to do any memory cleanup to free the used memory?
I'm suspecting a memory leak after using search-inbox many times, just checking if you have any foolproof recommendation on how to make sure memory is released.

Exception while reading message from event

This is my code which is suppose to handle deleted message from Gmail inbox.

(defn- message-removed-event
  [event]
  (let [message (->> event
                     :messages
                     (map msg/read-message)
                     (map :subject))]
    (println message)))

(def manager
  (let [s (mail/get-session "imaps")
        gstore (mail/store "imaps" s "imap.gmail.com" "[email protected]" "mypsswd")
        folder (mail/open-folder gstore "inbox" :readonly)
        im (events/new-idle-manager s)]
    (events/add-message-count-listener message-added-event
                                       message-removed-event
                                       folder
                                       im)
    im))

However it ends up crashing on :cause [Ljavax.mail.Message; cannot be cast to javax.mail.internet.MimeMessage when I delete a message in my inbox.

Full stack trace here

 :cause [Ljavax.mail.Message; cannot be cast to javax.mail.internet.MimeMessage
 :via
 [{:type java.lang.ClassCastException
   :message [Ljavax.mail.Message; cannot be cast to javax.mail.internet.MimeMessage
   :at [clojure_mail.message$recipients invoke message.clj 24]}]
 :trace
 [[clojure_mail.message$recipients invoke message.clj 24]
  [clojure_mail.message$to invoke message.clj 30]
  [clojure_mail.message$add_field invoke message.clj 162]
  [clojure.core$partial$fn__4527 invoke core.clj 2495]
  [clojure.lang.PersistentHashMap$NodeSeq kvreduce PersistentHashMap.java 1303]
  [clojure.lang.PersistentHashMap$BitmapIndexedNode kvreduce PersistentHashMap.java 796]
  [clojure.lang.PersistentHashMap kvreduce PersistentHashMap.java 236]
  [clojure.core$fn__6713 invoke core.clj 6536]
  [clojure.core.protocols$fn__6531$G__6526__6540 invoke protocols.clj 174]
  [clojure.core$reduce_kv invoke core.clj 6562]
  [clojure_mail.message$read_message doInvoke message.clj 190]
  [clojure.lang.RestFn invoke RestFn.java 410]
  [clojure_mail.aa$message_removed_event invoke aa.clj 28]
  [clojure.core$comp$fn__4495 invoke core.clj 2438]
  [clojure_mail.events$message_count_listener$reify__5592 messagesRemoved events.clj 22]
  [javax.mail.event.MessageCountEvent dispatch MessageCountEvent.java 155]
  [javax.mail.EventQueue run EventQueue.java 166]
  [java.lang.Thread run Thread.java 745]]} #error {
 :cause [Ljavax.mail.Message; cannot be cast to javax.mail.internet.MimeMessage
 :via
 [{:type java.lang.ClassCastException
   :message [Ljavax.mail.Message; cannot be cast to javax.mail.internet.MimeMessage
   :at [clojure_mail.message$subject invoke message.clj 46]}]
 :trace
 [[clojure_mail.message$subject invoke message.clj 46]
  [clojure_mail.message$add_field invoke message.clj 162]
  [clojure.core$partial$fn__4527 invoke core.clj 2495]
  [clojure.lang.PersistentHashMap$NodeSeq kvreduce PersistentHashMap.java 1303]
  [clojure.lang.PersistentHashMap$BitmapIndexedNode kvreduce PersistentHashMap.java 796]
  [clojure.lang.PersistentHashMap kvreduce PersistentHashMap.java 236]
  [clojure.core$fn__6713 invoke core.clj 6536]
  [clojure.core.protocols$fn__6531$G__6526__6540 invoke protocols.clj 174]
  [clojure.core$reduce_kv invoke core.clj 6562]
  [clojure_mail.message$read_message doInvoke message.clj 190]
  [clojure.lang.RestFn invoke RestFn.java 410]
  [clojure_mail.aa$message_removed_event invoke aa.clj 28]
  [clojure.core$comp$fn__4495 invoke core.clj 2438]
  [clojure_mail.events$message_count_listener$reify__5592 messagesRemoved events.clj 22]
  [javax.mail.event.MessageCountEvent dispatch MessageCountEvent.java 155]
  [javax.mail.EventQueue run EventQueue.java 166]
  [java.lang.Thread run Thread.java 745]]} #error {
 :cause No matching field found: getContentType for class [Ljavax.mail.Message;
 :via
 [{:type java.lang.IllegalArgumentException
   :message No matching field found: getContentType for class [Ljavax.mail.Message;
   :at [clojure.lang.Reflector getInstanceField Reflector.java 271]}]
 :trace
 [[clojure.lang.Reflector getInstanceField Reflector.java 271]
  [clojure.lang.Reflector invokeNoArgInstanceMember Reflector.java 315]
  [clojure_mail.message$content_type invoke message.clj 73]
  [clojure_mail.message$multipart_QMARK_ invoke message.clj 125]
  [clojure_mail.message$message_body invoke message.clj 154]
  [clojure_mail.message$add_field invoke message.clj 162]
  [clojure.core$partial$fn__4527 invoke core.clj 2495]
  [clojure.lang.PersistentHashMap$NodeSeq kvreduce PersistentHashMap.java 1303]
  [clojure.lang.PersistentHashMap$BitmapIndexedNode kvreduce PersistentHashMap.java 796]
  [clojure.lang.PersistentHashMap kvreduce PersistentHashMap.java 236]
  [clojure.core$fn__6713 invoke core.clj 6536]
  [clojure.core.protocols$fn__6531$G__6526__6540 invoke protocols.clj 174]
  [clojure.core$reduce_kv invoke core.clj 6562]
  [clojure_mail.message$read_message doInvoke message.clj 190]
  [clojure.lang.RestFn invoke RestFn.java 410]
  [clojure_mail.aa$message_removed_event invoke aa.clj 28]
  [clojure.core$comp$fn__4495 invoke core.clj 2438]
  [clojure_mail.events$message_count_listener$reify__5592 messagesRemoved events.clj 22]
  [javax.mail.event.MessageCountEvent dispatch MessageCountEvent.java 155]
  [javax.mail.EventQueue run EventQueue.java 166]
  [java.lang.Thread run Thread.java 745]]} #error {
 :cause No matching field found: getContentType for class [Ljavax.mail.Message;
 :via
 [{:type java.lang.IllegalArgumentException
   :message No matching field found: getContentType for class [Ljavax.mail.Message;
   :at [clojure.lang.Reflector getInstanceField Reflector.java 271]}]
 :trace
 [[clojure.lang.Reflector getInstanceField Reflector.java 271]
  [clojure.lang.Reflector invokeNoArgInstanceMember Reflector.java 315]
  [clojure_mail.message$content_type invoke message.clj 73]
  [clojure_mail.message$multipart_QMARK_ invoke message.clj 125]
  [clojure_mail.message$add_field invoke message.clj 162]
  [clojure.core$partial$fn__4527 invoke core.clj 2495]
  [clojure.lang.PersistentHashMap$NodeSeq kvreduce PersistentHashMap.java 1303]
  [clojure.lang.PersistentHashMap$BitmapIndexedNode kvreduce PersistentHashMap.java 796]
  [clojure.lang.PersistentHashMap kvreduce PersistentHashMap.java 236]
  [clojure.core$fn__6713 invoke core.clj 6536]
  [clojure.core.protocols$fn__6531$G__6526__6540 invoke protocols.clj 174]
  [clojure.core$reduce_kv invoke core.clj 6562]
  [clojure_mail.message$read_message doInvoke message.clj 190]
  [clojure.lang.RestFn invoke RestFn.java 410]
  [clojure_mail.aa$message_removed_event invoke aa.clj 28]
  [clojure.core$comp$fn__4495 invoke core.clj 2438]
  [clojure_mail.events$message_count_listener$reify__5592 messagesRemoved events.clj 22]
  [javax.mail.event.MessageCountEvent dispatch MessageCountEvent.java 155]
  [javax.mail.EventQueue run EventQueue.java 166]
  [java.lang.Thread run Thread.java 745]]} #error {
 :cause No matching field found: getContentType for class [Ljavax.mail.Message;
 :via
 [{:type java.lang.IllegalArgumentException
   :message No matching field found: getContentType for class [Ljavax.mail.Message;
   :at [clojure.lang.Reflector getInstanceField Reflector.java 271]}]
 :trace
 [[clojure.lang.Reflector getInstanceField Reflector.java 271]
  [clojure.lang.Reflector invokeNoArgInstanceMember Reflector.java 315]
  [clojure_mail.message$content_type invoke message.clj 73]
  [clojure_mail.message$add_field invoke message.clj 162]
  [clojure.core$partial$fn__4527 invoke core.clj 2495]
  [clojure.lang.PersistentHashMap$NodeSeq kvreduce PersistentHashMap.java 1303]
  [clojure.lang.PersistentHashMap$BitmapIndexedNode kvreduce PersistentHashMap.java 796]
  [clojure.lang.PersistentHashMap kvreduce PersistentHashMap.java 236]
  [clojure.core$fn__6713 invoke core.clj 6536]
  [clojure.core.protocols$fn__6531$G__6526__6540 invoke protocols.clj 174]
  [clojure.core$reduce_kv invoke core.clj 6562]
  [clojure_mail.message$read_message doInvoke message.clj 190]
  [clojure.lang.RestFn invoke RestFn.java 410]
  [clojure_mail.aa$message_removed_event invoke aa.clj 28]
  [clojure.core$comp$fn__4495 invoke core.clj 2438]
  [clojure_mail.events$message_count_listener$reify__5592 messagesRemoved events.clj 22]
  [javax.mail.event.MessageCountEvent dispatch MessageCountEvent.java 155]
  [javax.mail.EventQueue run EventQueue.java 166]
  [java.lang.Thread run Thread.java 745]]} #error {
 :cause [Ljavax.mail.Message; cannot be cast to javax.mail.internet.MimeMessage
 :via
 [{:type java.lang.ClassCastException
   :message [Ljavax.mail.Message; cannot be cast to javax.mail.internet.MimeMessage
   :at [clojure_mail.message$sender invoke message.clj 51]}]
 :trace
 [[clojure_mail.message$sender invoke message.clj 51]
  [clojure_mail.message$add_field invoke message.clj 162]
  [clojure.core$partial$fn__4527 invoke core.clj 2495]
  [clojure.lang.PersistentHashMap$NodeSeq kvreduce PersistentHashMap.java 1303]
  [clojure.lang.PersistentHashMap$BitmapIndexedNode kvreduce PersistentHashMap.java 796]
  [clojure.lang.PersistentHashMap kvreduce PersistentHashMap.java 236]
  [clojure.core$fn__6713 invoke core.clj 6536]
  [clojure.core.protocols$fn__6531$G__6526__6540 invoke protocols.clj 174]
  [clojure.core$reduce_kv invoke core.clj 6562]
  [clojure_mail.message$read_message doInvoke message.clj 190]
  [clojure.lang.RestFn invoke RestFn.java 410]
  [clojure_mail.aa$message_removed_event invoke aa.clj 28]
  [clojure.core$comp$fn__4495 invoke core.clj 2438]
  [clojure_mail.events$message_count_listener$reify__5592 messagesRemoved events.clj 22]
  [javax.mail.event.MessageCountEvent dispatch MessageCountEvent.java 155]
  [javax.mail.EventQueue run EventQueue.java 166]
  [java.lang.Thread run Thread.java 745]]} #error {
 :cause No matching field found: getMessageID for class [Ljavax.mail.Message;
 :via
 [{:type java.lang.IllegalArgumentException
   :message No matching field found: getMessageID for class [Ljavax.mail.Message;
   :at [clojure.lang.Reflector getInstanceField Reflector.java 271]}]
 :trace
 [[clojure.lang.Reflector getInstanceField Reflector.java 271]
  [clojure.lang.Reflector invokeNoArgInstanceMember Reflector.java 315]
  [clojure_mail.message$id invoke message.clj 100]
  [clojure_mail.message$add_field invoke message.clj 162]
  [clojure.core$partial$fn__4527 invoke core.clj 2495]
  [clojure.lang.PersistentHashMap$NodeSeq kvreduce PersistentHashMap.java 1303]
  [clojure.lang.PersistentHashMap$BitmapIndexedNode kvreduce PersistentHashMap.java 796]
  [clojure.lang.PersistentHashMap$NodeSeq kvreduce PersistentHashMap.java 1308]
  [clojure.lang.PersistentHashMap$BitmapIndexedNode kvreduce PersistentHashMap.java 796]
  [clojure.lang.PersistentHashMap kvreduce PersistentHashMap.java 236]
  [clojure.core$fn__6713 invoke core.clj 6536]
  [clojure.core.protocols$fn__6531$G__6526__6540 invoke protocols.clj 174]
  [clojure.core$reduce_kv invoke core.clj 6562]
  [clojure_mail.message$read_message doInvoke message.clj 190]
  [clojure.lang.RestFn invoke RestFn.java 410]
  [clojure_mail.aa$message_removed_event invoke aa.clj 28]
  [clojure.core$comp$fn__4495 invoke core.clj 2438]
  [clojure_mail.events$message_count_listener$reify__5592 messagesRemoved events.clj 22]
  [javax.mail.event.MessageCountEvent dispatch MessageCountEvent.java 155]
  [javax.mail.EventQueue run EventQueue.java 166]
  [java.lang.Thread run Thread.java 745]]} #error {
 :cause No matching field found: getFrom for class [Ljavax.mail.Message;
 :via
 [{:type java.lang.IllegalArgumentException
   :message No matching field found: getFrom for class [Ljavax.mail.Message;
   :at [clojure.lang.Reflector getInstanceField Reflector.java 271]}]
 :trace
 [[clojure.lang.Reflector getInstanceField Reflector.java 271]
  [clojure.lang.Reflector invokeNoArgInstanceMember Reflector.java 315]
  [clojure_mail.message$from invoke message.clj 44]
  [clojure_mail.message$add_field invoke message.clj 162]
  [clojure.core$partial$fn__4527 invoke core.clj 2495]
  [clojure.lang.PersistentHashMap$NodeSeq kvreduce PersistentHashMap.java 1303]
  [clojure.lang.PersistentHashMap$BitmapIndexedNode kvreduce PersistentHashMap.java 796]
  [clojure.lang.PersistentHashMap$NodeSeq kvreduce PersistentHashMap.java 1308]
  [clojure.lang.PersistentHashMap$BitmapIndexedNode kvreduce PersistentHashMap.java 796]
  [clojure.lang.PersistentHashMap kvreduce PersistentHashMap.java 236]
  [clojure.core$fn__6713 invoke core.clj 6536]
  [clojure.core.protocols$fn__6531$G__6526__6540 invoke protocols.clj 174]
  [clojure.core$reduce_kv invoke core.clj 6562]
  [clojure_mail.message$read_message doInvoke message.clj 190]
  [clojure.lang.RestFn invoke RestFn.java 410]
  [clojure_mail.aa$message_removed_event invoke aa.clj 28]
  [clojure.core$comp$fn__4495 invoke core.clj 2438]
  [clojure_mail.events$message_count_listener$reify__5592 messagesRemoved events.clj 22]
  [javax.mail.event.MessageCountEvent dispatch MessageCountEvent.java 155]
  [javax.mail.EventQueue run EventQueue.java 166]
  [java.lang.Thread run Thread.java 745]]} #error {
 :cause No matching field found: getReceivedDate for class [Ljavax.mail.Message;
 :via
 [{:type java.lang.IllegalArgumentException
   :message No matching field found: getReceivedDate for class [Ljavax.mail.Message;
   :at [clojure.lang.Reflector getInstanceField Reflector.java 271]}]
 :trace
 [[clojure.lang.Reflector getInstanceField Reflector.java 271]
  [clojure.lang.Reflector invokeNoArgInstanceMember Reflector.java 315]
  [clojure_mail.message$date_received invoke message.clj 66]
  [clojure_mail.message$add_field invoke message.clj 162]
  [clojure.core$partial$fn__4527 invoke core.clj 2495]
  [clojure.lang.PersistentHashMap$NodeSeq kvreduce PersistentHashMap.java 1303]
  [clojure.lang.PersistentHashMap$BitmapIndexedNode kvreduce PersistentHashMap.java 796]
  [clojure.lang.PersistentHashMap kvreduce PersistentHashMap.java 236]
  [clojure.core$fn__6713 invoke core.clj 6536]
  [clojure.core.protocols$fn__6531$G__6526__6540 invoke protocols.clj 174]
  [clojure.core$reduce_kv invoke core.clj 6562]
  [clojure_mail.message$read_message doInvoke message.clj 190]
  [clojure.lang.RestFn invoke RestFn.java 410]
  [clojure_mail.aa$message_removed_event invoke aa.clj 28]
  [clojure.core$comp$fn__4495 invoke core.clj 2438]
  [clojure_mail.events$message_count_listener$reify__5592 messagesRemoved events.clj 22]
  [javax.mail.event.MessageCountEvent dispatch MessageCountEvent.java 155]
  [javax.mail.EventQueue run EventQueue.java 166]
  [java.lang.Thread run Thread.java 745]]} #error {
 :cause No matching field found: getSentDate for class [Ljavax.mail.Message;
 :via
 [{:type java.lang.IllegalArgumentException
   :message No matching field found: getSentDate for class [Ljavax.mail.Message;
   :at [clojure.lang.Reflector getInstanceField Reflector.java 271]}]
 :trace
 [[clojure.lang.Reflector getInstanceField Reflector.java 271]
  [clojure.lang.Reflector invokeNoArgInstanceMember Reflector.java 315]
  [clojure_mail.message$date_sent invoke message.clj 61]
  [clojure_mail.message$add_field invoke message.clj 162]
  [clojure.core$partial$fn__4527 invoke core.clj 2495]
  [clojure.lang.PersistentHashMap$NodeSeq kvreduce PersistentHashMap.java 1303]
  [clojure.lang.PersistentHashMap$BitmapIndexedNode kvreduce PersistentHashMap.java 796]
  [clojure.lang.PersistentHashMap kvreduce PersistentHashMap.java 236]
  [clojure.core$fn__6713 invoke core.clj 6536]
  [clojure.core.protocols$fn__6531$G__6526__6540 invoke protocols.clj 174]
  [clojure.core$reduce_kv invoke core.clj 6562]
  [clojure_mail.message$read_message doInvoke message.clj 190]
  [clojure.lang.RestFn invoke RestFn.java 410]
  [clojure_mail.aa$message_removed_event invoke aa.clj 28]
  [clojure.core$comp$fn__4495 invoke core.clj 2438]
  [clojure_mail.events$message_count_listener$reify__5592 messagesRemoved events.clj 22]
  [javax.mail.event.MessageCountEvent dispatch MessageCountEvent.java 155]
  [javax.mail.EventQueue run EventQueue.java 166]
  [java.lang.Thread run Thread.java 745]]} #error {
 :cause [Ljavax.mail.Message; cannot be cast to javax.mail.internet.MimeMessage
 :via
 [{:type java.lang.ClassCastException
   :message [Ljavax.mail.Message; cannot be cast to javax.mail.internet.MimeMessage
   :at [clojure_mail.message$message_headers invoke message.clj 114]}]
 :trace
 [[clojure_mail.message$message_headers invoke message.clj 114]
  [clojure_mail.message$add_field invoke message.clj 162]
  [clojure.core$partial$fn__4527 invoke core.clj 2495]
  [clojure.lang.PersistentHashMap$NodeSeq kvreduce PersistentHashMap.java 1303]
  [clojure.lang.PersistentHashMap$BitmapIndexedNode kvreduce PersistentHashMap.java 796]
  [clojure.lang.PersistentHashMap$NodeSeq kvreduce PersistentHashMap.java 1308]
  [clojure.lang.PersistentHashMap$BitmapIndexedNode kvreduce PersistentHashMap.java 796]
  [clojure.lang.PersistentHashMap kvreduce PersistentHashMap.java 236]
  [clojure.core$fn__6713 invoke core.clj 6536]
  [clojure.core.protocols$fn__6531$G__6526__6540 invoke protocols.clj 174]
  [clojure.core$reduce_kv invoke core.clj 6562]
  [clojure_mail.message$read_message doInvoke message.clj 190]
  [clojure.lang.RestFn invoke RestFn.java 410]
  [clojure_mail.aa$message_removed_event invoke aa.clj 28]
  [clojure.core$comp$fn__4495 invoke core.clj 2438]
  [clojure_mail.events$message_count_listener$reify__5592 messagesRemoved events.clj 22]
  [javax.mail.event.MessageCountEvent dispatch MessageCountEvent.java 155]
  [javax.mail.EventQueue run EventQueue.java 166]
  [java.lang.Thread run Thread.java 745]]} #error {
 :cause [Ljavax.mail.Message; cannot be cast to javax.mail.internet.MimeMessage
 :via
 [{:type java.lang.ClassCastException
   :message [Ljavax.mail.Message; cannot be cast to javax.mail.internet.MimeMessage
   :at [clojure_mail.message$recipients invoke message.clj 24]}]
 :trace
 [[clojure_mail.message$recipients invoke message.clj 24]
  [clojure_mail.message$bcc invoke message.clj 40]
  [clojure_mail.message$add_field invoke message.clj 162]
  [clojure.core$partial$fn__4527 invoke core.clj 2495]
  [clojure.lang.PersistentHashMap$NodeSeq kvreduce PersistentHashMap.java 1303]
  [clojure.lang.PersistentHashMap$BitmapIndexedNode kvreduce PersistentHashMap.java 796]
  [clojure.lang.PersistentHashMap$NodeSeq kvreduce PersistentHashMap.java 1308]
  [clojure.lang.PersistentHashMap$BitmapIndexedNode kvreduce PersistentHashMap.java 796]
  [clojure.lang.PersistentHashMap kvreduce PersistentHashMap.java 236]
  [clojure.core$fn__6713 invoke core.clj 6536]
  [clojure.core.protocols$fn__6531$G__6526__6540 invoke protocols.clj 174]
  [clojure.core$reduce_kv invoke core.clj 6562]
  [clojure_mail.message$read_message doInvoke message.clj 190]
  [clojure.lang.RestFn invoke RestFn.java 410]
  [clojure_mail.aa$message_removed_event invoke aa.clj 28]
  [clojure.core$comp$fn__4495 invoke core.clj 2438]
  [clojure_mail.events$message_count_listener$reify__5592 messagesRemoved events.clj 22]
  [javax.mail.event.MessageCountEvent dispatch MessageCountEvent.java 155]
  [javax.mail.EventQueue run EventQueue.java 166]
  [java.lang.Thread run Thread.java 745]]} #error {
 :cause [Ljavax.mail.Message; cannot be cast to javax.mail.internet.MimeMessage
 :via
 [{:type java.lang.ClassCastException
   :message [Ljavax.mail.Message; cannot be cast to javax.mail.internet.MimeMessage
   :at [clojure_mail.message$recipients invoke message.clj 24]}]
 :trace
 [[clojure_mail.message$recipients invoke message.clj 24]
  [clojure_mail.message$cc invoke message.clj 35]
  [clojure_mail.message$add_field invoke message.clj 162]
  [clojure.core$partial$fn__4527 invoke core.clj 2495]
  [clojure.lang.PersistentHashMap$NodeSeq kvreduce PersistentHashMap.java 1303]
  [clojure.lang.PersistentHashMap$BitmapIndexedNode kvreduce PersistentHashMap.java 796]
  [clojure.lang.PersistentHashMap kvreduce PersistentHashMap.java 236]
  [clojure.core$fn__6713 invoke core.clj 6536]
  [clojure.core.protocols$fn__6531$G__6526__6540 invoke protocols.clj 174]
  [clojure.core$reduce_kv invoke core.clj 6562]
  [clojure_mail.message$read_message doInvoke message.clj 190]
  [clojure.lang.RestFn invoke RestFn.java 410]
  [clojure_mail.aa$message_removed_event invoke aa.clj 28]
  [clojure.core$comp$fn__4495 invoke core.clj 2438]
  [clojure_mail.events$message_count_listener$reify__5592 messagesRemoved events.clj 22]
  [javax.mail.event.MessageCountEvent dispatch MessageCountEvent.java 155]
  [javax.mail.EventQueue run EventQueue.java 166]
  [java.lang.Thread run Thread.java 745]]})}

The environment I use is OpenJDK 8, Leiningen, Clojure 1.8 and latest version of clojure-mail.

Gmail IMAPS behaviour

Hi there,

So, I don't claim to know a great deal about IMAPS so I'm willing to have my understanding amended.
I found clojure-mail because I want to do some processing on emails received at a GMail address, ideally as soon as they arrive.

Straight off, I just tried the "Watching a folder" example from the README, putting in my own credentials. A few errors later and I figured out it needed a) IMAP support and b) 'Less secure app' support both to be enabled in GMail. After that, no errors but no events being received despite sending e-mails to the address. And I have no idea how to debug it.

Next attempt was just to try and get the unread messages out of the inbox. This was successful, until I put the process in a loop with a 3 second delay. After roughly 10-15 successful reports of unread mail count, it hangs indefinitely.

Is there something I can do to either fix either of these approaches? Thanks for any advice you can give me

watching imap silently fails upon network disconnection

Depending upon time disconnected it will either just silently miss events during disconnection and resume working or silently fail to connect but report that it is still functioning.

Is there a way to make it fail as soon as it is no longer connected?

I see https://javaee.github.io/javamail/docs/api/com/sun/mail/imap/package-summary.html

lists

mail.imap.connectiontimeout | int | Socket connection timeout value in milliseconds. This timeout is implemented by java.net.Socket. Default is infinite timeout.

mail.imap.timeout | int | Socket read timeout value in milliseconds. This timeout is implemented by java.net.Socket. Default is infinite timeout.

But either I'm setting them incorrectly or the end result is not as desired. It would be nice if clojure-mail exposed an option to set a timeout and a function to call on timeout.

Cail

Investigate using the Cail library for message parsing.

does it support Importance header?

Hi, does it support Importance header, like:
$headers .= "X-Priority: 1 (Higuest)\n";
$headers .= "X-MSMail-Priority: High\n";
$headers .= "Importance: High\n";

so I can flag the email high priority

Thanks!

Issue with HTML parser?

I can call

(org.jsoup.Jsoup/parse "foo" "UTF-8")

just fine in a REPL in the project, but I get

(html->text (:body (first (inbox 1)) ))

IllegalArgumentException No matching method found: parse  clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:80)

when trying to use html->text

Missing Received headers

Some header fields like "Received" appear are more than one time in a mail header. So, a Hash is not a good idea to put in the header fields. This results in missing "Received" fields, because the key is unique.

Example:

E-Mail

Return-Path: <[email protected]>
X-Original-To: [email protected]
Delivered-To: [email protected]
Received: by remote.gridbag.net (Postfix, from userid 5001)
    id 1A4894E0698; Fri,  2 Oct 2015 16:46:50 +0200 (CEST)
X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on
    lvps83-169-3-141.dedicated.hosteurope.de
X-Spam-Level: 
X-Spam-Status: No, score=-0.7 required=6.0 tests=RCVD_IN_DNSWL_LOW,
    URIBL_BLOCKED autolearn=unavailable version=3.3.1
Received: from vwp11863.webpack.hosteurope.de (vwp11863.webpack.hosteurope.de [91.250.70.227])
    (using TLSv1 with cipher AES256-SHA (256/256 bits))
    (No client certificate requested)
    by remote.gridbag.net (Postfix) with ESMTPS id D676F4E0613
    for <[email protected]>; Fri,  2 Oct 2015 16:46:49 +0200 (CEST)
Received: from pd95c6860.dip0.t-ipconnect.de ([217.92.104.96] helo=[192.168.20.12]); authenticated
    by vwp11863.webpack.hosteurope.de running ExIM with esmtpsa (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16)
    id 1Zi1bi-0006zp-VF; Fri, 02 Oct 2015 16:46:47 +0200

Parser result:

...., "Received" "from pd95c6860.dip0.t-ipconnect.de ([217.92.104.96] helo=[192.168.20.12]); authenticated\r\n\tby vwp11863.webpack.hosteurope.de running ExIM with esmtpsa (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16)\r\n\tid 1Zi1bi-0006zp-VF; Fri, 02 Oct 2015 16:46:47 +0200",  ....

Unable to find static field: SIZE in class javax.mail.FetchProfile$Item

1. Caused by java.lang.RuntimeException
   Unable to find static field: SIZE in class javax.mail.FetchProfile$Item


2. Unhandled clojure.lang.Compiler$CompilerException
   Error compiling clojure_mail/folder.clj at (64:14)
   #:clojure.error{:phase :compile-syntax-check,
                   :line 64,
                   :column 14,
                   :source "clojure_mail/folder.clj"}
 java -version
openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)
org.clojure/clojure {:mvn/version "1.10.0"}
io.forward/clojure-mail {:mvn/version "1.0.7"}

Folder support?

I can get a list of folders with (clojure-mail.core/folders clojure-mail.core/*store*) but I'm having trouble accessing anything other than the ones in the gmail-folder-names keywords. I know that (open-folder) restricts access to only those folders, but it looks like there's no support in clojure-mail for accessing other folders?

Handling errors when opening store

Hi,

I've been having a problem when dealing with a store failing to open. I want to a) get the error message and b) know it's an error. At the moment a failure to open a store returns a string. I could test the type that is returned but I feel it's quite clunky and a bit old skool. To me the options are:

  1. Don't catch the error
  2. Use some sort of Either type
  3. Log the error and return nil

Currently I think I would prefer to not catch the error; opening the store is something that I would expect to be done quite early on, for example I open a store in my main method. I would be happy to catch the Exception along with any other possibles as I start my program as it is a fatal error. What do you think? Let me know and I can create a PR.

Allow connecting to non-standard ports

Hi,

It would be useful to be able to specify the server port when creating the store. As a nice byproduct, this will make possible to create integration tests with Greenmail.

How to maintain the store function as backwards compatible is another story. Having it as multi-arity makes this a small challenge. As a suggestion, to specify the port, the server parameter could be passed as a vector [host port]. If passed as a String, the default ones would be used.

Thanks and regards.

greenmail fixture helpers in source

Greenmail helpers are in the test-directory. This means: they are not present in the maven repo. It would be really nice to have the helper functions for integration testing in the src-directory somewhere (probably under clojure-mail/testing or something). A testing-library does fit in the main project files, imho.

README

There are several issues when I try to run this project. For one, a while now, I haven't been able to connect to Google GMail via IMAP. I had to resort to OAuth2 Java service api libs for my gmail connection. Same here, I get bounced with invalid credentials (they aren't I'm sure and have been using them non-stop these two days with webdriver to automate oauth2 consent click.

Second thing is that the readme, at least in my case again, naming a var def store while already having a name like that in your project results in conflicts. So I renamed to store-1 before I could get invalid credentials anyway.

Third, inbox doesn't work but I guess this is due to credentials...

Anyway my question really should be: does anyone have this working without fully disabling gmail account security (less secure apps) or is that always a result that comes with this approach...

No matching field found: getContent for class javax.mail.internet.MimeMultipart

In message-body, the msg->map function is mapped over the message-parts of the message, doing .getContentType and .getContent. The message-parts of my message consists of one MimeMultipart and some IMAPBodyParts:

(#<MimeMultipart javax.mail.internet.MimeMultipart@9d8085d>
 #<IMAPBodyPart com.sun.mail.imap.IMAPBodyPart@580d79c0>
 #<IMAPBodyPart com.sun.mail.imap.IMAPBodyPart@389ba695>
 #<IMAPBodyPart com.sun.mail.imap.IMAPBodyPart@20a489bb>
 #<IMAPBodyPart com.sun.mail.imap.IMAPBodyPart@69f7f712>
 #<IMAPBodyPart com.sun.mail.imap.IMAPBodyPart@5a875095>)

The problem is that javax.mail.internet.MimeMultipart doesn't have a getContent. I get this:

java.lang.IllegalArgumentException: No matching field found: getContent for class javax.mail.internet.MimeMultipart
       Reflector.java:271 clojure.lang.Reflector.getInstanceField
       Reflector.java:315 clojure.lang.Reflector.invokeNoArgInstanceMember
          message.clj:124 clojure-mail.message/msg->map
...

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.