Добавить заголовок даты на входящее письмо с помощью Sieve - PullRequest
0 голосов
/ 10 сентября 2018

Я ищу способ сделать в Sieve то, что я делал в Procmail в течение многих лет, а именно вставлять однозначный заголовок даты во входящие сообщения, который дает мне понять - независимо от того, похоронен "получен" "заголовки, возможно, с нескольких серверов, и, тем не менее, мой почтовый клиент интерпретирует дату отправки сообщения - когда мой сервер получил сообщение. Вот как я это сделал в Procmail:

# First create the "date_received" variable for my time zone:
date_received=`/bin/date -ud '+2 hour' +'%A %Y-%m-%d %H:%M:%S +0200'`

# Second, insert the header containing the date_received variable:
:0 fh w
| formail -i "X-Local-Date-Received: $date_received"

Я нашел «addheader» ( RFC 5293 ), который, очевидно, добавит заголовок, но из-за чего-то другого я читаю (извините, не помню где), я считаю, что Sieve не будет Запустите команду «date» в оболочке из-за ограничений или намеренного (и понятного) предпочтения не запускать команды оболочки по соображениям безопасности.

Другая, возможно, полезная информация: я делаю это через Roundcube 1.3.6, но у меня есть ощущение ( также из-за того, что я прочитал ), что Roundcube может перезаписать пользовательский набор фильтров Sieve, если я редактирую необработанный код в Roundcube. При необходимости я очень рад отредактировать или создать файл конфигурации Sieve на сервере напрямую, чтобы добиться этого для всех пользователей на сервере, но, запустив Sendmail и Procmail в течение многих лет, я не уверен, что это лучшее место для этого.

EDIT:

В качестве теста в Roundcube я добавил это вверху моего набора фильтров Sieve:

require ["fileinto","editheader"];
# rule:[test editheader]
if true
{
addheader "X-Test-Header" "This is a test header.";
}

На самом деле я не добавил строку "require [" fileinto "," editheader "];"; Я просто добавил «editheader» в существующую строку в верхней части набора фильтров, например:

require ["copy","fileinto","regex","editheader"];

Я ожидаю, что это добавит ...

X-Test-Header: This is a test header.

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

An error occurred.
Unable to save filter. Server error occurred.

Roundcube error editing Sieve filter set.

Поиск этой ошибки возвращает один связанный результат, но решение не опубликовано.

Однако я не собираюсь фокусироваться на Roundcube. Как я уже говорил ранее, я добавлю этот фильтр Sieve из командной строки при необходимости.

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

Вот мой скрипт, который преобразует Received в Date:

require "editheader";
require "regex";
require "variables";

if not exists "Date" { 
    if header :regex "Received" "^from[[:space:]]+.*[[:space:]]+by[[:space:]]+mail.mydomain.com[[:space:]]+with[[:space:]]+.*[[:space:]]+for[[:space:]]+.*;(.*)$" {
        addheader :last "Date" "${1}";
    }
}

Обратите внимание, что mail.mydomain.com является заменой фактического адреса почтового сервера, что означает, что он соответствует заголовку только тогда, когда сообщение было получено на конкретном почтовом сервере. Я сделал эту работу с dovecot-2.3.5.1

0 голосов
/ 04 октября 2018

Расширение заголовка Pigeonhole Sieve Editheader по умолчанию недоступно. Для документации необходимо убедиться, что она добавлена ​​в ваш список расширений сит на сервере:

plugin {
  # Use editheader
  sieve_extensions = +editheader
}

Если вы хотите запускать произвольные сценарии с использованием sieve в Dovecot, как вы можете использовать с procmail, то вы можете использовать плагины внешних программ , настроить в Dovecot, какие внешние программы вы хотите разрешить пользователям, и затем пользователи могут использовать расширение «vnd.dovecot.execute» для запуска этих программ. Возможно, вы сможете использовать это для переноса любых сценариев, которые вы использовали с procmail.

В общем случае цель sieve состоит в том, чтобы пользователи могли настраивать свою собственную фильтрацию почты, в то время как создается впечатление, что вы пытаетесь сделать что-то глобально для сервера. Dovecot должен добавить свой собственный заголовок Received при обработке почты, что является стандартным способом пометки, когда почтовая система получает сообщение, поэтому мне не ясно, почему вы не просто используете это, или какие изменения вы хотите внести к его поведению по умолчанию. Может случиться так, что то, что вы хотите сделать, может быть лучше обработано в вашем почтовом агенте, а не в вашем агенте доставки почты.

...