Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Отправка письма с аттачем на PHP

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

RadIY



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени суток!
Отправляю письмо при помощи нижеописанного способа..Приходит-верный размер, есть тема, сам аттач тоже приходит, только почему-то называется он "часть.txt".причём нигде в коде даже нет упоминания на такое название.Посмотрите-какие есть соображения..
class mime_mail {
    var $parts;
    var $to;
    var $from;
    var $headers;
    var $subject;
    var $body;
    function mime_mail() {
        $this->parts = array();
        $this->to = "";
        $this->from = "";
        $this->subject = "";
        $this->body = "";
        $this->headers = "";
        }
    function add_attachment($message, $name = "", $ctype = "application/octet-stream") {
        @$this->parts[] = array (
            "ctype" => $ctype,
            "message" => $message,
            "encode" => $encode,
            "name" => $name
            );
        }
    function build_message($part) {
        $message = $part["message"];
        $message = chunk_split(base64_encode($message));
        $encoding = "base64";
        return "Content-Type: ".$part["ctype"].($part["name"]? "; name = \"".$part["name"]."\"" : "")."\nContent-Transfer-Encoding: $encoding\n\n$message\n";
        }
    function build_multipart() {
        $boundary = "b".md5(uniqid(time()));
        $multipart = "Content-Type: multipart/mixed; boundary = $boundary\n\nThis is a MIME encoded message.\n\n--$boundary";
        for($i=sizeof($this->parts)-1; $i>=0; $i--) {
            $multipart .= "\n".$this->build_message($this->parts[$i])."--$boundary";
            }
        return $multipart .= "--\n";
        }
    function get_mail($complete = true) {
        $mime = "";
        if (!empty($this->from))
            $mime .= "From: ".$this->from."\n";
        if (!empty($this->headers))
            $mime .= $this->headers."\n";
        if ($complete) {
            if (!empty($this->to))
                $mime .= "To: ".$this->to."\n";
            if (!empty($this->subject))
                $mime .= "Subject: ".$this->subject."\n";
            }
        if (!empty($this->body))
            $this->add_attachment($this->body, "", "text/plain");
        $mime .= "MIME-Version: 1.0\n".$this->build_multipart();
        return $mime;
        }
    function send() {
        $mime = $this->get_mail(false);
        mail($this->to, $this->subject, "", $mime);
        }
    };
$filename=$file;//сам файл
$fd = fopen($filename, "r");
$data = fread($fd, filesize($filename));
fclose($fd);
$mail = new mime_mail;
$mail->from=$email_from;
$mail->to=${"mail_to_".$i};
$mail->subject = $subj;//тема
$mail->body="Attachment";//тело
$mail->add_attachment($data, $filename, $content_type);
$mail->send();

Всего записей: 180 | Зарегистр. 24-02-2005 | Отправлено: 23:12 30-10-2005
Pleshkov



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Тебе для начала сюда => Ничего не работает! Что делать???

Цитата:
0111 Большие листинги не рекомендуется вставлять прямо в тело сообщения - предпочтительнее сохранять код в отдельном файле и приводить ссылку на него.
© http://forum.ru-board.com/rule.cgi?forum=31

Всего записей: 452 | Зарегистр. 15-06-2004 | Отправлено: 02:11 31-10-2005
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pleshkov
1) Для этого есть модераторы.
2) Тут не "ничего не работает", а "не так работает"
 
RadIY
Тип отсылаемого файла? Заголовки и часть исходного полученного письма, плиз.
ps: пользуйся готовыми классами. Например phpmailer

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 02:22 31-10-2005 | Исправлено: Cheery, 02:26 31-10-2005
Pleshkov



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery

Цитата:
1) Для этого есть модераторы.

сорри.

Цитата:
2) Тут не "ничего не работает", а "не так работает"

в принципе, сначало надо продебагить код, а потом уже, по результатам дебага смотреть что может быть ИМХО.

Всего записей: 452 | Зарегистр. 15-06-2004 | Отправлено: 04:56 31-10-2005
RadIY



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Тип отсылаемого файла? Заголовки и часть исходного полученного письма, плиз.  
ps: пользуйся готовыми классами. Например phpmailer

