Чтение строки содержимого сообщения IMAP с помощью groovy - PullRequest
1 голос
/ 24 мая 2011

Привет, я работаю над своим приложением Grails, в котором я подключаюсь к gmail через imap и жду входящих писем. Когда приходит электронное письмо, мне нужно получить его содержимое, и оно должно быть строкой. Затем мне нужно сопоставить эту строку с регулярным выражением, чтобы получить наиболее ценные данные. Проблема в том, что с этой строкой что-то не так, и она не соответствует моему регулярному выражению, которое я тестировал на обычной многострочной groovy строке, и все работало нормально.

def processMessage(def imapMessage){
  if(message && message instanceof IMAPMessage){
              def content = message.getContent()
              println 'Content ='+ content
              m_mailContent = content
              println 'm_mailContent is ' + m_mailContent
          } 

А потом

def getType(){
       def type = 0 
       if(utility.ParseUtil.matches(m_mailContent, WEB_SERVICE_REGEXP)){
          type = 1
       }else if(utility.ParseUtil.matches(m_mailContent, BNET_REGEXP)){
           type = 2
       }else if(utility.ParseUtil.matches(m_mailContent, QUEUED_REGEXP)){
           type = 3
       }
        return type
    }
But i almost always get type = 0

Возможно, мне нужно что-то сделать с этой строкой. Я понятия не имею, какую строку я получу. При печати все кажется нормально. Конечно, в нем могут быть какие-то специальные символы, но могу ли я их избежать?

def WEB_SERVICE_REGEXP = /.*ErrorID:\s*[A-Za-z\d\/\.-]*\n.*Time:\s*[A-Za-z\d\/\s:]*\n.*URL:\s*[A-Za-z\d\/\.]*\n/

и строка, которую я получаю из gmail, выглядит примерно так

ErrorID:  -732861900
Time:     Tue May 24 09:57:54 CEST 2011
URL:      /transnet/organisation.jsp
HttpCode: 500
Error:    class java.lang.SecurityException: Access denied.
User:     Peter Rådlund (peraa), DHL Express (Sweden) AB
Domain:   DHL Support

Stacktrace
----------------------------------------------------------------------
java.lang.SecurityException: Access denied.
       at com.memnon.transnet.admin.Account.checkUpdate(Account.java:725)
       at com.memnon.transnet.consignment.ConsignmentDB.updateOrganisation(ConsignmentDB.java:152)
       at org.apache.jsp.transnet.organisation_jsp._jspService(organisation_jsp.java:842)
       at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
       at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
       at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
       at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
       at org.apache.catalina.core.A

Я пытаюсь сделать это так

//ParseUtil
static def matches(String str, def regexp){
            def m  = str =~ regexp
            m.find()
        }

Надеюсь, теперь все ясно.

Ответы [ 3 ]

1 голос
/ 26 мая 2011
def WEB_SERVICE_REGEXP = /.*ErrorID:\s*[A-Za-z\d\/\.-]*\n.*Time:\s*[A-Za-z\d\/\s:]*\n.*URL:\s*[A-Za-z\d\/\.]*\n/

и строка, которую я получаю из gmail, выглядит примерно так

ErrorID:  -732861900
Time:     Tue May 24 09:57:54 CEST 2011
URL:      /transnet/organisation.jsp
HttpCode: 500
Error:    class java.lang.SecurityException: Access denied.
User:     Peter Rådlund (peraa), DHL Express (Sweden) AB
Domain:   DHL Support

Stacktrace
----------------------------------------------------------------------
java.lang.SecurityException: Access denied.
       at com.memnon.transnet.admin.Account.checkUpdate(Account.java:725)
       at com.memnon.transnet.consignment.ConsignmentDB.updateOrganisation(ConsignmentDB.java:152)
       at org.apache.jsp.transnet.organisation_jsp._jspService(organisation_jsp.java:842)
       at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
       at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
       at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
       at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
       at org.apache.catalina.core.A

Я пытаюсь сделать это так

//ParseUtil
static def matches(String str, def regexp){
            def m  = str =~ regexp
            m.find()
        }

Надеюсь, теперь все ясно.

Я нашел ответ. В моем регулярном выражении я ищу "\ n" в качестве разрыва строки, и он действительно работает на Java-строках, которые я подделал для проверки синтаксического анализа, но в теле письма от gmail (простой текстовый тип) я должен искать "\ r \ n ». Это работает сейчас! Я так счастлив!

Спасибо за ваши ответы, ребята. Я очень ценю это.

0 голосов
/ 24 мая 2011

Работает ли это, если вы измените WEB_SERVICE_REGEXP на:

def WEB_SERVICE_REGEXP = /(?m)^ErrorID:\s*([A-Za-z0-9\-]+)$[\n]^Time:\s*([A-Za-z\d\/\s:]*)$[\n]^URL:\s*([A-Za-z\d\/\.]*)$/

редактировать

Вот что у меня есть:

def message = '''
ErrorID:  -732861900
Time:     Tue May 24 09:57:54 CEST 2011
URL:      /transnet/organisation.jsp
HttpCode: 500
Error:    class java.lang.SecurityException: Access denied.
User:     Peter Rådlund (peraa), DHL Express (Sweden) AB
Domain:   DHL Support

Stacktrace
----------------------------------------------------------------------
java.lang.SecurityException: Access denied.
       at com.memnon.transnet.admin.Account.checkUpdate(Account.java:725)
       at com.memnon.transnet.consignment.ConsignmentDB.updateOrganisation(ConsignmentDB.java:152)
       at org.apache.jsp.transnet.organisation_jsp._jspService(organisation_jsp.java:842)
       at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
       at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
       at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
       at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
       at org.apache.catalina.core.A'''


def WEB_SERVICE_REGEXP = /(?m)^ErrorID:\s*([A-Za-z0-9\-]+)$[\n]^Time:\s*([A-Za-z\d\/\s:]*)$[\n]^URL:\s*([A-Za-z\d\/\.]*)$/

static def matches( String str, def regexp ){
  def m  = str =~ regexp
  m.find()
}

println matches( message, WEB_SERVICE_REGEXP )

И это печатает

true
0 голосов
/ 24 мая 2011

Изменение:

static def matches(String str, def regexp){
            def m  = str =~ regexp
            m.find()
        }

К:

static def matches(String str, regexp){
       (str =~ regexp)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...