簡體   English   中英

通過php在郵件上發送長名稱附件

[英]long name attachments by mail on php

我正在開發一個“發送電子郵件”項目。

我有我的formulario.html ,這里有我的表格(名稱,地址,消息和附件...),我有enviar.php ,其中包含所有enviar.php的代碼。

郵件已發送! 但是我的問題是:附件文件以長名稱顯示,而不是文件形式...
如果發送圖像, ASDF345Fw45yHSDF456HG...看到類似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"; 
?>

我認為原因是因為許多行末尾都不存在。

您可以這樣嘗試一下,看看它是如何工作的嗎:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM