Задать вопрос
  • Почему бот пишет про неудачу даже если дротик попал в цель?

    shurshur
    @shurshur
    Константин Нагибович, конечно, ведь range - генератор. Он сгенерирует все миллионы вместо двух простых сравнений :)
  • Как одновременно запустить hypercorn и discord bot'a?

    shurshur
    @shurshur
    В asyncio - сколько угодно. При условии, конечно, что всё сделано правильно.
  • Как реализовать обновление PHP софта клиентам?

    shurshur
    @shurshur
    Можно делать специфических клиентов отдельными ветками и новые фичи мерджить в них явно либо прям переносом кода с отдельными коммитами (а то и в отдельной репе), но придётся регулярно воевать с конфликтами, и вообще это плохой путь. Но некоторые так делают, в том числе не только по историческим причинам, но и потому, что доработки под некоторых клиентов могут быть настолько объёмны, что тянут на отдельный проект, содержать который в рамках всеобщего универсального проекта может быть крайне сложно. Например, для моего работодателя разработчик в систему учёта заявок с нуля написал интеграцию с почтой под наших хотелки, основательно вкрученную в ядро всей системы.

    Но в целом если хочется сделать хорошо, то лучше выделять ядро, а отдельный функционал выносить в включаемые фичи, в подключаемые модули, в кастомные хуки итд итп. Также в некоторых случаях может помочь создание переиспользуемых библиотек. Например, если есть несколько клиентов с различными почтовыми интеграциями, то вместо написания супермодуля по работе с почтой или нескольких огромных модулей сделать отдельную библиотеку, скрывающую сложные вопросы работы с почтой (приём, отправка, авторизация, SMTP/POP3/IMAP/TLS/etc, формирование писем, их парсинг итд, с ООП, конечно), а сами модули сделать лёгкими и компактными, использующими эту библиотеку.

    Можно посмотреть как делают другие. Даже Битрикс (при всей обоснованной критике его громоздкости и технологической отсталости) написан так, что дополнительный функционал в нём делается не ковырянием в ядре, а модулями, компонентами, кастомными темами итд итп.
  • Чат бот Телеграмм, Python+Postgresql, почему проблемы с подключением?

    shurshur
    @shurshur
    bfardaad, каждая синхронная операция с базой полностью блокирует бота. Делается запрос 30 секунд? Вот все эти 30 секунд бот вообще не будет реагировать.
  • Можно ли запретить скачивание, но разрешить cross-origin запросы в .htaccess?

    shurshur
    @shurshur
    nAnley, сделать тривиальную страницу, в которой включить любой скрипт. Открыть консоль браузера и посмотреть заголовки запроса, с которыми он загружался. Ну там всякие Referer, Origin... чё там бывает?

    Можно даже свою страницу не создавать, а воспользоваться любым сайтом в интернете.
  • Можно ли запретить скачивание, но разрешить cross-origin запросы в .htaccess?

    shurshur
    @shurshur
    nAnley, можно взять да и посмотреть, какие заголовки прилетают в этих двух случаях, и написать фильтры под это дело.
  • Как отправить сообщение в Telegram по ссылке?

    shurshur
    @shurshur
    А ты бы хотел, чтобы при открытии какого-то телеграмного профиля у тебя были подставлены, например, матерные слова или оскорбления?
  • Можно ли запретить скачивание, но разрешить cross-origin запросы в .htaccess?

    shurshur
    @shurshur
    Совсем запретить - нет, нельзя. Любой может повторить те же самые заголовки, что делает браузер.
  • Почему cURL отправляет файл сертификата для Telegram-бота через терминал и через php по-разному?

    shurshur
    @shurshur
    Нет, проблема не в @, это всего лишь указание curl, что данные берутся не из значения параметра, а из файла, например:

    curl -d foobar - будет передана строка foobar;
    curl -d @foobar - будет передано содержимое файла с именем foobar.

    Скорее всего, надо файл не аплоудить, а просто передать его содержимое через параметр:

    'certificate' => file_get_contents($certPath)
  • Как сделать авторизацию через дискорд?

    shurshur
    @shurshur
    shaesnow, OAuth2 - стандартный протокол авторизации, реализаций море, примеров море, и я даже не глядя в гугл уверен, что есть и примеры реализаций, заточенных прямо на авторизацию именно через дискорд.
  • Как исправить ошибку Email rejected per DMARC policy?

    shurshur
    @shurshur
    Rokis, главное чтоб теперь не ломанули, потому что сражаться потом с яндексом приятного мало :)
  • Какие есть сервисы по типу SparkPost?

    shurshur
    @shurshur
    shaesnow, серверов у тебя явно нет, так как их содержание само по себе обходится в большие деньги и риски (сами сервера и комплектуху-то регулярно надо обновлять). Значит, арендуешь и перепродаёшь. Раз дохода даже одного бакса нет, то это значит, что объёмы мизерные, а наценка копеечная. И вся она уходит в лицензии на тот самый софт.

    Например, серваки с Celeron у Селектела начинаются от 2 тыс., с Xeon - от 4 тыс. Если предположить наценку в 500 рублей (наверное, за столько можно продавать), то 10 серверов дают дохода 5000 рублей. Пусть это 5 серверов по 2000 и 5 по 4000, наценка даёт 5000 рублей. Те две лицензии 4950 в месяц. Получается, оборот 35000, доход 50 рублей :)

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

    Бизнес не может работать так, что сто рублей недостачи его похоронят. Это с самого начала была плохая затея. Рекомендую найти работу, это гораздо выгоднее и надёжнее.
  • Как реализовать передачу файлов между двумя компьютерами?

    shurshur
    @shurshur
    FeeFort, если там есть база данных, то есть и сервер. Вот на нём поднять веб-сервер и отдавать эти файлы.
  • Как обойти блокировку исходящего 25 порта на своем SMTP сервере?

    shurshur
    @shurshur
    Можно проверить, работает ли через порт 587, но в целом на домовом провайдере отправлять почту - так себе решение. Лучше арендовать для почтовика виртуалку или использовать сторонние сервисы для отправки почты типа SES.
  • Как исправить ошибку Email rejected per DMARC policy?

    shurshur
    @shurshur
    Rokis,
    Условий немало сравнивая с тем, что раньше было достаточно добавить php код для обработки формы и письма доставлялись без каких-либо проблем.


    И это приводило просто к гигантским, чудовищным объёмам спама. Потому что достаточно было найти уязвимость в любом фреймворке - и тысячи сайтов в интернетах начинали заваливать спамом вообще всех.

    Поэтому нынешние правила контроля отправителей - они правильные и неопходимые.

    но тестер показывает что ничего не изменилось.


    Значит, надо разбираться. В тестовом письме появился заголовок DKIM-Signature? Если нет, значит, настроено было неправильно.

    Мне кстати эта статья сразу же не очень нравится, поскольку там предлагают unix-сокет заменить на inet. Это имеет смысл только если надо разнести opendkim и postfix на разные серверы, а на одном сервере-то зачем? Впрочем, это несущественная мелочь (тем более opendkim вешается на localhost, недоступный из инета) и на работоспособность не должна влиять.

    Только тестовое письмо с сервера (с адреса mysite.ru) стало отправляться и то в папку спама.


    Да, потому что DMARC - это рекомендация, а не приказ. Сервер получателя принимает решение на основе комплекса факторов. Спамеры тоже не дураки и пытаются всех обманывать, см. например https://qna.habr.com/q/5993

    Обычно применяется подход на основе оценок разных факторов, и суммарная оценка письма является суммой. Вот для примера типичный спам в моём ящике:

    X-Spam-Flag: YES
    X-Spam-Score: 6.821
    X-Spam-Level: ******
    X-Spam-Status: Yes, score=6.821 tagged_above=-999 required=5
         tests=[BAYES_50=2.5, DATE_IN_FUTURE_03_06=3.027,
         NO_FM_NAME_IP_HOSTN=0.001, PDS_BTC_ID=0.499, RDNS_NONE=0.793,
         SPF_NONE=0.001] autolearn=no autolearn_force=no


    Для теста можно использовать этот сервис https://dkimvalidator.com/ , туда отправляешь письмо, на сайте показывается, каким оно пришло, со всеми заголовками и информацией о проверке его SpamAssassin. Вот дальше это этого и надо плясать.

    Возможно есть более простое решение для отправки писем на php через mail()?


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

    1. Сервер получателя не проверяет имя сервера как таковое. Он берёт IP сервера и делает с ним стандартные проверки: наличие PTR-записи, наличие для полученного имени A-записи, присутствие IP в DNSBL

    Имя указывается не в одном месте: это и адрес, указываемый в команде MAIL From протокола SMTP, и адрес, указываемый в заголовке From: письма. Эти адреса могут различаться. Почтовый сервер получает и проверяет первый адрес (хотя далее спам-фильтр может проверить всё содержимое письма, включая заголовок From:), а получатель видит второй.

    Например, если сервер отправителя передал MAIL From:foobar@site.ru, то сервер получателя проверит, что IP отправителя подпадает под SPF в TXT-записи домена site.ru (SPF домена хостера проверяться не будет), и добавит соответствующую оценку в спам-фильтр (такую, как SPF_PASS, SPF_FAIL, SPF_NEUTRAL).

    2. php должен быть настроен на отправку писем через правильный почтовик. В данном случае - надо проверить sendmail_path в php.ini. В доставленном письме по заголовкам Received: должно быть видно, что письмо прошло через свой локальный postfix.

    3. Получатели будут видеть то, что написано в заголовке From: письма. Туда можно в теории написать что угодно, хоть trump@whitehouse.gov.

    4. Почтовый сервер можно настроить на отправку с разными доменами. Например, пусть есть сервер mail.server.ru, можно в домене server.ru вообще не настраивать OSPF/DKIM/DMARC, а настроить в доменах site.ru и project.ru, далее с сервера отправлять именно с этими адресами. В специально для этого OpenDKIM можно настроить разные ключи на разные домены.

    5. Приватный ключ по той инструкции лежит в /etc/postfix/dkim/домен.private. Рядом кладётся публичный, который надо прописатьв в DNS (там в файлике готовая строчка для вставки в доменную зону TXT-записи). Приватный ключ, разумеется, никому показывать нельзя, он должен храниться только на этом сервере.

    6. Надо смотреть, что пишут тестеры, тот же dkimvalidator. В письме должен появиться заголовок DKIM-Signature. Надо также обратить внимание на проверки SpamAssassin и целенаправленно решать всё что там существенно мешает. Например, если там SPF_FAIL, то исказть, где именно в SPF что-то пошло не так.
  • Как реализовать передачу файлов между двумя компьютерами?

    shurshur
    @shurshur
    Román Mirilaczvili,
    Записать массив байтов в БД


    Это менее эффективно, чем положить там же рядом картинку в файл.
  • Какие есть сервисы по типу SparkPost?

    shurshur
    @shurshur
    shaesnow, экономить надо начинать с 1750+3200 рублей в месяц, ведь там вообще не космические технологии, и всё то же самое можно сделать бесплатно.
  • Какие есть сервисы по типу SparkPost?

    shurshur
    @shurshur
    shaesnow, есть целый ряд сервисов рассылки писем с API и с бесплатным пакетом, которого хватит на небольшие нужды. В интернетах полно обзоров.
  • Как исправить ошибку Email rejected per DMARC policy?

    shurshur
    @shurshur
    Чтобы отправлять почту, в наше время нужно выполнить много условий?

    1. Нужна PTR-запись для IP отправителя, и должна существовать соответствующая A-запись (например, 111.22.33.44 указывает на mail.site.ru, должна существовать A-запись для mail.site.ru, необязательно на тот же IP).

    2. Нужно описать SPF (TXT-запись с v=spf1 у домена site.ru), по которому данный IP должен быть доверенным для отправки почты.

    3. Нужно настроить DKIM и подписывать письма ключом, публичная часть которого описана в DNS.

    4. Должна быть описана политика DMARC в TXT-записи _dmarc.site.ru. При этом если там указано p=reject, то получателю предписывается полностью отвергать почту от недоверенных отправителей.

    Вот вероятнее всего что-то из этого сделано не так.