LINUX.ORG.RU
ФорумAdmin

Миграция от procmail.rc к sieve: проблемы

 ,


0

2

Здравствуйте.

Имеется procmailrc примерно с таким содержимым:

:0
* ^From one-two
{
        :0 B
        * ^Subject: WOW
        /dev/null
}

Он ищет в письме наличие заголовка From с соответствующим содержимым и проверяет, есть ли также в теле письма строка, начинающаяся с Subject.

Если написать на Sieve что-то типа (для начала):

if body :regex "^Subject: WOW" {
  discard;
  stop;
}

то ничего не находится, почему-то регулярка не срабатывает. Варианты с

if body :regex "Subject: WOW"

или

if body :contains "Subject: WOW"

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

Когда сохранил письмо и проверил локально нужной регуляркой («^Subject…») его содержимое, то текст выцепился.

Получается, что проблема в том, что почему-то BODY самим Sieve интерпретируется не построчно.

Кто как решал данную проблему?


А зачем ты боди парсишь, если тебе нужен сабж?

У меня на довкоте есть правила вроде:

if anyof(header :regex ["subject"] ["iXBT BBS"]) {
 fileinto "INBOX/forums/ixbt";
}
Попробуй подобным образом.

blind_oracle ★★★★★
()
Ответ на: комментарий от blind_oracle

Потому что нужный заголовок в теле. Посмотри на код procmail.

Я не жалуюсь на работу с header, речь идёт только и только о body.

HolyBoy
() автор топика
Последнее исправление: HolyBoy (всего исправлений: 1)
Ответ на: комментарий от HolyBoy

«Заголовок в теле» как-то само себе противоречит, не?

Мухи отдельно, котлеты - отдельно. Покажи сообщение с заголовками на котором у тебя не отрабатывает регексп ^Subject:

blind_oracle ★★★★★
()
Ответ на: комментарий от blind_oracle

Да, неудачно сформулировал. Не «заголовок в теле», а «текст, в теле, в т.ч. и совпадающий по форме с заголовками».

Собственно, там может быть любой текст, важно, что он должен распознаваться именно в той позиции, которая задана регулярным выражением. Именно поэтому :matches и :contains применительно к body не подходят.

Основная задача: обработка DSN и прочего такого барахла, где важно смотреть на содержимое body, а не на заголовки.

HolyBoy
() автор топика
Ответ на: комментарий от HolyBoy

Ну может там пробелы или еще что, поэтому и прошу показать текст. А то ^Subject это чётко начало body, а не какой-то строчки в нем.

blind_oracle ★★★★★
()
Ответ на: комментарий от blind_oracle

К примеру, в таком письме

Received: from mxfront35.mail.domain.net ([127.0.0.1])
        by mxfront35.mail.domain.net with LMTP id onB8PkBP
        for <ololo@domain.ru>; Sat, 22 Jun 2013 20:50:49 +0400
Received: from mail1.corp.dom (mail1.corp.dom [5.6.7.8])
        by mxfront35.mail.domain.net (nwsmtp/Yandex) with ESMTP id OTFosaEqC4-onHqoxTG;
        Sat, 22 Jun 2013 20:50:49 +0400
X-Yandex-Front: mxfront35.mail.domain.net
X-Yandex-TimeMark: 1371919849
X-Yandex-Spam: 4
Received: by mail.corp.dom (Postfix)
        id 188C014CF1; Sat, 22 Jun 2013 20:50:49 +0400 (MSK)
Date: Sat, 22 Jun 2013 20:50:49 +0400 (MSK)
From: MAILER-DAEMON@corp.dom (Mail Delivery System)
Subject: Undelivered Mail Returned to Sender
To: ololo@domain.ru
Auto-Submitted: auto-replied
MIME-Version: 1.0
Content-Type: multipart/report; report-type=delivery-status;
        boundary="C44FCCA2F.1371919849/mail.corp.dom"
Content-Transfer-Encoding: 8bit
Message-Id: <20130622165049.188C014CF1@mail.corp.dom>
Return-Path: <>
X-Yandex-Forward: 76104d82b9d5c38d6c8356a5acfe59e6

This is a MIME-encapsulated message.

--C44FCCA2F.1371919849/mail.corp.dom
Content-Description: Notification
Content-Type: text/plain; charset=UTF-8

-[English]-

This is the mail system at host mail.corp.dom.

I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.

For further assistance, please send mail to postmaster.

If you do so, please include this problem report. You can
delete your own text from the attached returned message.

                   The mail system

-[English]-


<username@corp.dom>: host localhost[127.0.0.1] said: 550 5.1.1
    <username@corp.dom> User doesn't exist: username@corp.dom (in reply to
    RCPT TO command)

