【问题标题】:long name attachments by mail on php在php上通过邮件发送长名称附件
【发布时间】:2014-12-29 11:40:52
【问题描述】:

我正在开发一个“发送电子邮件”项目。

我有我的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='myemail@gmail.com';

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("myemail@gmail.com", $sAsunto, 
    "Los datos introducidos en el formulario son:", $_POST['email'])) 
  echo ''.$sPara;
echo "Su formulario ha sido enviado con exito"; 
?>

【问题讨论】:

    标签: php email mime email-attachments


    【解决方案1】:

    我认为原因是因为很多行尾不存在。

    你能不能这样试试看效果如何:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-26
      • 2015-09-30
      • 2015-10-24
      • 1970-01-01
      • 2011-03-24
      • 1970-01-01
      • 2021-07-10
      • 1970-01-01
      相关资源
      最近更新 更多