The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  вход/выход  слежка  RSS
"Регулярка для замены части строки в заголовке сообщения"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Почта / Linux)
Изначальное сообщение [ Отслеживать ]

"Регулярка для замены части строки в заголовке сообщения"  –2 +/
Сообщение от rafaello email(ok) on 22-Окт-16, 17:10 
Здравствуйте!
Необходимо заменить часть строки в заголовке сообщения postfix.
Не хватает знаний в регулярных выражениях, прошу помощи!
Надо заголовок:
Received: from mysite.ru (snd1.mysite.ru [95.ххх.224.235])
    by snd1.mysite.ru (Postfix) with ESMTP id CCF64C02B4
    for <putevka.xxxxxxx@yandex.ru>; Sat, 22 Oct 2016 15:16:02 +0300 (MSK)

заменить на:
Received: by mx.mysite.ru (Postfix, from userid 0)
    id 9095FC0240; Sat, 22 Oct 2016 14:56:23 +0300 (MSK)

Причем, в заменяемом заголовке могут быть как domain.com, так и sub.domain.com
Также, некоторые почтовые провайдеры (гугл например) пишут строку без переносов, вот так:
Received: from mysite.ru (snd1.mysite.ru [95.ххх.224.235]) by snd1.mysite.ru (Postfix) with ESMTP id CCF64C02B4 for <putevka.xxxxxxx@yandex.ru>; Sat, 22 Oct 2016 15:16:02 +0300 (MSK)

В итоге, необходимо просто удалить из строки следующие слова:
from mysite.ru (snd1.mysite.ru [95.ххх.224.235])
with ESMTP
for <putevka.xxxxxxx@yandex.ru>
Пожалуйста помогите составить регулярное выражение для файла regexp:/etc/postfix/header_checks
ххххх REPLACE ххххх

для наглядности выделил жирным то, что надо удалить:

Received: from mysite.ru (snd1.mysite.ru [95.ххх.224.235])
    by snd1.mysite.ru (Postfix) with ESMTP id CCF64C02B4
    for <putevka.xxxxxxx@yandex.ru>; Sat, 22 Oct 2016 15:16:02 +0300 (MSK)

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Регулярка для замены части строки в заголовке сообщения"  +1 +/
Сообщение от Pahanivo (ok) on 22-Окт-16, 19:25 
зачем?!
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Регулярка для замены части строки в заголовке сообщения"  –2 +/
Сообщение от rafaello email(ok) on 22-Окт-16, 21:31 
> зачем?!

Основная головная боль последние две недели - это часть писем идет в папку спам на gmail.com.
Первая прога для отправки писем сидит на одном из экземпляре постфикс-мульти и коннектится к нему через smtp-авторизацию (без логина и пароля) через сокет @fsockopen();
Есть другая небольшая прога для отправки писем, которая сидит на основном экземпляре постфикс (/usr/sbin/sendmail) по умолчанию.
Я сделал список из 10 мыл на gmail.com и тестировал два варианта отправки.
Первый вариант отсылает 60% в папку спам, а вторая прога, которая шлет по умолчанию - все 100% во входящие.
Причем, для обоих случаев совершенно определенно правильно настроены все Return-Path, PTR, DKIM=pass, SPF=pass, DMARC=pass. Домен в "From", "Reply-To" и "smtp.mailfrom" один и тот же.
Чтобы детально разобраться в этом вопросе я написал обычную функцию mail(); и скурпулезно, буквально по каждой закорючке прописал там заголовки, абсолютно один в один похожие, как формирует Первая прога.
И чтобы вы думали... Функция mail() шлет 100% во входящие, а Первая 50% в спам.
И как раз различия в заголовках заключается в теме моего топика.
Таким макаром, методом тыка я пришел к выводу, что гоше не нравится лишний "Received: from ....", то есть если почта идет напрямую, то он кидает во входящие, а если есть лишние пересылки - то уж извините...
Хочу попробовать применить header_checks = regexp:/etc/postfix/header_checks чтобы окончательно идентифицировать заголовки в обоих вариантах и посмотреть результат этого.


Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Регулярка для замены части строки в заголовке сообщения"  +2 +/
Сообщение от Pahanivo (ok) on 22-Окт-16, 22:40 
snd1.poleznyisovet.ru.  60      IN      MX      10 snd1.poleznyisovet.ru.
poleznyisovet.ru.       60      IN      MX      10 mx.poleznyisovet.ru.
не совсем понял с какого домена через какой мх ходит - проверить на всякий ...
а так читаДь туД: видимо:
https://www.opennet.dev/openforum/vsluhforumID1/82162.html

По поводу нехватки знаний: как я понимаю постфикс понимает PCRE, потратьте 45 минут жизни и изучите их. Поверьте, они того стоят. Просто поверьте. Да и вообще понять что такое регекспы не сложно и не долго.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Регулярка для замены части строки в заголовке сообщения"  +1 +/
Сообщение от universite (ok) on 23-Окт-16, 04:55 

> а так читаДь туД: видимо:
> https://www.opennet.dev/openforum/vsluhforumID1/82162.html
> По поводу нехватки знаний: как я понимаю постфикс понимает PCRE, потратьте 45
> минут жизни и изучите их. Поверьте, они того стоят. Просто поверьте.
> Да и вообще понять что такое регекспы не сложно и не
> долго.

И еще литература:
Гойвертс Я., Левитан С. Регулярные выражения. Сборник рецептов (2009)
Фридл Дж. Регулярные выражения (3-е издание, 2008)
Форта Б. Регулярные выражения. 10 минут на урок (+CD) (2005)

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

6. "Регулярка для замены части строки в заголовке сообщения"  –1 +/
Сообщение от rafaello email(ok) on 23-Окт-16, 08:55 
>> а так читаДь туД: видимо:
>> https://www.opennet.dev/openforum/vsluhforumID1/82162.html
>> По поводу нехватки знаний: как я понимаю постфикс понимает PCRE, потратьте 45
>> минут жизни и изучите их. Поверьте, они того стоят. Просто поверьте.
>> Да и вообще понять что такое регекспы не сложно и не
>> долго.
> И еще литература:
> Гойвертс Я., Левитан С. Регулярные выражения. Сборник рецептов (2009)
> Фридл Дж. Регулярные выражения (3-е издание, 2008)
> Форта Б. Регулярные выражения. 10 минут на урок (+CD) (2005)

Ну что ж, если гора не идет к Магомеду, то Магомед пойдет к горе. Спасибо за предоставленные учебники. Скачал. Буду внедряться....


Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

7. "Регулярка для замены части строки в заголовке сообщения"  +/
Сообщение от Pegasus on 23-Окт-16, 17:53 
> Ну что ж

sed 's/ from.*)//;s/with ESMTP //;s/ for .*;/;/'

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

9. "Регулярка для замены части строки в заголовке сообщения"  +/
Сообщение от Pegasus on 23-Окт-16, 18:32 
>> Ну что ж
> sed 's/ from.*)//;s/with ESMTP //;s/ for .*;/;/'

жадная регулярка, все пожрет до последней скобки

>> Также, некоторые почтовые провайдеры (гугл например) пишут строку без переносов, вот так:

sed 's/ from.*])//;s/with ESMTP //;s/ for .*;/;/'

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

17. "Регулярка для замены части строки в заголовке сообщения"  –1 +/
Сообщение от rafaello email(ok) on 23-Окт-16, 21:51 
>>> Ну что ж
>> sed 's/ from.*)//;s/with ESMTP //;s/ for .*;/;/'
> жадная регулярка, все пожрет до последней скобки
>>> Также, некоторые почтовые провайдеры (гугл например) пишут строку без переносов, вот так:
> sed 's/ from.*])//;s/with ESMTP //;s/ for .*;/;/'