--C44FCCA2F.1371919849/mail.corp.dom
Content-Description: Delivery report
Content-Type: message/delivery-status

Reporting-MTA: dns; mail.corp.dom
X-Postfix-Queue-ID: C44FCCA2F
X-Postfix-Sender: rfc822; ololo@domain.ru
Arrival-Date: Sat, 22 Jun 2013 20:50:48 +0400 (MSK)

Final-Recipient: rfc822; username@corp.dom
Original-Recipient: rfc822;username@corp.dom
Action: failed
Status: 5.1.1
Remote-MTA: dns; localhost
Diagnostic-Code: smtp; 550 5.1.1 <username@corp.dom> User doesn't exist:
    username@corp.dom

--C44FCCA2F.1371919849/mail.corp.dom
Content-Description: Undelivered Message
Content-Type: message/rfc822
Content-Transfer-Encoding: 8bit

Return-Path: <ololo@domain.ru>
Received: from localhost (localhost [127.0.0.1])
        by mail.corp.dom (Postfix) with ESMTP id C44FCCA2F
        for <username@corp.dom>; Sat, 22 Jun 2013 20:50:48 +0400 (MSK)
X-Virus-Scanned: amavisd-new at corp.dom
Received: from mail.corp.dom ([127.0.0.1])
        by localhost (localhost [127.0.0.1]) (amavisd-new, port 10024)
        with ESMTP id 4dRg0Q68TaqM for <username@corp.dom>;
        Sat, 22 Jun 2013 20:50:33 +0400 (MSK)
Received: from forward13.mail.domain.net (forward13.mail.domain.net [95.108.130.120])
        by mail.corp.dom (Postfix) with ESMTP id 2266014CED
        for <username@corp.dom>; Sat, 22 Jun 2013 20:50:33 +0400 (MSK)
Received: from smtp13.mail.domain.net (smtp13.mail.domain.net [95.108.130.68])
        by forward13.mail.domain.net (Yandex) with ESMTP id 5952C14151B
        for <username@corp.dom>; Sat, 22 Jun 2013 20:50:32 +0400 (MSK)
Received: from smtp13.mail.domain.net (localhost [127.0.0.1])
        by smtp13.mail.domain.net (Yandex) with ESMTP id 3E93DE403BA
        for <username@corp.dom>; Sat, 22 Jun 2013 20:50:32 +0400 (MSK)
Received: from unknown (unknown [1.2.3.4])
        by smtp13.mail.domain.net (nwsmtp/Yandex) with ESMTP id 69YykS7BRc-oV9akQIU;
        Sat, 22 Jun 2013 20:50:32 +0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=domain.ru; s=mail; t=1371919832;
        bh=waTL66sScnqtX0iENyfPqwQLD9rU2mEh8Fd6jG4u6u4=;
        h=Message-ID:Date:From:User-Agent:MIME-Version:To:Subject:
         Content-Type:Content-Transfer-Encoding;
        b=kfQR1yqQ/wkzW5GWKnsl1nOPpUFT3u/1fUUkVDS+vomfuQ+40YSukPoPI0j3Nq9t4
         jMcGH6W/yTUFMWPMGlova/dC/LHJMIxdPDFO+AAz3sKFEAnSinyF/Rx1fD9zo3LGtb
         Dr6LS4zncPrPwNuD1Vj/WtBsQxpeemy8ZCd6Ty+E=
Authentication-Results: smtp13.mail.domain.net; dkim=pass header.i=@domain.ru
Message-ID: <51C5D5D7.7070101@domain.ru>
Date: Sat, 22 Jun 2013 20:50:31 +0400
From: =?UTF-8?B?0JHQsNGB0L7QsiDQldCy0LPQtdC90LjQuQ==?=
 <ololo@domain.ru>
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130531 Thunderbird/17.0.6
MIME-Version: 1.0
To: username@corp.dom
Subject: test
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit



--C44FCCA2F.1371919849/mail.corp.dom--

надо определять одновременно по

Diagnostic-Code: smtp; 550 5.1.1 <username@corp.dom> User doesn't exist:
    username@corp.dom
и по
Action: failed
и не просто выцеплять, как уже писал, а в конкретном месте, чтобы не ошибиться.

И если procmail это сделает без проблем, то в Sieve проблема таки есть.

HolyBoy
() автор топика
Ответ на: комментарий от blind_oracle

Я пробовал регулярку и в виде «^[[:space:]]*text» с таким же, нулевым, результатом. Получается, что body — это одна строка? Хреново.

HolyBoy
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.