The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Openssl & IMAP  (Помогите со скриптом), !*! FrenzyC, 17-Июн-11, 20:34  [смотреть все]
OS - Ubuntu

Задача следующая - Подключиться к почтовому серверу по IMAP-протоколу и удалить почту и нужной папки, с чем я прекрасно справился поочередно вводя следующие комманды в консоли.

openssl s_client -ssl3 -ign_eof -crlf -connect imap.gmail.com:993
. login  LOGIN PASSWORD
. select "[Gmail]/All Mail"
. store 1:10 flags \deleted
. expunge
. logout

Решил написать скрипт.
Запихиваю все это в файл - делаю его исполняемым

#!/bin/bash
openssl s_client -ssl3 -ign_eof -crlf -connect imap.gmail.com:993  # подключаюсь к серваку
. login  LOGIN PASSWORD  # вводится логин и пароль
. select "[Gmail]/All Mail"   # выбираю папку
. store 1:10 flags \deleted # помечаю письма с 1-го по 10-е на удаление
. expunge  # удаляю письма
. logout

Когда запускаю на выполнение - Выполняется только подключение к серверу - дальше скрипт не выполняется (Такое ощущение что остальные строки туда не передаются)
При этом (после того как подключился к серверу через скрипт) - могу вручную вводить все те же строки и все будет работать.


Подскажите в чем проблема и как от нее избавиться.

PS: С линуксом знаком не очень хорошо, по факту это мои первые попытки написать скрипт. Самостоятельно решение искал долго но не нашел.

  • Openssl & IMAP  (Помогите со скриптом), !*! elvenic, 20:52 , 17-Июн-11 (1)
    Копайте в сторону expect (напр. см сюда: http://linux.die.net/man/1/expect)
  • Openssl & IMAP  (Помогите со скриптом), !*! FrenzyC, 12:08 , 23-Июн-11 (2)
    Спасибо. Получилось.

    Вот как сделал (может кому то пригодиться)

    Есть 3 файла;
    1. Read Logins (Считывает логины и передает их во второй файл)
    2.Connect (По очереди для каждой учетной записи подключается и выполняет действия)
    3.Logins.txt (собственно сам файл с логинами


    ------------------------------файл 1 (Read Logins)--------------
    #!/bin/bash

    cat '/home/frenzy/logins.txt' | while read line; do                         #построчно считывает логин\пароль для подключения
    IFS=","                                    # указывает разделитель между логином и паролем
    set -- $line                               # пазбиваем строку на 2 части
    username=$1                                 # сохранение первой части строки в переменную
    password=$2                                 #сохранение второй части строки в переменную

    '/home/frenzy/connect.sh' $username $password                        # передача переменных во второй скрипт
    done


    ------------------------------файл 2 (connect.sh)---------------------
    #!/usr/bin/expect -f
    set timeout 4
    set login [lindex $argv 0]
    set password [lindex $argv 1]
    spawn openssl s_client -ssl3 -ign_eof  -crlf -connect imap.gmail.com:993 #подключение к серверу
    expect "*\r"
    sleep 3
    send ". login $login $password\r"                      # логинимся
    expect "*\r"                                            #Ожидание новой строки для ввода данных
    sleep 3                                 #Задержка
    send ". select \"\[Gmail\]/Drafts\"\r"                         #Выбираем папку Черновики \ Подставляем нужную папку Inbox,Sent To )
    expect "*\r"
    sleep 3
    send ". store 1:10 flags \\deleted\r"                        # помечаем письма с 1го по 10е на удаление
    expect "*\r"
    sleep 3
    send ". expunge\r"                      # Удаляем письма
    expect "*\r"
    sleep 20
    send ". logout\r"                       # Отключаемся от сервера
    expect eof

    ----------------------------файл 3 (logins.txt)--------------
    EmailLogin1,Password1
    EmailLogin2,Password2
    EmailLogin3,Password3


    *Примечание - Что бы письма удалялись после команды EXPUNGE - это надо выставить в настройках IMAP\POP3


    К сожалению в один файл весь скрипт впихнуть не получилось - так и не разобрался как сделать так что бы определенные строки обрабатывались через Bash а определенные через Expect.

    Если кто-то подскажет как это сделать буду очень благодарен.


    • Openssl & IMAP  (Помогите со скриптом), !*! allez, 05:42 , 24-Июн-11 (3)
      > К сожалению в один файл весь скрипт впихнуть не получилось - так
      > и не разобрался как сделать так что бы определенные строки обрабатывались
      > через Bash а определенные через Expect.
      > Если кто-то подскажет как это сделать буду очень благодарен.

      Можно, например, попробовать так:

      1. Заменить в файле logins.txt запятые на пробелы. У вас ведь, я надеюсь, нет пробелов ни в
      именах пользователей, ни в паролях? А вот запятая в пароле вполне себе может возникнуть. И
      что тогда? ;-) Плюс ко всему не нужна станет возня с IFS.

      2. Сформировать из двух имеющихся скриптов один:


      #!/bin/bash

      while read username password; do            # Построчно считываем логин\пароль для подключения

          expect -c "
          set timeout 4
          spawn openssl s_client -ssl3 -ign_eof  -crlf -connect imap.gmail.com:993 # Подключение к серверу
          expect *\r
          sleep 3
          send .\ login $username $password\r     # Логинимся
          expect *\r                              # Ожидание новой строки для ввода данных
          sleep 3                                 # Задержка
          send .\ select\ \"\[Gmail\]/Drafts\"\r  # Выбираем папку Черновики \ Подставляем нужную папку Inbox, Sent To )
          expect *\r
          sleep 3
          send .\ store\ 1:10\ flags\ \\deleted\r # Помечаем письма с 1-го по 10-е на удаление
          expect *\r
          sleep 3
          send .\ expunge\r                       # Удаляем письма
          expect *\r
          sleep 20
          send .\ logout\r                        # Отключаемся от сервера
          expect eof"

      done < /home/frenzy/logins.txt





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

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