Buenas,
Llevo unos días buscando por internet cómo conseguirlo, pero no hay manera...
Dispongo de un código php (que funciona en phpnuke, pero que no es relevante) que envía emails sin problemas. Dentro del index.php está el propio formulario, así como el código de envío, todo en uno.
Lo que intento, es que se pueda enviar en el mismo email archivos adjuntos, pero no consigo implementar los códigos.
Aquí os dejo mi idex.php:
Código PHP:
<?php
if (!defined('MODULE_FILE')) {
die ("You can't access this file directly...");
}
require_once("mainfile.php");
$module_name = basename(dirname(__FILE__));
get_lang($module_name);
define('INDEX_FILE', true);
$subject = 'Nuevo Email - '._FEEDBACK;
define('NO_EDITOR', true);
include("header.php");
if (!isset($opi) OR ($opi != "ds")) {
$intcookie = intval($cookie[0]);
if (!empty($cookie[1])) {
$sql = "SELECT name, username, user_email FROM ".$user_prefix."_users WHERE user_id='".$intcookie."'";
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
if (!empty($row['name'])) {
$sender_name = filter($row['name'], "nohtml");
} else {
$sender_name = filter($row['username'], "nohtml");
}
$sender_email = filter($row['user_email'], "nohtml");
} else {
$sender_email = "";
$sender_name = "";
}
}
if (!isset($message)) { $message = ""; }
if (!isset($opi)) { $opi = ""; }
if (!isset($send)) { $send = ""; }
title(_FEEDBACKTITLE);
// By Phosky
//info_box("note", _FEEDBACKNOTE);
OpenTable();
echo _FEEDBACKNOTE;
echo "<br>";
CloseTable();
echo "<br>";
// EOF By Phosky
$form_block = "
<table border=\"0\" width=\"100%\">
<tr><td nowrap><FORM METHOD=\"post\" ACTION=\"modules.php?name=$module_name\">
<strong>"._YOURNAME.":</strong></td><td><INPUT type=\"text\" NAME=\"sender_name\" VALUE=\"$sender_name\" readonly style='background-color:#CCCCCC' SIZE=30></td></tr>
<tr><td nowrap><strong>"._YOUREMAIL.":</strong></td><td><INPUT type=\"text\" NAME=\"sender_email\" VALUE=\"$sender_email\" readonly style='background-color:#CCCCCC' SIZE=30></td></tr>
<tr><td> </td></tr>
<tr><td nowrap><strong>"._FORMDIVISION.":</strong></td><td>
<select name=\"select1\">
<option selected value='0'>Elige tu división</option>
<option value='0'>------------------------</option>
<option>Primera División</option>
<option>Segunda División</option>
<option>Tercera División</option>
</select></td></tr>
<tr><td nowrap><strong>"._FORMNOMWAR.":</strong></td><td><INPUT type=\"text\" NAME=\"nombre_war\" VALUE=\"$nombre_war\" SIZE=30> <i>[Clan X vs Clan Y]</i></td></tr>
<tr><td nowrap><strong>"._FORMFECHA.":</strong></td><td><INPUT type=\"text\" NAME=\"fecha_war\" VALUE=\"$fecha_war\" SIZE=30></td></tr>
<tr><td nowrap><strong>"._FORMHORA.":</strong></td><td><INPUT type=\"text\" NAME=\"hora_war\" VALUE=\"$hora_war\" SIZE=30></td></tr>
<tr><td><strong>"._MESSAGE.":</strong></td><td><TEXTAREA NAME=\"message\" COLS=60 ROWS=10 WRAP=virtual>$message</TEXTAREA><br>
<i>"._HTMLNOTALLOWED2."</i></td></tr>
<tr><td> </td><td><INPUT type=\"hidden\" name=\"opi\" value=\"ds\">
<INPUT TYPE=\"submit\" NAME=\"submit\" VALUE=\""._SEND."\">
</FORM></td></tr></table>
";
OpenTable();
if ($_POST['opi'] != "ds") {
echo $form_block;
} else {
if (empty($sender_name)) {
$name_err = "<div align=\"center\"><span class=\"option\"><b><em>"._FBENTERNAME."</em></b></span></div>";
$send = "no";
}
if (empty($sender_email)) {
$email_err = "<div align=\"center\"><span class=\"option\"><b><em>"._FBENTEREMAIL."</em></b></span></div>";
$send = "no";
}
// By Phosky
if ($select1=="0") {
$seleccerror1 = "<div align=\"center\"><span class=\"option\"><b><em>"._ERRORSELECCION1."</em></b></span></div><br>";
$send = "no";
}
if ($select2=="0") {
$seleccerror2 = "<div align=\"center\"><span class=\"option\"><b><em>"._ERRORSELECCION2."</em></b></span></div><br>";
$send = "no";
}
if (empty($nombre_war)) {
$nomwar_err = "<div align=\"center\"><span class=\"option\"><b><em>"._FBENTERNOMWAR."</em></b></span></div><br>";
$send = "no";
}
if (empty($fecha_war)) {
$fechawar_err = "<div align=\"center\"><span class=\"option\"><b><em>"._FBENTERFECHAWAR."</em></b></span></div><br>";
$send = "no";
}
if (empty($hora_war)) {
$horawar_err = "<div align=\"center\"><span class=\"option\"><b><em>"._FBENTERHORAWAR."</em></b></span></div><br>";
$send = "no";
}
// EOF By Phosky
if (empty($message)) {
$message_err = "<div align=\"center\"><span class=\"option\"><b><em>"._FBENTERMESSAGE."</em></b></span></div>";
$send = "no";
}
if ($send != "no") {
$sender_name = removecrlf(filter($sender_name, "nohtml"));
$sender_email = removecrlf(filter($sender_email, "nohtml"));
// By Phosky
$nombre_war = removecrlf(filter($nombre_war, "nohtml"));
$fecha_war = removecrlf(filter($fecha_war, "nohtml"));
$hora_war = removecrlf(filter($hora_war, "nohtml"));
$message = filter($message, "nohtml");
$msg = "$sitename\n\n";
$msg = "<HTML>\n";
$msg .= "<BODY>\n";
$msg = "$sitename\n\n";
$msg .= "<table border='0' cellspacing='5'>\n";
$msg .= "<tr><td align='right'><b><b>"._SENDERNAME.":</b><td align='left'>$sender_name</td></tr>\n";
$msg .= "<tr><td align='right'><b>"._SENDEREMAIL.":</b><td align='left'>$sender_email</td></tr>\n";
$msg .= "<tr><td align='right'><b>"._SENDERWAR.":</b><td align='left'>$nombre_war</td></tr>\n";
$msg .= "<tr><td align='right'><b>"._SENDERFECHAWAR.":</b><td align='left'>$fecha_war</td></tr>\n";
$msg .= "<tr><td align='right'><b>"._SENDERHORAWAR.":</b><td align='left'>$hora_war</td></tr>\n";
$msg .= "<tr><td align='right'><b>"._MESSAGE.":</b><td align='left'>$message</td></tr>\n";
$msg .= "</table>\n";
$msg .= "</BODY>\n";
$msg .= "</HTML>\n";
if ($select1 == "Primera División") {
$to = "[email protected]";
}
else if ($select1 == "Segunda División") {
$to = "[email protected]";
}
else if ($select1 == "Tercera División") {
$to = "[email protected]";
}
// EOF By Phosky
$mailheaders = "From: $sender_name <$sender_email>\r\n" . "Reply-To: $sender_email\r\n" . "Return-path: $sender_email\r\n" . "MIME-Version: 1.0\n" . "Content-type: text/plain; charset=iso-8859-1";
mail($to, $subject, $msg, $mailheaders);
echo "<p><div align=\"center\">"._FBMAILSENT."</div></p>";
echo "<p><div align=\"center\">"._FBTHANKSFORCONTACT."</div></p>";
} elseif ($send == "no") {
OpenTable2();
if (!empty($name_err)) { echo "$name_err"; }
if (!empty($email_err)) {echo "$email_err"; }
// By Phosky
if (!empty($nomwar_err)) {echo "$nomwar_err"; }
if (!empty($seleccerror1)) {echo "$seleccerror1"; }
if (!empty($seleccerror2)) {echo "$seleccerror2"; }
if (!empty($fechawar_err)) {echo "$fechawar_err"; }
if (!empty($horawar_err)) {echo "$horawar_err"; }
// EOF By Phosky
if (!empty($message_err)) {echo "$message_err"; }
CloseTable2();
echo "<br><br>";
echo $form_block;
}
}
CloseTable();
include("footer.php");
?>
Este php envía por email un formulario. La complicación del archivo es que mira que no haya HTML, que no estén vacíos los campos, y que al estarlos salga un error.
Lo que intento hacer ahora, es implementar un código que envíe adjuntos por email. He probado varios códigos, y lo más próximo que he estado, ha sido que se me envíen emails sin datos, aunque sí con los adjuntos.
La cuestión es que no lo termino de implementar del todo...
El php que he estado usando ha sido este:
Código PHP:
<?php
function form_mail($sPara, $sAsunto, $sTexto, $sDe)
{
$bHayFicheros = 0;
$sCabeceraTexto = "";
$sAdjuntos = "";
if ($sDe)$sCabeceras = "From:".$sDe."\n";
else $sCabeceras = "";
$sCabeceras .= "MIME-version: 1.0\n";
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-1\n";
$sCabeceraTexto .= "Content-transfer-encoding: 7BIT\n";
$sTexto = $sCabeceraTexto.$sTexto;
}
if ($vAdjunto["size"] > 0)
{
$sAdjuntos .= "\n\n----_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);
}
}
if ($bHayFicheros)
$sTexto .= $sAdjuntos."\n\n----_Separador-de-mensajes_----\n";
return(mail($sPara, $sAsunto, $sTexto, $sCabeceras));
}
//cambiar aqui el email
if (form_mail("[email protected]", $_POST[asunto],
"Los datos introducidos en el formulario son:\n\n", $_POST[email]))
echo "Su formulario ha sido enviado con exito";
?>
El problema es que hay varias cosas (como las cabeceras, en mi caso "mailheaders", que son diferentes a mi código, y no consigo hacer que funcione.
A ver si alguien me puede ayudar, yo ya no sé qué más hacer.
Ah, sí, no quiero usar phpMailer :S
Saludos!