Perl mime або як отримати web сторінку поштою

У цій статті буде розказано про те, як
використовуючи модулі Perl LWP :: UserAgent і MIME :: Lite скачати
HTML сторінку і відіслати її в листі разом зі
усіма вкладеними зображеннями.

Застосовуючи викладений метод я щодня
отримую свіжі анекдоти в свою поштову
ящик - ну лінь мені кожен день лазити в Інет
🙂

  • LWP :: UserAgent - клас для користувача
    агентів WWW
  • MIME :: Lite - полегшений MIME кодер / декодер
  • URI :: URL - робота з URL
  • HTML :: LinkExtor - отримання списку всіх URL в
    документі

  • Time :: Local - перетворює компоненти повного
    часу в секунди
  • сайт анекдотів / an / an рік місяць / o рік місяць день.html

    причому від року беруться тільки 2 останні
    цифри, а місяць і день доповнюється до 2
    символів нулями зліва, якщо це необхідно.

    Невеликий ліричний відступ для тих,
    хто тільки почав освоювати Perl.

    Як завантажити WEB сторінку?

    Як відправити лист з прикріпленими
    файлами?

    Розглянемо по кроках роботу програми.

    • Визначаємо URL документа
    • Викачуємо вміст WEB сторінки
    • Шукаємо і викачуємо все що містяться на
      сторінці зображення
  • Міняємо посилання щодо документа на
    їх абсолютне значення

  • Відсилаємо вийшло лист по
    електронній пошті
  • Технічну реалізацію скрипта я буду
    описувати схематично, якщо що буде не
    зрозуміло - дивіться исходник.

    C ANEKDOT.RU все історії за вчора. обчислюємо
    дату - опівночі вчорашнього дня. доповнюємо
    дату нулями зліва.

    $ Sutki = 24 * 60 * 60;
    ($ Tek_day, $ tek_month, $ tek_year) = (localtime) [3,4,5];
    $ In1 = timelocal (0,0,0, $ tek_day, $ tek_month, $ tek_year);
    $ In2 = $ in1- $ sutki;
    ($ Tek_day, $ tek_month, $ tek_year) = (localtime ($ in2)) [3,4,5];
    $ Tek_month ++; $ Tek_year + = 1900;
    if ($ tek_month<10)
    $ Tek_month = "0". $ Tek_month
    >
    if ($ tek_day<10)
    $ Tek_day = "0". $ Tek_day;
    >
    $ An_year = substr ($ tek_year, 2, 2);

    Викачуємо вміст сторінки використовуючи
    модуль LWP.

    if ($ url_page $ Url_page =

    / ^ (Https? | Ftp | file | nntp): \ / \ //)
    my $ req = new HTTP :: Request ( 'GET' => $ url_page);
    my $ res = $ ua-> request ($ req);
    $ Gabarit = $ res-> content;
    >

    зовнішній CSS = '\ N ";
    документ HTML =

    my $ analyseur = HTML :: LinkExtor-> new;
    $ Analyseur-> parse ($ gabarit);
    my @l = $ analyseur-> links; foreach my $ url (@l)
    my $ urlAbs = URI :: WithBase-> new ($$ url [2], $ racinePage) -> abs;
    chomp $ urlAbs;
    if (($$ url [0] eq 'a') ($$ url [1] eq 'href') ($$ url [2])
    (($$ url [2]!

    s / \ s href = [ " ']? $$ url [2] ["']? / href = "$ urlAbs" / gimx;
    >
    >

    Вибираємо з документа все зображення,
    викачуємо картинку, визначаємо тип і
    повертаємо її, закодовану в MIME.

    if (((lc ($$ url [0]) eq 'img') || (lc ($$ url [0]) eq
    'Src')))
    push (@mail, create_image_part ($ urlAbs));
    >
    if (lc ($ ur) =

    / Jpg $ /)
    $ Type = "image / jpg";
    >
    else
    $ Type = "application / x-shockwave-flash";
    >
    my $ res2 = $ ua-> request (new HTTP :: Request ( 'GET' => $ ur));
    $ Buff1 = $ res2-> content;
    $ File_name = substr ($ ur, rindex ($ ur, "/") + 1, length ($ ur));
    # Кодируем чергову картинку my
    $ Mail = new MIME :: Lite (Data => $ buff1, Encoding => 'base64', 'Filename' => $ file_name);
    $ Mail-> attr ( 'Content-type' => $ type); $ Mail-> attr ( 'Content-Location' => $ ur);

    Створюємо MIME об'єкт, вказуємо від кого і
    кому лист, тему повідомлення. якщо на
    сторінці зображень немає - тип повідомлення text / html,
    якщо є картинки - multipart / related.

    $ Mail = new MIME :: Lite 'From' => '[email protected]',
    'To' => $ to_email, 'Subject' => $ url_page, 'Data' => $ html; $ Mail-> attr ( "Content-type"
    => $ Content_type);
    if (@mail)
    $ Mail-> replace ( "Type" => "multipart / related");
    # Присоеденяюсь кожну картинку
    foreach (@mail)>
    >

    Відсилаємо сторінку поштою. Можна, можливо
    використовувати SMTP або sendmail.

    Розміщуємо наш скрипт в каталог, звідки
    дозволено виконання програм і робимо
    файл виконуваним

    chmod 750 /usr/local/www/cgi-bin/html_on_email3.pl

    Для того, щоб остаточно все
    автоматизувати, вішаємо наш скрипт на CRON.
    Для цього в файл / etc / crontab додаємо рядок

    0 9 * * * root /usr/local/www/cgi-bin/html_on_email3.pl

    і щоранку о 9 годині читаємо свіжі
    анекдоти.

    На завершення хочу зауважити, що все можна
    було написати і по-іншому, більш красиво.
    Але програма працює, а більшого від неї і
    не вимагається 🙂

    Покажи цю статтю друзям:

    Розширення для Chrome, покликане захищати користувачів, краде інформацію з LinkedIn і Facebook

    Новий Банкер IcedID ще знаходиться в розробці, але вже демонструє просунуті техніки атак

    Хакери допомогли Пентагону усунути тисячі вразливостей

    Переможці з усієї країни зберуться на Кубку CTF Росії в Сколково

    Copyright © 2024