owainlewis / clojure-mail

A Clojure library for parsing, downloading and reading email from IMAP servers.
202 stars 54 forks source link

Exception while reading message from event #55

Closed pmensik closed 7 years ago

pmensik commented 7 years ago

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" "mymail@gmail.com" "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.

pmensik commented 7 years ago

This issue was caused by interfering dependency (Postal) so I am closing it