Спасибо за оказанную помощь!
Но мне надо было готовое решение в виде файла /etc/postfix/header_checks
а чтобы перевести ваш пример в удобоваримый файл для postfix надо понимать смысл происходящего.
Так что для меня сейчас самое лучшее - это учебник "Форта Б. Регулярные выражения. 10 минут на урок "
Но все равно, спасибо!


Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

5. "Регулярка для замены части строки в заголовке сообщения"  –1 +/
Сообщение от rafaello email(ok) on 23-Окт-16, 08:54 
> snd1.poleznyisovet.ru.  60      IN    
>   MX      10 snd1.poleznyisovet.ru.
> poleznyisovet.ru.       60    
>  IN      MX    
>   10 mx.poleznyisovet.ru.
> не совсем понял с какого домена через какой мх ходит - проверить
> на всякий ...

Для меня остается тайной за семью печатями, откуда вы взяли домен poleznyisovet.ru, ведь я не публиковал его...

> а так читаДь туД: видимо:
> https://www.opennet.dev/openforum/vsluhforumID1/82162.html

В приведенном примере применяется IGNORE , то есть удаляется вся строка, а мне надо удалить часть строки, REPLACE

> По поводу нехватки знаний: как я понимаю постфикс понимает PCRE, потратьте 45
> минут жизни и изучите их. Поверьте, они того стоят. Просто поверьте.
> Да и вообще понять что такое регекспы не сложно и не
> долго.

мой постфикс собран без поддержки PCRE. А что касается повышения знаний, так согласен с этим полностью.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

8. "Регулярка для замены части строки в заголовке сообщения"  –1 +/
Сообщение от rafaello email(ok) on 23-Окт-16, 18:00 
Специалисты по регуляркам, пожалуста отзовитесь!
Скачал вышеуказанные учебники. Изучаю вторые сутки. Больше всех понравился учебник "Форта Б. Регулярные выражения. 10 минут на урок "
Стал что то понимать.
Я понял как найти по определенному шаблону (регулярке) определенный(е) слова/куски текста. Одно никак в мою голову не влезает. Это касается именно использования REPLACE в файле regexp:/etc/postfix/header_checks. Ведь в PHP вроде как понятно, функция preg_replace() находит и заменяет необходимые куски текста и возвращает первоначальный текст с измененными участками.
Однако в случае с postfix совершенно другое дело. Здесь не возвращается первоначальный текст, а его надо явно указывать.
Например, мой случай, расписанный вначале этого топика. Одна длинная строка содержит внутри себя три участка, которые необходимо заменить/удалить и при том, чтобы оставшиеся участки остались без изменения.
Как это осуществить в такой конструкции:  ???
ххххх REPLACE ххххх
Уже башку сломал.

или другими словами: Как после слова REPLACE указать те куски текста, которые не надо изменять?
Вот вытащил из интернета пример

/Message-Id:\s+<(.*?)@hostname>/ REPLACE Message-Id: <$1@domain.tld>

Здесь та часть, котрую не надо изменять обозначена $1
Где найти информацию о том, как сформировать эту самую $1  ?

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

10. "Регулярка для замены части строки в заголовке сообщения"  +/
Сообщение от . on 23-Окт-16, 19:16 
> Где найти информацию о том, как сформировать эту самую $1  ?

ты, что? стебаешься? не надо, это не хорошо
тебе же привели пример

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

11. "Регулярка для замены части строки в заголовке сообщения"  –1 +/
Сообщение от rafaello email(ok) on 23-Окт-16, 19:22 
>> Где найти информацию о том, как сформировать эту самую $1  ?
> ты, что? стебаешься? не надо, это не хорошо
> тебе же привели пример

Есть люди, которые возомнили из себя седьмое чудо света и их нос выше останкинской телевышки. А есть люди простые, которые просто подскажут: "Дорогой, ищи информацию как сделать ссылки и внутренние переменные". Так поднимем бокалы за простых людей!!!


Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

12. "Регулярка для замены части строки в заголовке сообщения"  +1 +/
Сообщение от Аноним (??) on 23-Окт-16, 19:38 
> Так поднимем бокалы

алкоголь - яд
мозг атрофируется


Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

