[英]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.