Отпрака email с аттачем

Тема в разделе ".:: Готовые решения", создана пользователем venetu, 14 июн 2008.

Статус темы:
Закрыта.
  1. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    735
    Симпатии:
    261
    Вот, нарыл такой скриптик, имхо намного удобнее, чем юзать какие-то классы вроде phpMailer.. Все просто и коротко:

    PHP:
    <?
        
    $attach './files/file.zip';

        
    $to "mail@yourdomain.com";
        
    $subj "Attached file: " basename($attach);

        
    $mimeBoundary "boundary_" md5(uniqid(time())); 
        
    $altBoundary "boundaryAlt_" md5(uniqid(time())); 
        
    $attBoundary "boundaryAtt_" md5(uniqid(time())); 

        
    $headers "From: yourmail<mail@yourdomain.com>\r\n"
        
    $headers .= "MIME-version: 1.0\r\n"
        
    $headers .= "Content-Type: multipart/mixed; boundary="$mimeBoundary"\r\n"

        
    $body "--" $mimeBoundary "\r\n"
        
    $body .= "Content-Type: text/html; charset=iso-8859-1\r\n"
        
    $body .= "Content-transfer-encoding: 7bit\r\n\r\n"
        
    $body .= "<font color=\"red\" face=\"verdana\">HTML Message</font>\r\n\r\n"

        
    $body .= "--" $mimeBoundary "\r\n"
        
    $body .= "Content-Type: application/x-zip-compressed; name=" basename($attach). ".gz\r\n"
        
    $body .= "Content-transfer-encoding: base64\r\n"
        
    $body .= "Content-Disposition: attachment; filename=" basename($attach). ".gz\r\n\r\n"

        
    $file file_get_contents($attach); 
        
    $file base64_encode($file); 
        
    $file chunk_split($file); 

        
    $body .= $file "\r\n\r\n"

        
    $body .= "--" $mimeBoundary "--\r\n"

        
    mail($to$subj,$body,$headers); 
    ?>

     
  2. Lonely Wolf

    Lonely Wolf Прохожие

    Мда, ты его проверил? Я увидел как минимум 2 косяка его отличия от классов:
    1) Не определяет кодировку письма и конвертит
    2) В скрипте ты прописываешь архив zip а в письме аттач gz ;)
     
  3. 13zone

    13zone

    Регистр.:
    22 ноя 2008
    Сообщения:
    190
    Симпатии:
    45
    рабочий скрипт отправки сообщения на мыло с аттачем файла и картинки


    PHP:
    <?php 
    function show_form() 

    ?> 
    <form action="" method=post enctype="multipart/form-data"> 
    <div align="center"> 
                  <br />С какого языка<br /> 
                  <input type="text" name="from_language" size="40"> 
                  <br />На какогй язык<br /> 
                  <input type="text" name="to_language" size="40">
                  <br />Контактный телефон<br /> 
                  <input type="text" name="Telephone" size="40"> 
                  <br />Контактный email*<br /> 
                  <input type="text" name="Email" size="40"> 
                  <br />Сообщение*<br /> 
                  <textarea rows="10" name="mail_msg" cols="30"></textarea> 
                  <br />Файл<br /> 
                  <input name="mail_file" type="file" size="28"> 
                  <br />Изображение<br /> 
                  <input name="attachimage" type="file" size="28"> 
                  <br /><br /><input type="submit" value="Отправить" name="submit"> 
    </div> 
    </form> 
    * Необходимо заполнить 
    <? 

    //  эту форму вверху можно удалить, или вставить себе на сайт



    function complete_mail() { 
            
            $_POST['title'] =  substr(htmlspecialchars(trim($_POST['title'])), 0, 1000); 
            $_POST['mail_msg'] =  substr(htmlspecialchars(trim($_POST['mail_msg'])), 0, 1000000); 
            $_POST['from_language'] =  substr(htmlspecialchars(trim($_POST['from_language'])), 0, 30); 
            $_POST['to_language'] =  substr(htmlspecialchars(trim($_POST['to_language'])), 0, 30); 
            $_POST['Telephone'] =  substr(htmlspecialchars(trim($_POST['Telephone'])), 0, 30); 
            $_POST['Email'] =  substr(htmlspecialchars(trim($_POST['Email'])), 0, 50); 
            // если неправильно заполнено поле email - показываем ошибку 1 
            if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $_POST['Email'])) 
                 output_err(1); 
            // если не заполнено поле "Сообщение" - показываем ошибку 2 
            if(empty($_POST['mail_msg'])) 
                 output_err(2); 
           
            $mess = ' 
    <b>С какого языка:</b>'.$_POST['from_language'].'<br /> 
    <b>на какой язык:</b>'.$_POST['to_language'].'<br /> 
    <b>Контактный телефон:</b>'.$_POST['Telephone'].'<br /> 
    <b>Контактный email:</b>'.$_POST['Email'].'<br /> 
    '.$_POST['mail_msg']; 

            // подключаем файл класса для отправки почты 
            require 'class.phpmailer.php'; 

            $mail = new PHPMailer(); 
            $mail->From = 'Для перевода';      // от кого, т.е. например тема письма
            $mail->FromName = 'zakaz@bperevodov.ru';   // от кого или откуда, можно почтовый ящик
            $mail->AddAddress('zakaz@bperevodov.ru', 'Для перевода'); // кому - адрес, Имя 
            $mail->IsHTML(true);        // выставляем формат письма HTML 
            $mail->Subject = $_POST['title'];  // тема письма 

            // если был файл, то прикрепляем его к письму 
            if(isset($_FILES['mail_file'])) { 
                     if($_FILES['mail_file']['error'] == 0){ 
                        $mail->AddAttachment($_FILES['mail_file']['tmp_name'], $_FILES['mail_file']['name']); 
                     } 
            } 
            // если было изображение, то прикрепляем его в виде картинки к телу письма. 
            if(isset($_FILES['attachimage'])) { 
                     if($_FILES['attachimage']['error'] == 0){ 
                        if (!$mail->AddEmbeddedImage($_FILES['attachimage']['tmp_name'], 'my-attach', 'image.gif', 'base64', $_FILES['attachimage']['type'])) 
                             die ($mail->ErrorInfo); 
                        $mess .= 'А вот и наша картинка:<br /><img src="cid:image.gif" border=0><br />осталось вставить ее в нужное место письма'; 
                     } 
            } 
            $mail->Body = $mess; 

            // отправляем наше письмо 
            if (!$mail->Send()) die ('Mailer Error: '.$mail->ErrorInfo); 
            echo 'Спасибо! Ваше письмо отправлено.'; // если не нужно можно удалить


    function output_err($num) 


        $err[1] = 'ОШИБКА! Неверно введен e-mail.'; 
        $err[2] = 'ОШИБКА! Не введено сообщение.'; 
        echo '<p>'.$err[$num].'</p>'; 
        show_form(); 
        exit(); 


    if (!empty($_POST['submit'])) complete_mail(); 
    else show_form(); 
    ?>
    прикрепленный файл заливаем в корень хоста
    Посмотреть вложение class.phpmailer.zip

    вот что выдает при тесте отправки почты
    т.е. отправляет письмо в нормальной кодировке с вложением ))
     
    Dominikus, burger и NitroGen нравится это.
  4. anz

    anz Level XXL

    Регистр.:
    17 окт 2006
    Сообщения:
    935
    Симпатии:
    304
    чем это интересно удобнее? разъясни подробнее.
     
Статус темы:
Закрыта.