1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

Получение писем gmail на сайте

Тема в разделе "Web Coding", создана пользователем vanderv, 29 май 2013.

Модераторы: latteo
  1. vanderv

    vanderv

    Регистр.:
    30 май 2009
    Сообщения:
    270
    Симпатии:
    12
    ребята, подскажите, можно ли приход писем на почту gmail отправлять post запросом на url? В рамках настройки gmail конечно. Просто нужно в режиме реального времени получать сообщения. Была мысль cron-ом создать задачу и получать новые сообщения, но минимальное интервал минута, а мне нужно максимум 10 секунд. спасибо
     
  2. sonicm

    sonicm

    Регистр.:
    15 май 2009
    Сообщения:
    195
    Симпатии:
    89
    По идее не получится так часто как вы хотите, потому что сам gmail не будет рассылать уведомление, о том что пришло письмо, следовательно ваш скрипт должен сам стучаться на gmail, чтобы узнать есть ли почта. И тут вы снова упираетесь в крон. С другой строный зачем вам почта так часто? Если нужен мгновенный обмен сообщениями - можно прикрутить gTalk на сайт - мы уже так делали на проекте hiddenmarketing . ru (там онлайн консультант через него работает)

    Возможно я заблуждаюсь по поводу почты, но пока вариантов не вижу.

    Создайте скрипт в гугл апс, чтобы при получении письма, например, запускался некий скрипт на вашем сервере. Тогда никакого крона не потребуется. Я подобным способом делал смс-рассылку себе, когда приходили письма от некоторых адресатов.
     
  3. vanderv

    vanderv

    Регистр.:
    30 май 2009
    Сообщения:
    270
    Симпатии:
    12
    Могли бы вы мне объяснить как вылавливать приход писем в гугл апс?
     
  4. starkiev

    starkiev

    Регистр.:
    11 май 2007
    Сообщения:
    417
    Симпатии:
    59
    проще всего начать с чтения справки на https://script.google.com

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


    Код:
    function my_notification()
    {
     
      var threads = GmailApp.getUserLabelByName('YARLIK').getThreads();  //переменная, в которой хранится коллекция цепочек с ярлыком YARLIK
     
      if(threads == 0) return; // прекращение выполнения, если новых цепочек нет
     
      for(i in threads)
      {
      // делаем то, что надо
      }
     
      GmailApp.getUserLabelByName('YARLIK').removeFromThreads(threads); //снимаем метки "YARLIK" с цепочек
    }
     
  5. vanderv

    vanderv

    Регистр.:
    30 май 2009
    Сообщения:
    270
    Симпатии:
    12
    Если раз в минуту то не пойдет. Нужно максимум раз в 10 сек
     
  6. starkiev

    starkiev

    Регистр.:
    11 май 2007
    Сообщения:
    417
    Симпатии:
    59
    попробуйте почитать документацию или запустить 10 триггеров с разной задержкой (sleep) на старте
     
  7. sonicm

    sonicm

    Регистр.:
    15 май 2009
    Сообщения:
    195
    Симпатии:
    89
    А еще как вариант, если крон может запускать скрипт каждую минуту, в теле скрипта нельзя прописать, чтобы он с задержками в 10 секунд 6 раз проверял прочту? Через минуту крон снова перезапусткет этот скрипт (который лежит у вас на сервере) и он по новой отрабатывает.
    Топорно немного, но как вариант разве не подойдет?
     
  8. starkiev

    starkiev

    Регистр.:
    11 май 2007
    Сообщения:
    417
    Симпатии:
    59
    не должен. вначале он будет блочить аппликуху, которая пытается получить доступ и выдаст запрос в веб-интерфейсе. Если подтвердить - всё будет ок. Но я бы всё равно советовал получать доступ через гугл скриптс
     
  9. APXOH

    APXOH Создатель

    Регистр.:
    16 янв 2013
    Сообщения:
    36
    Симпатии:
    6
    С кроном бодаюсь приблизительно так
    <?php
    for($i = 0; $i < 6; $i++)
    {
    action();
    sleep(10);
    }

    хоть топор но помогает ))

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

    Как второй вариант: вместо sleep сделать контроль текущего времени юникстайм - запускать action если прошло 10 секунд с предыдущей успешной итерации и завершать скрипт если прошло 50 с начала работы
     
  10. RORC

    RORC

    Регистр.:
    14 июн 2013
    Сообщения:
    174
    Симпатии:
    41
    через sleep уже предлагали, выше, но можно в самом кроне тоже самое попроще, пример с запуском раз в 10 секунд
    */1 * * * * root /home/mybin/script.sh; /bin/sleep 10; /home/mybin/script.sh; /bin/sleep 10; /home/mybin/script.sh; /bin/sleep 10; /home/mybin/script.sh