13. "Регулярка для замены части строки в заголовке сообщения"  –2 +/
Сообщение от rafaello email(ok) on 23-Окт-16, 19:42 
>> Так поднимем бокалы
> алкоголь - яд
> мозг атрофируется

а где было сказано, что в бокалах алкоголь????
На воре шапка горит!!!!

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

14. "Регулярка для замены части строки в заголовке сообщения"  +/
Сообщение от Аноним (??) on 23-Окт-16, 19:52 
> На воре шапка горит!!!!

нет. я не пью

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

15. "Регулярка для замены части строки в заголовке сообщения"  –2 +/
Сообщение от rafaello email(ok) on 23-Окт-16, 20:04 
Какой чудесный учебник "Форта Б. Регулярные выражения. 10 минут на урок"
До того, увидев регулярки у меня портилось настроение, а сейчас, с прочтением каждой страницы мне все больше и больше нравятся эти регулярные выражения.


Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

16. "Регулярка для замены части строки в заголовке сообщения"  +/
Сообщение от Аноним (??) on 23-Окт-16, 20:08 
> Какой чудесный учебник "Форта Б. Регулярные выражения. 10 минут на урок"
> До того, увидев регулярки у меня портилось настроение, а сейчас, с прочтением
> каждой страницы мне все больше и больше нравятся эти регулярные выражения.

молодец
клеточки серого вещества твоего головного мозга начинают работать


Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

18. "Регулярка для замены части строки в заголовке сообщения"  +1 +/
Сообщение от Pahanivo (ok) on 23-Окт-16, 23:42 
>> snd1.poleznyisovet.ru.  60      IN
>>   MX      10 snd1.poleznyisovet.ru.
>> poleznyisovet.ru.       60
>>  IN      MX
>>   10 mx.poleznyisovet.ru.
>> не совсем понял с какого домена через какой мх ходит - проверить
>> на всякий ...
> Для меня остается тайной за семью печатями, откуда вы взяли домен poleznyisovet.ru,
> ведь я не публиковал его...

Ок. Воскресенье, я пьяный и добрый ... меня всегда смешило когда люди говоря про реверсы DNS, скрывают один октет.
Следите за руками ...
1) IP почтовика был засвечен без одного октета 95.ххх.224.235, т.е. сервак один из 255 вариантов, и самое главное уникальная часть доменного имени snd1.mysite.ru. Далее все элементарно ... если вы не совсем ламер, должен быть такой же реверс, ибо таки почтовик.
2) Открываем ексель (проклятый микрософтовский софт), пишем в первой строке 1, во второй пишем =А1+1. Растягиваем до 255 строки и получаем последовательность ячеек со значениями 1-255.
3) Копируем столбец и вставляем в мой любимый notepad++ (и вот тут собственно то, зачем я начал продолжил топ, он умеет PCRE!). Жмем Ctrl+H и забиваем в первую строку
"(.*)", а во вторую "host 95.\1.224.235" (домашнее задание объяснить зачем в первом выражении скобки).
4) Копипастим полученный текст в файл через консоль сервака скажем scr.sh, читаем заклинания chmod 700 scr.sh, scr.sh > res, grep snd1 res.
5) Вывод дал только одно совпадение - профит!
На все про все - полторы минуты, дольше всего ждать пока скрипт из 255 запросов будет тупить по таймауту на несуществующих записях.
Это не фокус - это просто.

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

19. "Регулярка для замены части строки в заголовке сообщения"  +/
Сообщение от DeerFriend on 24-Окт-16, 02:24 
Слишком сложно.
Вот однострок
for i in {1..255}; do host 95.${i}.224.235; done | grep snd1
Ответить | Правка | ^ к родителю #18 | Наверх | Cообщить модератору

20. "Регулярка для замены части строки в заголовке сообщения"  +/
Сообщение от Pahanivo (ok) on 24-Окт-16, 20:18 
> Слишком сложно.
> Вот однострок
> for i in {1..255}; do host 95.${i}.224.235; done | grep snd1

урок был несколько другого уровня :)

Ответить | Правка | ^ к родителю #19 | Наверх | Cообщить модератору

21. "Регулярка для замены части строки в заголовке сообщения"  +/
Сообщение от DeerFriend on 24-Окт-16, 22:59 
>> Слишком сложно.
>> Вот однострок
>> for i in {1..255}; do host 95.${i}.224.235; done | grep snd1
> урок был несколько другого уровня :)

Тогда почему в алгоритме отсутствуют установка виндузей, офиса, нотепадплюсплюса и пр.?

Ответить | Правка | ^ к родителю #20 | Наверх | Cообщить модератору

22. "Регулярка для замены части строки в заголовке сообщения"  –1 +/
Сообщение от rafaello email(ok) on 25-Окт-16, 09:14 

>[оверквотинг удален]
> собственно то, зачем я начал продолжил топ, он умеет PCRE!). Жмем
> Ctrl+H и забиваем в первую строку
> "(.*)", а во вторую "host 95.\1.224.235" (домашнее задание объяснить зачем в первом
> выражении скобки).
> 4) Копипастим полученный текст в файл через консоль сервака скажем scr.sh, читаем
> заклинания chmod 700 scr.sh, scr.sh > res, grep snd1 res.
> 5) Вывод дал только одно совпадение - профит!
> На все про все - полторы минуты, дольше всего ждать пока скрипт
> из 255 запросов будет тупить по таймауту на несуществующих записях.
> Это не фокус - это просто.

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


Ответить | Правка | ^ к родителю #18 | Наверх | Cообщить модератору

23. "Регулярка для замены части строки в заголовке сообщения"  +/
Сообщение от Pahanivo (ok) on 25-Окт-16, 20:36 

> Понял! Спасибо за предоставленный урок.
> Проделывать все это я не буду, потому что мне это не надо,
> но смысл я понял.
> Что касается вопроса "зачем в первом выражении скобки", то после прочтения учебника
> горизонты моих познаний в регулярных выражениях расширились и могу предположить, что
> скобки - это выражение или подвыражение, на которое потом можно ставить
> ссылку, как на переменную.

Самое главное что умеете читать. А то судя по последним тенденциям многи это так и не могут осилить.
ПыСы: что-что, а что почитать тут всегда подскажут :)

Ответить | Правка | ^ к родителю #22 | Наверх | Cообщить модератору

24. "Регулярка для замены части строки в заголовке сообщения"  +/
Сообщение от rafaello email(ok) on 03-Ноя-16, 10:42 
Тут по ходу дела возник один вопрос.
Буду благодарен за подсказку.
Правильно или нет, но я сам написал регулярку для замены заголовка письма в postfix, которую сам обозначил вначале этого топика и она работает. Вот она:
/^Received: from (.*)\)(\r|\r\n)*\s+(by (.*)\)) (.*)\s(id \w+)(\r|\r\n)*\s+(.*);(.*)/  REPLACE Received: $3 ${6};${9}

В результате я получаю одну строку:
Received: by mx.mysite.ru (Postfix, from userid 0) id 9095FC0240; Sat, 22 Oct 2016 14:56:23 +0300 (MSK)

вопрос.
как сделать, то есть что писать после слова REPLACE Received: чтобы получаемое выражение имело перенос строки:
Received: by mx.mysite.ru (Postfix, from userid 0)
    id 9095FC0240; Sat, 22 Oct 2016 14:56:23 +0300 (MSK)

пытался вставлять между $3 ${6} \n, "\n", но это не помогает, а просто печатает как есть.


Ответить | Правка | ^ к родителю #23 | Наверх | Cообщить модератору

25. "Регулярка для замены части строки в заголовке сообщения"  +/
Сообщение от Bootmen (ok) on 15-Ноя-16, 15:39 
Может так:
/^Received: from .*\s+(by (.*)\)) (.*)\s(id \w+).*\s+(.*);(.*)/m  REPLACE Received: $3 ${6};${9}

Ответить | Правка | ^ к родителю #24 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру