2014-11-02 3 views
0

Я разрабатываю проект «отправить электронную почту».long name вложения по почте на php

У меня есть мой formulario.html, здесь я имею свою форму (имя, адрес, сообщения и вложения ...) и у меня есть enviar.php, где у меня есть все рабочий код.

Письмо отправляется !! Но моя проблема заключается в следующем: Файл прикрепления показало длинным именем, а не как файл ...
Если я отправить изображение, я вижу что-то вроде ASDF345Fw45yHSDF456HG... и много букв и цифр ...

Зв .. Любая идея о том, что я могу сделать? Это мой код:

//formulario.html 
<form name='formulario' id='formulario' method='post' action='enviar.php' target='_self' enctype="multipart/form-data"> 
    <p>Nombre <input type='text' name='Nombre' id='Nombre'></p> 
    <p>E-mail 
    <input type='text' name='email' id='email'> 
    </p> 
    <p>Asunto 
    <input type='text' name='asunto' id='asunto' /> 
    </p> 
    <p>Mensaje 
    <textarea name="mensaje" cols="50" rows="10" id="mensaje"></textarea> 
    </p> 
    <p>Adjuntar archivo: <input type='file' name='archivo1' id='archivo1'></p> 
    <p> 
    <input type='submit' value='Enviar'> 
    </p> 
    </form> 


//enviar.php 
<?php 
$sPara=$_POST['email']; 
$sTexto=$_POST['mensaje']; 
$sAsunto=$_POST['asunto']; 
$sDe='[email protected]'; 

function form_mail($sPara, $sAsunto, $sTexto, $sDe) 
{ 
    $bHayFicheros = 0; 
    $sCabeceraTexto = ""; 
    $sAdjuntos = ""; 

    if ($sDe) $sCabeceras = "From:".$sDe."\n"; 
    else $sCabeceras = "---CABECERA"; 
    $sCabeceras .= "MIME-version: 1.0n"; 
    foreach ($_POST as $sNombre => $sValor) 
    $sTexto = $sTexto."n".$sNombre." = ".$sValor; 

    foreach ($_FILES as $vAdjunto) 
    { 
    if ($bHayFicheros == 0) 
    { 
     $bHayFicheros = 1; 
     $sCabeceras .= "Content-type: multipart/mixed;"; 
     $sCabeceras .= "boundary='--_Separador-de-mensajes_--'\n"; 

     $sCabeceraTexto = "----_Separador-de-mensajes_--n"; 
     $sCabeceraTexto .= "Content-type: text/plain;charset=iso-8859-1n"; 
     $sCabeceraTexto .= "Content-transfer-encoding: 7BITn"; 

     $sTexto = $sCabeceraTexto.$sTexto; 
    } 
    if ($vAdjunto["size"] > 0) 
    { 
     $sAdjuntos .= "\----_Separador-de-mensajes_--\n"; 
     $sAdjuntos .= "Content-type: ".$vAdjunto['type'].";name=".$vAdjunto['name']."n"; 

     $sAdjuntos .= "Content-Transfer-Encoding: BASE64n"; 
     $sAdjuntos .= "Content-disposition: attachment;filename=".$vAdjunto["name"]."nn"; 

     $oFichero = fopen($vAdjunto["tmp_name"], 'r'); 
     $sContenido = fread($oFichero, filesize($vAdjunto["tmp_name"])); 
     $sAdjuntos .= chunk_split(base64_encode($sContenido)); 
     fclose($oFichero); 
    } 
    } 

    if ($bHayFicheros) 
    $sTexto .= $sAdjuntos."\n----_Separador-de-mensajes_----\n"; 
    return(mail($sPara, $sAsunto, $sTexto, $sCabeceras)); 
} 

//cambiar aqui el email 
if (form_mail("[email protected]", $sAsunto, 
    "Los datos introducidos en el formulario son:", $_POST['email'])) 
    echo ''.$sPara; 
echo "Su formulario ha sido enviado con exito"; 
?> 

ответ

2

Я думаю, причина в том, что много контуров линий не существует.

Вы можете попробовать, как это и посмотреть, как это работает:

foreach ($_FILES as $vAdjunto) 
{ 
    if ($bHayFicheros == 0) 
    { 
    $bHayFicheros = 1; 
    $sCabeceras .= "Content-type: multipart/mixed;\n"; 
    $sCabeceras .= "boundary='--_Separador-de-mensajes_--'\n"; 

    $sCabeceraTexto = "----_Separador-de-mensajes_--\n"; 
    $sCabeceraTexto .= "Content-type: text/plain;charset=iso-8859-1\n"; 
    $sCabeceraTexto .= "Content-transfer-encoding: 7BIT\n"; 

    $sTexto = $sCabeceraTexto.$sTexto; 
    } 
    if ($vAdjunto["size"] > 0) 
    { 
    $sAdjuntos .= "\----_Separador-de-mensajes_--\n"; 
    $sAdjuntos .= "Content-type: ".$vAdjunto['type'].";name=".$vAdjunto['name']."\n"; 

    $sAdjuntos .= "Content-Transfer-Encoding: BASE64\n"; 
    $sAdjuntos .= "Content-disposition: attachment;filename=".$vAdjunto["name"]."\n\n"; 

    $oFichero = fopen($vAdjunto["tmp_name"], 'r'); 
    $sContenido = fread($oFichero, filesize($vAdjunto["tmp_name"])); 
    $sAdjuntos .= chunk_split(base64_encode($sContenido)); 
    fclose($oFichero); 
    } 
} 

В зависимости от MTA используется вам, возможно, придется заменить все \n с \r\n.

+0

Спасибо @ Антоан Мильков, я попробую! – Jean

Смежные вопросы