ТАк получается, что phpmailer использовать нельзя..
Скипт должен отсылать липа файлы типа *.sql либо *.tgz. В первом случае естественно можно прочитать такой файл(ведь приходит файл с расширением *.txt), а вот во втором- какая-то абра-кадабра-но и не удивительно-архив *.tgz также воспронимается как текстовой. В обоих случаях аттач называется Часть.txt
 

Всего записей: 180 | Зарегистр. 24-02-2005 | Отправлено: 09:13 31-10-2005
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
ТАк получается, что phpmailer использовать нельзя..
Звучит убедительно.

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 09:24 31-10-2005
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RadIY
Заголовки, плиз.. у меня ощущение, что content-type выставлен в текстовый.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 17:23 31-10-2005
RadIY



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
header("HTTP/1.1 200 OK");
header("Content-Disposition: attachment; filename=$fn");
header("Content-Length: ".$fsize);
header("Content-type: application/octet-stream");

Всего записей: 180 | Зарегистр. 24-02-2005 | Отправлено: 23:49 03-11-2005
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RadIY
Еще раз.. заголовки полученного письма.


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:58 03-11-2005
RadIY



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
я наверное не понимаю..скажи-как их узнать?

Всего записей: 180 | Зарегистр. 24-02-2005 | Отправлено: 00:09 04-11-2005
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RadIY

Цитата:
я наверное не понимаю..скажи-как их узнать?

в почтовой программе/интерфейсе. Просмотр заголовков или исходников сообщения

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:10 04-11-2005
RadIY



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Return-path: <nsignru@vanessa.dreamdns.net>
Received: from [81.177.4.251] (port=25 helo=vanessa.dreamdns.net)
        by mx20.mail.ru with esmtp  
        id 1ETN4d-0007im-00
        for xxxxxx@mail.ru; Sat, 22 Oct 2005 21:22:27 +0400
Received-SPF: none (mx20.mail.ru: 81.177.4.251 is neither permitted nor denied by
domain of vanessa.dreamdns.net) client-ip=81.177.4.251;
envelope-from=nsignru@vanessa.dreamdns.net; helo=vanessa.dreamdns.net;
Received: from nsignru by vanessa.dreamdns.net with local (Exim 4.52)
        id 1ETN4a-0006KV-8f
        for xxxxxx@mail.ru; Sat, 22 Oct 2005 21:22:24 +0400
To: xxxxxx@mail.ru
Subject: Copy of dump-08.02.2005-19-56
From: dumper@mbsite.ru
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary = be15511e52b96a05f4dc02ab503fc7d93
Message-Id: <E1ETN4a-0006KV-8f@vanessa.dreamdns.net>
Date: Sat, 22 Oct 2005 21:22:24 +0400
X-AntiAbuse: This header was added to track abuse, please include it with any
abuse report
X-AntiAbuse: Primary Hostname - vanessa.dreamdns.net
X-AntiAbuse: Original Domain - mail.ru
X-AntiAbuse: Originator/Caller UID/GID - [32331 32333] / [47 12]
X-AntiAbuse: Sender Address Domain - vanessa.dreamdns.net
X-Source:  
X-Source-Args:  
X-Source-Dir:  
X-Spam: Not detected
 
Attachment

Всего записей: 180 | Зарегистр. 24-02-2005 | Отправлено: 00:16 04-11-2005 | Исправлено: RadIY, 00:54 13-06-2008
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RadIY
что за тип прикрепляемого файла?
я бы советовал, все же, phpmailer.. там есть все.


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:18 04-11-2005
RadIY



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
я понимаю, но мне всё же нужно разобраться с этим.За предложение спасибо!
а тип файла-архив вида *.tgz

Всего записей: 180 | Зарегистр. 24-02-2005 | Отправлено: 00:27 04-11-2005
AnDron85



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Я в PHP новенький, такие сложные вещи делать не умею, в скрипте поковырялся, подправил, и кажется все заработало :)
Вот рабочий код:

Цитата:
 
