- Регулярка для замены части строки в заголовке сообщения, Pahanivo, 19:25 , 22-Окт-16 (1) +1
- Регулярка для замены части строки в заголовке сообщения, rafaello, 21:31 , 22-Окт-16 (2) –2
> зачем?!Основная головная боль последние две недели - это часть писем идет в папку спам на 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 чтобы окончательно идентифицировать заголовки в обоих вариантах и посмотреть результат этого.
- Регулярка для замены части строки в заголовке сообщения, Pahanivo, 22:40 , 22-Окт-16 (3) +2
- Регулярка для замены части строки в заголовке сообщения, universite, 04:55 , 23-Окт-16 (4) +1
- Регулярка для замены части строки в заголовке сообщения, rafaello, 08:55 , 23-Окт-16 (6) –1
>> а так читаДь туД: видимо: >> https://www.opennet.ru/openforum/vsluhforumID1/82162.html >> По поводу нехватки знаний: как я понимаю постфикс понимает PCRE, потратьте 45 >> минут жизни и изучите их. Поверьте, они того стоят. Просто поверьте. >> Да и вообще понять что такое регекспы не сложно и не >> долго. > И еще литература: > Гойвертс Я., Левитан С. Регулярные выражения. Сборник рецептов (2009) > Фридл Дж. Регулярные выражения (3-е издание, 2008) > Форта Б. Регулярные выражения. 10 минут на урок (+CD) (2005) Ну что ж, если гора не идет к Магомеду, то Магомед пойдет к горе. Спасибо за предоставленные учебники. Скачал. Буду внедряться....
- Регулярка для замены части строки в заголовке сообщения, Pegasus, 17:53 , 23-Окт-16 (7)
- Регулярка для замены части строки в заголовке сообщения, Pegasus, 18:32 , 23-Окт-16 (9)
- Регулярка для замены части строки в заголовке сообщения, rafaello, 21:51 , 23-Окт-16 (17) –1
>>> Ну что ж >> sed 's/ from.*)//;s/with ESMTP //;s/ for .*;/;/' > жадная регулярка, все пожрет до последней скобки >>> Также, некоторые почтовые провайдеры (гугл например) пишут строку без переносов, вот так: > sed 's/ from.*])//;s/with ESMTP //;s/ for .*;/;/' Спасибо за оказанную помощь! Но мне надо было готовое решение в виде файла /etc/postfix/header_checks а чтобы перевести ваш пример в удобоваримый файл для postfix надо понимать смысл происходящего. Так что для меня сейчас самое лучшее - это учебник "Форта Б. Регулярные выражения. 10 минут на урок " Но все равно, спасибо!
- Регулярка для замены части строки в заголовке сообщения, rafaello, 08:54 , 23-Окт-16 (5) –1
> snd1.poleznyisovet.ru. 60 IN > MX 10 snd1.poleznyisovet.ru. > poleznyisovet.ru. 60 > IN MX > 10 mx.poleznyisovet.ru. > не совсем понял с какого домена через какой мх ходит - проверить > на всякий ...Для меня остается тайной за семью печатями, откуда вы взяли домен poleznyisovet.ru, ведь я не публиковал его... > а так читаДь туД: видимо: > https://www.opennet.ru/openforum/vsluhforumID1/82162.html В приведенном примере применяется IGNORE , то есть удаляется вся строка, а мне надо удалить часть строки, REPLACE > По поводу нехватки знаний: как я понимаю постфикс понимает PCRE, потратьте 45 > минут жизни и изучите их. Поверьте, они того стоят. Просто поверьте. > Да и вообще понять что такое регекспы не сложно и не > долго. мой постфикс собран без поддержки PCRE. А что касается повышения знаний, так согласен с этим полностью.
- Регулярка для замены части строки в заголовке сообщения, rafaello, 18:00 , 23-Окт-16 (8) –1
Специалисты по регуляркам, пожалуста отзовитесь! Скачал вышеуказанные учебники. Изучаю вторые сутки. Больше всех понравился учебник "Форта Б. Регулярные выражения. 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 ?
- Регулярка для замены части строки в заголовке сообщения, ., 19:16 , 23-Окт-16 (10)
- Регулярка для замены части строки в заголовке сообщения, rafaello, 19:22 , 23-Окт-16 (11) –1
>> Где найти информацию о том, как сформировать эту самую $1 ? > ты, что? стебаешься? не надо, это не хорошо > тебе же привели пример Есть люди, которые возомнили из себя седьмое чудо света и их нос выше останкинской телевышки. А есть люди простые, которые просто подскажут: "Дорогой, ищи информацию как сделать ссылки и внутренние переменные". Так поднимем бокалы за простых людей!!!
- Регулярка для замены части строки в заголовке сообщения, Pahanivo, 23:42 , 23-Окт-16 (18) +1
- Регулярка для замены части строки в заголовке сообщения, DeerFriend, 02:24 , 24-Окт-16 (19)
- Регулярка для замены части строки в заголовке сообщения, rafaello, 09:14 , 25-Окт-16 (22) –1
>[оверквотинг удален] > собственно то, зачем я начал продолжил топ, он умеет PCRE!). Жмем > Ctrl+H и забиваем в первую строку > "(.*)", а во вторую "host 95.\1.224.235" (домашнее задание объяснить зачем в первом > выражении скобки). > 4) Копипастим полученный текст в файл через консоль сервака скажем scr.sh, читаем > заклинания chmod 700 scr.sh, scr.sh > res, grep snd1 res. > 5) Вывод дал только одно совпадение - профит! > На все про все - полторы минуты, дольше всего ждать пока скрипт > из 255 запросов будет тупить по таймауту на несуществующих записях. > Это не фокус - это просто.Понял! Спасибо за предоставленный урок. Проделывать все это я не буду, потому что мне это не надо, но смысл я понял. Что касается вопроса "зачем в первом выражении скобки", то после прочтения учебника горизонты моих познаний в регулярных выражениях расширились и могу предположить, что скобки - это выражение или подвыражение, на которое потом можно ставить ссылку, как на переменную.
- Регулярка для замены части строки в заголовке сообщения, Pahanivo, 20:36 , 25-Окт-16 (23)
- Регулярка для замены части строки в заголовке сообщения, rafaello, 10:42 , 03-Ноя-16 (24)
Тут по ходу дела возник один вопрос. Буду благодарен за подсказку. Правильно или нет, но я сам написал регулярку для замены заголовка письма в 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", но это не помогает, а просто печатает как есть.
|