2014-11-02 68 views
0

我正在開發一個「發送電子郵件」項目。郵件上的長名稱附件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

謝謝@Antoan Milkov我會試試看! – Jean 2014-11-03 15:15:49