Отправляем хтмл-письмо через сокеты

Discussion in 'Статьи' started by je0n, 7 Feb 2007.

  1. je0n

    je0n Elder - Старейшина

    Joined:
    14 May 2006
    Messages:
    345
    Likes Received:
    96
    Reputations:
    41
    Вообще-то это не статья, просто я убил сегодня весь день, чтобы отправить html-письмо через сокеты. Но цель, с которой я это делал, обломалась. Но письмо я все таки отправил :). А цель у меня была такая: вставить в тело html-письма скрипт или swf, ворующий куки. Но к сожалению mail.ru фильтрует все теги <embed> и <script> в теле хтмл-письма :(. Но идея была отличная! Еще одно - я бы мог составить хтмл-письмо в Bat'е или другом клиенте, но к сожалению, там нельзя было вставить скрипт или же картинку в виде swf. Ни в бате, ни в аутлуке (по крайней мере я не нашел как). Поэтому и пришлось писать скриптец, который вставит нужные мне тэги. Может в каких других почтовиках – сработает эта техника. Не проверял, но вероятность есть.
    Скрипт:
    Code:
    <?
    $s=fsockopen('smtp.inbox.ru',25);  //открываем сокет
    echo fgets($s,512)."<br>";
    fputs($s,"HELO ".$_SERVER['SERVER_ADDR']."\r\n");  //выолняем необходимые команды для smtp сервера
    echo fgets($s,512)."<br>";
    fputs($s,"MAIL FROM:je0n@inbox.ru\r\n");    //От кого письмо
    echo fgets($s,512)."<br>";
    fputs($s,"RCPT TO:jeon@inbox.ru\r\n");      //кому письмо
    echo fgets($s,512)."<br>";
    fputs($s,"DATA\r\n");                  //начало тела письма
    echo fgets($s,512)."<br>";
    //fputs($s,"From:je0n@inbox\r\n");
    fputs($s,"To:jeon@inbox.ru\r\n");
    fputs($s,"MIME-Version: 1.0\r\n");
    fputs($s,"Content-Type: text/html\r\n");          //Этот заголовок необходим,чтобы письмо отображалось как html
    fputs($s,"Content-Transfer-Encoding: 7bit\r\n");
    fputs($s,"\r\n");
    fputs($s,"<html><body><h1>html-письмо</h1></body></html>\r\n.\r\n"); //хтмл-код письма и отправка
    echo fgets($s,512)."<br>";
    fputs($s,"QUIT\r\n");      //Завершаем связь с smtp сервером
    echo fgets($s,512)."<br>";
    ?>
    
    Комментов я думаю достаточно. Но одна проблемка есть - mail.ru требует smtp-авторизации, чтобы отправить письмо. Но это нестрашно. Чтобы пройти авторизацию просто проверьте почту на ящике, с которого собирайтесь отправлять письмо, т.е. пройдите pop3-авторизацию. После этого, в течении некоторого времени, вы сможете отправлять письма через smtp без авторизации, т.е. этот скрипт будет работать.



    P.S. если кто знает как еще можно вставить флэш в хтмл документ (помимо <embed>), или придумает как обмануть фильтры, что на майл.ру, поделитесь плз инфой ))
     
    1 person likes this.
  2. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    А ты попробуй слать не на SMTP.MAIL.RU, а на MX-сервер mail.ru: mxs.mail.ru
    там авторизация не требуется, т.к. там другие SMTP-сервера через него шлют почту на mail.ru.
    Кроме того, отправителя можно будет написать от балды. Например, bill@microsoft.com

    Смотри мой исходник SMTP-сервера на Си для более подробных деталей
     
  3. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    и полочат нахyй вашь диалапный/некоторый_другой_динамический IP при посылке "DATA" мх-серверу mxs.mail.ru

    логично - fclose( $s );
     
  4. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    Соксы уже отменили?
     
  5. je0n

    je0n Elder - Старейшина

    Joined:
    14 May 2006
    Messages:
    345
    Likes Received:
    96
    Reputations:
    41
    ггггг, ну вы развели тут! Как есть, так и есть. Там же написана какая цель была. Так как цель обломалась, остальное делать безсмысленно.