<?
  class mime_mail {
    var $parts;
    var $to;
    var $from;
    var $headers;
    var $subject;
    var $body;
    function mime_mail() {
        $this->parts = array();
        $this->to = "";
        $this->from = "";
        $this->subject = "";
        $this->body = "";
        $this->headers = "";
        }
    function add_attachment($message, $name = "", $ctype = "application/octet-stream") {
        @$this->parts[] = array (
            "ctype" => $ctype,
            "message" => $message,
            "encode" => $encode,
            "name" => $name
            );
        }
    function build_message($part) {
        $message = $part["message"];
        $message = chunk_split(base64_encode($message));
        $encoding = "base64";
        return "Content-Type: ".$part["ctype"].($part["name"]? "; name = \"".$part["name"]."\"" : "")."\nContent-Transfer-Encoding: $encoding\n\n$message\n";
        }
    function build_multipart() {
        $boundary = "b".md5(uniqid(time()));
        $multipart = "Content-Type: multipart/mixed; boundary = $boundary\n\nThis is a MIME encoded message.\n\n--$boundary";
        for($i=sizeof($this->parts)-1; $i>=0; $i--) {
            $multipart .= "\n".$this->build_message($this->parts[$i])."--$boundary";
            }
        return $multipart .= "--\n";
        }
    function get_mail($complete = true) {
        $mime = "";
        if (!empty($this->from))
            $mime .= "From: ".$this->from."\n";
        if (!empty($this->headers))
            $mime .= $this->headers."\n";
        if ($complete) {
            if (!empty($this->to))
                $mime .= "To: ".$this->to."\n";
            if (!empty($this->subject))
                $mime .= "Subject: ".$this->subject."\n";
            }
        if (!empty($this->body))
            $this->add_attachment($this->body, "", "text/plain");
        $mime .= "MIME-Version: 1.0\n".$this->build_multipart();
        return $mime;
        }
    function send() {
        $mime = $this->get_mail(false);
        mail($this->to, $this->subject, "", $mime);
        }
    };
$filename="01.gif";//сам файл
$fd = fopen($filename, "r");
$data = fread($fd, filesize($filename));
fclose($fd);
$mail = new mime_mail;
$mail->from="от меня";   // от кого
$mail->to="тебе";     // кому
$mail->subject = "тема";//тема
$mail->body="hello user!";  // "Attachment";//тело
$mail->add_attachment($data, $filename);
$mail->send();
?>
 

 
осталось сделать так, чтобы письма отсылались в HTML формате и можно было прикреплять несколько картинок, тогда все будет супер)))
бум думать...

Всего записей: 42 | Зарегистр. 28-01-2005 | Отправлено: 15:53 14-02-2007 | Исправлено: AnDron85, 16:08 14-02-2007
Yarkij



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
PEAR не подходит ли для этого наилучшим образом?

Всего записей: 111 | Зарегистр. 21-02-2005 | Отправлено: 20:24 14-02-2007
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Yarkij

Цитата:
PEAR не подходит ли для этого наилучшим образом?

брр.. ты сам то понимаешь о чем говоришь?
сдается мне, что нет
 
AnDron85
http://phpmailer.sourceforge.net/
это лучше.. как послать html с картинками.. либо картинки на внешнем сервере.. либо читай там же про Inline Attachments

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:29 14-02-2007
Yarkij



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
в полном уме...
я говорю о таких пакетах Pear как  
Mail и Mime
для отправки письма с атачментом....
_http://pear.php.net/packages.php?catpid=14&catname=Mail
 
Более подробно написано тут:
_http://phpclub.ru/detail/article/mail#part_2
 
и снова же.. зачем придумывать велосипед.. Класс для отправки письма, ведь можно пользоваться тем что уже есть.  
 
Если уж так хочется своего навоять... то можно тоже посмотреть то, что уже сделано другими...

Всего записей: 111 | Зарегистр. 21-02-2005 | Отправлено: 20:46 14-02-2007
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Yarkij

Цитата:
в полном уме...
я говорю о таких пакетах Pear как  

ну так зачем о нем говорить как о ед. варианте?
 
плюс.. если чужой хостер, то его еще надо цеплять по нормальному - а
Цитата:
Я в PHP новенький,  

 
phpmailer самый оптимальный вариант

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:48 14-02-2007
Yarkij



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ну.. прививаю вкус к хорошему!
тем паче дал линку толковую, где в примерах показано как пишется отправка письма!
На документацию PEAR как бы не слышал жалоб тоже.
Было б желание.  
И даже, если чужой хостер, то можно просто инклудить mime.php и mail.php, а?
И новенький в ПХП отнюдь не автор топа.

Всего записей: 111 | Зарегистр. 21-02-2005 | Отправлено: 21:10 14-02-2007
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Интернет » Web-программирование » Отправка письма с аттачем на PHP


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru