URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 4248
[ Назад ]

Исходное сообщение
"Тематический каталог: Как отправить письмо с аттачем на PHP (php base64 mail)"

Отправлено auto_topic , 09-Сен-04 09:27 
Обсуждение статьи тематического каталога: Как отправить письмо с аттачем на PHP (php base64 mail)

Ссылка на текст статьи: http://www.opennet.me/base/dev/php_mail_attach.txt.html


Содержание

Сообщения в этом обсуждении
"Как отправить письмо с аттачем на PHP (php base64 mail)"
Отправлено Роман Теннер , 09-Сен-04 09:27 
Класс! Код заработал с первого раза! Я кучу сайтов перекопал. Везде есть примеры, но не рабочие, или с ошибками. Народ хоть сам-то смотрит, чего другим советует?

"Как отправить письмо с аттачем на PHP (php base64 mail)"
Отправлено Андрей , 21-Сен-04 11:42 
Нет слов, молодец!

"Как отправить письмо с аттачем на PHP (php base64 mail)"
Отправлено Тема , 25-Окт-04 09:48 
А как два и более файла отправить?

"Как отправить письмо с аттачем на PHP (php base64 mail)"
Отправлено Slv , 14-Дек-04 22:23 
Нет ничего проще...
Достаточно дописать...

$zag      .= "------------".$un."\n";
$zag      .= "Content-Type: application/octet-stream;";
$zag      .= "name=\"".basename($filename2)."\"\n";
$zag      .= "Content-Transfer-Encoding:base64\n";
$zag      .= "Content-Disposition:attachment;";
$zag      .= "filename=\"".basename($filename2)."\"\n\n";
$zag      .= chunk_split(base64_encode(fread($f2,filesize($filename2))))."\n";

При помощи этого примера удалось даже налету создать rtf и домазать к письму...


"Как отправить письмо с аттачем на PHP (php base64 mail)"
Отправлено bob , 22-Дек-04 12:57 
Первый скрипт, который реально все это делает без гвоздей. Молодец.

"Как отправить письмо с аттачем на PHP (php base64 mail)"
Отправлено critic , 29-Окт-06 14:05 
Как без гвоздей?
А поле Subject в Base64 запаковать?

"Как отправить письмо с аттачем на PHP (php base64 mail)"
Отправлено PsinA , 24-Фев-05 00:38 
мм..я что-то не очень понял...
а куда он все это отправляет? где мыло вписывать куда это все придет?

"Как отправить письмо с аттачем на PHP (php base64 mail)"
Отправлено JeWeL , 20-Июн-05 15:40 
Пишу такой код:
$filename = "1.JPG";

$un        = strtoupper(uniqid(time()));
    $m ="HELO\n";
    $m.="MAIL FROM: srz@srz-holding.ru\n";
    $m.="RCPT TO: srz@srz-holding.ru\n";
    $m.="DATA\n";
    $m.="FROM: srz@srz-holding.ru\n";
    $m.="To: srz@srz-holding.ru\n";
    $m.="Subject: SIMPLE TEST\n";
$m.="MIME-Version: 1.1
Content-Type: multipart/mixed; boundary=\"----------C0BB13F44576C2\"

------------C0BB13F44576C2
Content-Type: text/plain; charset=Windows-1251
Content-Transfer-Encoding: quoted-printable

simple test

srz                          mailto:srz@srz-holding.ru
------------C0BB13F44576C2
Content-Type: application/octet-stream; name=\"$filename\"
Content-transfer-encoding: base64
Content-Disposition: attachment; filename=\"$filename\"

";

$fp = fsockopen("192.168.0.1", 25, &$errno, &$errstr);
if(!$fp)
{
echo "$errstr ($errno)<br>\n";
}
else
{
fputs($fp,$m);
fclose($fp);
echo"That`s OK<hr>";
}
---------
Говорит что все отправлено успешно, а на серваке сервис ругается, что:
read failed. Error Code=connection reset by peer
failed to receive message body (250407 bytes). Error Code=connection reset by peer

отправляет не все типы файлов и не любого размера.
Подскажите в чем проблема?


"Как отправить письмо с аттачем на PHP (php base64 mail)"
Отправлено Michael Yakovis , 30-Янв-06 21:39 
Спасибо большое за скриптик. Все четко и понятно.

"Как отправить письмо с аттачем на PHP (php base64 mail)"
Отправлено gomez.ru , 11-Авг-06 14:21 
Я тут немного доработал этот кодик:


<?
//Функция проверки переменной
function html_filter($str) {
    $result = HTMLSpecialChars($str);
    return $result;}

//Функция проверки e-mail
function isEmail($email){
    if (eregi("^[a-z0-9]+([-_\.]?[a-z0-9])+@[a-z0-9]+([-_\.]?[a-z0-9])+\.[a-z]+$", $email)){return TRUE;}else{return FALSE;}}

//Функция отправки письма с аттачем
function XMail($from, $to, $subj, $text, $filename, $file)
{
$f         = fopen($file,"rb");
$un        = strtoupper(uniqid(time()));
$head      = "From: $from\n";
$head     .= "To: $to\n";
$head     .= "Subject: $subj\n";
$head     .= "X-Mailer: PHPMail Tool\n";
$head     .= "Reply-To: $from\n";
$head     .= "Mime-Version: 1.0\n";
$head     .= "Content-Type:multipart/mixed;";
$head     .= "boundary=\"----------".$un."\"\n\n";
$zag       = "------------".$un."\nContent-Type:text/html;\n";
$zag      .= "Content-Transfer-Encoding: 8bit\n\n$text\n\n";
$zag      .= "------------".$un."\n";
$zag      .= "Content-Type: application/octet-stream;";
$zag      .= "name=\"".basename($filename)."\"\n";
$zag      .= "Content-Transfer-Encoding:base64\n";
$zag      .= "Content-Disposition:attachment;";
$zag      .= "filename=\"".basename($filename)."\"\n\n";
$zag      .= chunk_split(base64_encode(fread($f,filesize($file))))."\n";
if (!@mail("$to", "$subj", $zag, $head))
return 0;
else
return 1;
}

//Функция отправки письма без аттача
function EMail($from, $to, $subj, $text)
{
$un        = strtoupper(uniqid(time()));
$head      = "From: $from\n";
$head     .= "To: $to\n";
$head     .= "Subject: $subj\n";
$head     .= "X-Mailer: PHPMail Tool\n";
$head     .= "Reply-To: $from\n";
$head     .= "Mime-Version: 1.0\n";
$head     .= "Content-Type:multipart/mixed;";
$head     .= "boundary=\"----------".$un."\"\n\n";
$zag       = "------------".$un."\nContent-Type:text/html;\n";
$zag      .= "Content-Transfer-Encoding: 8bit\n\n$text\n\n";
$zag      .= "------------".$un."\n";
if (!@mail("$to", "$subj", $zag, $head))
return 0;
else
return 1;
}

//Функция отправки письма без аттача

//Получаем данные из формы
if(isset($submit)):
//Проверяем полученные из формы данные
$from = trim(html_filter($from));
$to = trim(html_filter($to));
$subj = trim(html_filter($subj));
$text = trim(html_filter($text));
$text = str_replace("\n", "<br>\n", $text);
$filename = trim(html_filter($file_name));
//Если прикреплен файл
if($filename!="" and $file_size>0):
    if(XMail($from, $to, $subj, $text, $filename, $file)==1){header("Location:?send=ok");}
endif;
//Если Не прикреплен файл
if($filename=="" or $file_size==0):
    if(EMail($from, $to, $subj, $text)==1){header("Location:?send=ok");}
endif;
endif;
?>

<html>
<head>
    <title>Отправка письма с аттачем и без</title>
</head>

<body>

<?if($send=="ok"):?><font color="green">Сообщение отправлено</font><br><br><?endif;?>

<form action="<?=$PHP_SELF?>" method="post" enctype="multipart/form-data">
From: <input type="text" name="from"><br>
To: <input type="text" name="to"><br>
Subject: <input type="text" name="subj"><br>
Text:<br><textarea cols="20" rows="5" name="text"></textarea><br>
File: <input type="file" name="file"><br>
<input type="submit" name="submit" value="Отправить">
</form>

</body>
</html>


"Как отправить письмо с аттачем на PHP (php base64 mail)"
Отправлено gomez.ru , 11-Авг-06 14:53 
Тоже самое, но с проверкой e-mail-ов:

<?
//Функция проверки переменной
function html_filter($str) {
    $result = HTMLSpecialChars($str);
    return $result;}

//Функция проверки e-mail
function isEmail($email){
    if (eregi("^[a-z0-9]+([-_\.]?[a-z0-9])+@[a-z0-9]+([-_\.]?[a-z0-9])+\.[a-z]+$", $email)){return TRUE;}else{return FALSE;}}

//Функция отправки письма с аттачем
function XMail($from, $to, $subj, $text, $filename, $file)
{
$text = str_replace("\n", "<br>\n", $text);
$f         = fopen($file,"rb");
$un        = strtoupper(uniqid(time()));
$head      = "From: $from\n";
$head     .= "To: $to\n";
$head     .= "Subject: $subj\n";
$head     .= "X-Mailer: PHPMail Tool\n";
$head     .= "Reply-To: $from\n";
$head     .= "Mime-Version: 1.0\n";
$head     .= "Content-Type:multipart/mixed;";
$head     .= "boundary=\"----------".$un."\"\n\n";
$zag       = "------------".$un."\nContent-Type:text/html;\n";
$zag      .= "Content-Transfer-Encoding: 8bit\n\n$text\n\n";
$zag      .= "------------".$un."\n";
$zag      .= "Content-Type: application/octet-stream;";
$zag      .= "name=\"".basename($filename)."\"\n";
$zag      .= "Content-Transfer-Encoding:base64\n";
$zag      .= "Content-Disposition:attachment;";
$zag      .= "filename=\"".basename($filename)."\"\n\n";
$zag      .= chunk_split(base64_encode(fread($f,filesize($file))))."\n";
if (!@mail("$to", "$subj", $zag, $head))
    return 0;
else
    return 1;
}

//Функция отправки письма без аттача
function EMail($from, $to, $subj, $text)
{
$text = str_replace("\n", "<br>\n", $text);
$un        = strtoupper(uniqid(time()));
$head      = "From: $from\n";
$head     .= "To: $to\n";
$head     .= "Subject: $subj\n";
$head     .= "X-Mailer: PHPMail Tool\n";
$head     .= "Reply-To: $from\n";
$head     .= "Mime-Version: 1.0\n";
$head     .= "Content-Type:multipart/mixed;";
$head     .= "boundary=\"----------".$un."\"\n\n";
$zag       = "------------".$un."\nContent-Type:text/html;\n";
$zag      .= "Content-Transfer-Encoding: 8bit\n\n$text\n\n";
$zag      .= "------------".$un."\n";
if (!@mail("$to", "$subj", $zag, $head))
    return 0;
else
    return 1;
}

//Получаем данные из формы
if(isset($submit)):
    //Проверяем полученные из формы данные
    $from = trim(html_filter($from));
    $to = trim(html_filter($to));
    $subj = trim(html_filter($subj));
    $text = trim(html_filter($text));
    $filename = trim(html_filter($file_name));
    //Проверяем e-mail-ы
    if(isEmail($from)==false){$from_error=1;}
    if(isEmail($to)==false){$to_error=1;}
    if($from_error!=1 and $to_error!=1):
        //Если прикреплен файл
        if($filename!="" and $file_size>0):
            if(XMail($from, $to, $subj, $text, $filename, $file)==1){header("Location:?send=ok");}
        endif;
        //Если Не прикреплен файл
        if($filename=="" or $file_size==0):
            if(EMail($from, $to, $subj, $text)==1){header("Location:?send=ok");}
        endif;
    endif;
endif;
?>

<html>
<head>
<meta http-equiv="Content-Language" content="ru">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Отправка письма с аттачем и без</title>
</head>

<body>
<?//Печатаем ошибки
if(isset($submit)):
    if($from_error==1):?>
    <font color="red">E-mail в поле From введен неправильно!</font><br>
    <?endif;?>
    <?if($to_error==1):?>
    <font color="red">E-mail в поле To введен неправильно!</font><br>
    <?endif;?>    
<?endif;?>    

<?if($send=="ok"):?><font color="green">Сообщение отправлено</font><br><br><?endif;?>

<form action="<?=$PHP_SELF?>" method="post" enctype="multipart/form-data">
From:<br> <input type="text" name="from" value="<?=$from?>"><br>
To:<br> <input type="text" name="to" value="<?=$to?>"><br>
Subject:<br> <input type="text" name="subj" value="<?=$subj?>"><br>
Text:<br><textarea cols="40" rows="10" name="text"><?=$text?></textarea><br>
File:<br> <input type="file" name="file"><br>
<input type="submit" name="submit" value="Отправить">
</form>

</body>
</html>

</body>
</html>


"Как отправить письмо с аттачем на PHP (php base64 mail)"
Отправлено gomez.ru , 11-Авг-06 15:15 
Кстати, как налету переформатировать текст из $text в html и сразу прикрепить его к файлу?

"Как отправить письмо с аттачем на PHP (php base64 mail)"
Отправлено Dmitry , 12-Июн-07 16:07 
А нет случайно примера, как отправить html с картинкой? Насколько я знаю, картинки тоже хранятся в аттаче. А в html в атрибуте src хранится имя аттача и какой-то его идентификатор.

"Тематический каталог: Как отправить письмо с аттачем на PHP ..."
Отправлено Razer , 20-Окт-07 00:37 
Подскажите пожалуйста! Я пользуюсь ниже указанным кодом для отправки формы с прикрепленным файлом (к примеру фотография) на почтовый ящик. У меня всё нормально доходит,а вот фотография не хочет открываться, хотя она и прикреплена, отображается только крести. Сколько я уже скриптов не перепробывал везде так получается, что вся текстовая информация доходит нормально, а вместо прикрепленной фотографии только крестик (т.е. невозможно отобразить!), интересно, что размер прикрепленной фотографии указан в письме правильно.
Помогите пожалуйста разобраться!

"Как отправить письмо с аттачем на PHP (php base64 mail)"
Отправлено Антон , 30-Окт-07 00:37 
У меня та же проблема, только я понял в чем дело, но не знаю как правильно поступить.

Файл не успевает сохраняться на сервере.

Код такой:

if ($_FILES['attach1']['name'] != '')
{
$uploadfile1 = $uploaddir.basename($_FILES['attach1']['name']);
if (!move_uploaded_file($_FILES['attach1']['tmp_name'], $uploadfile1))
{
$errors .= 'Не удалось загрузить файл 1.<br/>';
$uppload1 = 'error';
}
else
{
$attach1_content = implode('', file ($uploadfile1));
//$attach1_content = file_get_contents($uploadfile1);
$mime1 = $_FILES['attach1']['type'];
}
}

т.е. когда забираешь текст с файла, он еще на диск не записался. Если файл маленький - все ок. Если файл большой - приходит либо обрезанный, либо 0 длины.

Как сделать правильно?

Желательно избежать функции sleep.


"Как отправить письмо с аттачем на PHP (php base64 mail)"
Отправлено anchar , 14-Май-08 12:27 
function xmail($from, $to, $subj, $text)
{
    $un  = strtoupper(uniqid(time()));
    
    $head = "From: $from\n";
    $head .= "Subject: $subj\n";
    $head .= "X-Mailer: PHPMail Tool\n";
    $head .= "Reply-To: $from\n";
    $head .= "Mime-Version: 1.0\n";
    $head .= "Content-Type: multipart/mixed;";
    $head .= "boundary=\"----------".$un."\"\n\n";
    
    $zag = "------------".$un."\nContent-Type: text/html;\n";
    $zag .= "Content-Transfer-Encoding: 8bit\n\n$text\n\n";
    
    $filenames = array_slice(func_get_args(), 4);
    foreach($filenames as $filename)
    {
        if (is_readable($filename))
        {
            $zag .= "------------".$un."\n";
            $zag .= "Content-Type: application/octet-stream;";
            $zag .= "name=\"".basename($filename)."\"\n";
            $zag .= "Content-Transfer-Encoding: base64\n";
            $zag .= "Content-Disposition: attachment;";
            $zag .= "filename=\"".basename($filename)."\"\n\n";
            $zag .= chunk_split(base64_encode(file_get_contents($filename)))."\n";
        }
    }
    return (!@mail($to, $subj, $zag, $head)) ? false : true;
}

xmail("a@a", "b@b", "Заголовок", "Сообщение", "site.zip", "photo.jpg");


"Как отправить письмо с аттачем на PHP (php base64 mail)"
Отправлено Валерий , 30-Май-10 16:47 
>[оверквотинг удален]
>   $zag .= "Content-Transfer-Encoding: base64\n";
>   $zag .= "Content-Disposition: attachment;";
>   $zag .= "filename=\"".basename($filename)."\"\n\n";
>   $zag .= chunk_split(base64_encode(file_get_contents($filename)))."\n";
>  }
> }
> return (!@mail($to, $subj, $zag, $head)) ? false : true;
>}
>
>xmail("a@a", "b@b", "Заголовок", "Сообщение", "site.zip", "photo.jpg");

проблему это не решило.. теперь просто не прикладывает файл


"Как отправить письмо с аттачем на PHP (php base64 mail)"
Отправлено Grach , 02-Фев-09 11:20 
Ребят, спасибо за примеры и скрипты.

"йЮЙ НРОПЮБХРЭ ОХЯЭЛН Я ЮРРЮВЕЛ МЮ PHP (php base64 mail)"
Отправлено vedemir , 24-Июн-09 11:34 
лНКЧЯЭ МЮ ЮБРНПЮ.
ДКЪ МЕЦН МСФМН ОНЯРЮБХРЭ РНРЕЛ,
ОПХМЕЯРХ ЕЛС ФЕПРБШ,
Х ЛНКХРЭЯЪ МЮ МЕЦН...
ЛНКХРЭЯЪ...ЛНКХРЭЯЪ...ЛНКХРЭЯЪ...

яоюяхан юбрнпс!!!!!!!!!!!!!!!!!!!!!!!!!!


"arigato"
Отправлено vedemir , 24-Июн-09 11:39 
domo arigato gozaimasu ^_^

"п п╟п╨ п╬я┌п©я─п╟п╡п╦я┌я▄ п©п╦я│я▄п╪п╬ я│ п╟я┌я┌п╟я┤п╣п╪ п╫п╟ PHP (php base64 mail)"
Отправлено mama , 27-Июн-09 23:23 
п п╟п╨ п╬я┌п©я─п╟п╡п╦я┌я▄ п©п╦я│я▄п╪п╬ я│ п╟я┌я┌п╟я┤п╣п╪ п╫п╟ PHP (php base64 mail)???????

"Как отправить письмо с аттачем на PHP (php base64 mail)"
Отправлено Витос , 05-Фев-10 20:09 
Огромное спасибо, автор!

"Как отправить письмо с аттачем на PHP (php base64 mail)"
Отправлено Гриша , 11-Апр-10 23:56 
Спасибо автору, очень полезная вещь.

"Как отправить письмо с аттачем на PHP (php base64 mail)"
Отправлено gunner , 11-Май-10 20:59 
Скопировано с http://phpclub.ru/detail/article/mail#part_7

"Как отправить письмо с аттачем на PHP (php base64 mail)"
Отправлено Just XXX , 03-Апр-11 15:05 
Всё работает, но немогу понять, как можно отправить АНОНИМНОЕ письмо с аттачем (типа с левого адреса)

что бы обратная связь потом незамучила))


"Как отправить письмо с аттачем на PHP (php base64 mail)"
Отправлено Чапай , 24-Сен-11 18:11 
Автор гений, спасибо

"Как отправить письмо с аттачем на PHP (php base64 mail)"
Отправлено Андрей , 16-Янв-12 20:52 
Отлично работает. Но не отправляет exe или zip.
Как пофиксить?

"Как отправить письмо с аттачем на PHP (php base64 mail)"
Отправлено tongeren , 21-Ноя-12 13:30 
Моя функция на три файла

function XMail( $from, $to, $subj, $text, $filename, $filenamereal, $filename1, $filenamereal1, $filename2, $filenamereal3)
{
$f         = fopen($filename,"rb");
$un        = strtoupper(uniqid(time()));
$head      = "From: $from\n";
$head     .= "To: $to\n";
$head     .= "Subject: $subj\n";
$head     .= "X-Mailer: PHPMail Tool\n";
$head     .= "Reply-To: $from\n";
$head     .= "Mime-Version: 1.0\n";
$head     .= "Content-Type:multipart/mixed; charset=utf-8; ";
$head     .= "boundary=\"----------".$un."\"\n\n";
$zag       = "------------".$un."\nContent-Type:text/html;\n";
$zag      .= "Content-Transfer-Encoding: 8bit\n\n$text\n\n";

if (strlen($filename)>0)

{
$zag      .= "------------".$un."\n";
$zag      .= "Content-Type: application/octet-stream;";
$zag      .= "name=\"".basename($filenamereal)."\"\n";
$zag      .= "Content-Transfer-Encoding:base64\n";
$zag      .= "Content-Disposition:attachment;";
$zag      .= "filename=\"".basename($filenamereal)."\"\n\n";
$zag      .= chunk_split(base64_encode(fread($f,filesize($filename))))."\n";
}

if (strlen($filename1)>0)

{
$zag      .= "------------".$un."\n";
$zag      .= "Content-Type: application/octet-stream;";
$zag      .= "name=\"".basename($filenamereal1)."\"\n";
$zag      .= "Content-Transfer-Encoding:base64\n";
$zag      .= "Content-Disposition:attachment;";
$zag      .= "filename=\"".basename($filenamereal1)."\"\n\n";
$zag      .= chunk_split(base64_encode(fread($f,filesize($filename1))))."\n";
}

if (strlen($filename2)>0)

{
$zag      .= "------------".$un."\n";
$zag      .= "Content-Type: application/octet-stream;";
$zag      .= "name=\"".basename($filenamereal2)."\"\n";
$zag      .= "Content-Transfer-Encoding:base64\n";
$zag      .= "Content-Disposition:attachment;";
$zag      .= "filename=\"".basename($filenamereal2)."\"\n\n";
$zag      .= chunk_split(base64_encode(fread($f,filesize($filename2))))."\n";
}

if (!@mail("$to", "$subj", $zag, $head))
return FALSE;
else
return TRUE;
}

?>


"Как отправить письмо с аттачем на PHP (php base64 mail)"
Отправлено tongeren , 21-Ноя-12 13:32 
вызывается так XMail( '1@mail.ru', $mailto, $Conff, $StrokaZakaza, $_FILES['fileadd1']['tmp_name'], $_FILES['fileadd1']['name'], $_FILES['fileadd2']['tmp_name'], $_FILES['fileadd2']['name'], $_FILES['fileadd3']['tmp_name'], $_FILES['fileadd3']['name']);

"Как отправить письмо с аттачем на PHP (php base64 mail)"
Отправлено anonfghjk , 28-Дек-12 01:25 
Так не вызывается. Выкидывает ошибки. Как прописать несколько файлов аттача с определенными именами в строке вызова функции?

вызывается так XMail( '1@mail.ru', $mailto, $Conff, $StrokaZakaza, $_FILES['fileadd1']['tmp_name'], $_FILES['fileadd1']['name'], $_FILES['fileadd2']['tmp_name'], $_FILES['fileadd2']['name'], $_FILES['fileadd3']['tmp_name'], $_FILES['fileadd3']['name']);