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

Статус
В этой теме нельзя размещать новые ответы.

venetu

Мой дом здесь!
Регистрация
28 Мар 2007
Сообщения
745
Реакции
273
Вот, нарыл такой скриптик, имхо намного удобнее, чем юзать какие-то классы вроде 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 косяка его отличия от классов:
1) Не определяет кодировку письма и конвертит
2) В скрипте ты прописываешь архив zip а в письме аттач gz ;)
 
рабочий скрипт отправки сообщения на мыло с аттачем файла и картинки


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

вот что выдает при тесте отправки почты
X-Sendmail-Cmdline: sendmail.pl -t -i
To: zakaz@bperevodov.ru
Subject:
Date: Fri, 6 Feb 2009 09:35:31 +0200
Return-Path: Для перевода
From: "zakaz@bperevodov.ru" <Для перевода>
Message-ID: <9c0cd74dd01365593bd64ca9ca37852d@shop>
X-Priority: 3
X-Mailer: PHPMailer [version 1.73]
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="b1_9c0cd74dd01365593bd64ca9ca37852d"


--b1_9c0cd74dd01365593bd64ca9ca37852d
Content-Type: text/html; charset = "windows-1251"
Content-Transfer-Encoding: 8bit


<b>С какого языка:</b>рус<br />
<b>на какой язык:</b>енг<br />
<b>Контактный телефон:</b>45634<br />
<b>Контактный email:</b>23@list.ru<br />
само тестовое сообщение

--b1_9c0cd74dd01365593bd64ca9ca37852d
Content-Type: application/octet-stream; name="test"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="test"

8uXx8u7i++kg9ODp6w==


--b1_9c0cd74dd01365593bd64ca9ca37852d--

т.е. отправляет письмо в нормальной кодировке с вложением ))
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху