Foros del Web » Programando para Internet » PHP »

Problema con script mail()

Estas en el tema de Problema con script mail() en el foro de PHP en Foros del Web. Tengo una página en un servidor compartido y envio correo a cerca de 27.000 pesonas, un periodico virtual empresarial, uno económico y uno de salud, ...

  #1 (permalink)  
Antiguo 09/10/2004, 12:44
 
Fecha de Ingreso: marzo-2003
Ubicación: Bogotá
Mensajes: 199
Antigüedad: 14 años, 9 meses
Puntos: 0
Problema con script mail()

Tengo una página en un servidor compartido y envio correo a cerca de 27.000 pesonas, un periodico virtual empresarial, uno económico y uno de salud, en la base de datos mi cliente escoje cual de los tres quiere, si quiere dos o los tres, estuvo funcionando perfectamente durante mas de un año, pero se comenzo a caer el servidor cuando enviaba esos correos, y mi servidor me amenaza con bajar la página definitivamente (ya la ha bajado dos veces) que otro sistemas puedo utilizar para enviar estos correos sin que sea muy dificil el cambio??? los del server me dicen que utilice mailman pero no se si se pueda integrar a la BD que poseo actualmente, por favor ayuda.

Gracias.
  #2 (permalink)  
Antiguo 09/10/2004, 12:54
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
(disculpa la ignorancia ..) pero .. que es "mailman"?

Bueno .. el caso es que tal vez PHP como lenguaje interpretado que es no sea lo mejor para ese proceso .. tal vez te vendría bien usar Perl para tal fin o u otro CGI (en C o similar).

Por otro lado ... no es tanto el proceso de "PHP" en sí sino del servidor SMTP que uses (o sendmail) en ese servidor. Si a ellos no les "aguanta" el servidor SMTP que usan para enviar el e-mail .. podrías usar servidores SMTP própios para hacer el envio del e-mail (ya sea de otro proveedor que te preste el servicio .. o uno dedicado para ti). En ese caso podrías usar classes como:

PHP Mailer
http://phpmailer.sourceforge.net

que entre otras cosas, permiten "balancear" la carga de envio de e-mails repartiendola entre vários servidores SMTP simultáneamente. Así no "saturas" un sólo servidor SMTP sino que usarías vários.

Un saludo,
  #3 (permalink)  
Antiguo 09/10/2004, 13:40
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
x cluster y Cesar24...

yo necesito enviar a menos personas,unas 125 (x 3 bases de datos). no creo que por eso se cauga el servidor, pero si que me da error y no se envian todos pq me paso de tiempo de ejecucion del script. como podria hacerlo?

podria enviarlo desde mi servidor php de mi portatil?

echarme un cable, necesito hacer este envio!!

salu2
  #4 (permalink)  
Antiguo 09/10/2004, 13:47
 
Fecha de Ingreso: marzo-2003
Ubicación: Bogotá
Mensajes: 199
Antigüedad: 14 años, 9 meses
Puntos: 0
Donde puedo obtener servidores SMT propios?

mailman es un servicio de emails que tiene ellos (Mi server)

Donde puedo obtener servidores SMT propios o dedicados ???

Gracias.
  #5 (permalink)  
Antiguo 09/10/2004, 13:50
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
Cesar, como conseguias enviar 27.000 mails??? a mi se me bloquea, problema con tiempo excedido de script.como lo hacias tu???

ayudame
  #6 (permalink)  
Antiguo 09/10/2004, 14:47
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 13 años, 2 meses
Puntos: 5
Es cierto lo que dice ferranWEB... al pasar 30 segundos el script se bloquea. La verdad no se por qué pasa esto y cómo evitarlo.

Sin embargo, con respecto lo de tus mails, puedes bajarte un servidor SMTP a tu PC e instalarlo, entre ellos tienes:

QK SMTP Server
ArgoSoft SMTP Server
mailEnable
Xmail
miniRelay

mailEnable y Xmail son muy potentes, diseñados para servidores etc... Yo uso miniRelay y me va bien para mandar correos. Luego de que instales tu servidor SMTP, instala Apache en tu PC junto con phpMyAdmin, SQL Server, etc... y configura tus scripts para que usen tu localhost como servidor de salida.

Supongo que tendrás que bajarte la base de datos o realizar una conexión remota desde tu PC. Un saludo!
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #7 (permalink)  
Antiguo 09/10/2004, 16:50
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
takitei, podrias echarme un cable con eso? si quieres te paso por privado mi mail y me ayudas..

salu2
  #8 (permalink)  
Antiguo 10/10/2004, 07:56
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 13 años, 2 meses
Puntos: 5
Ok perfecto. No hay problema.
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #9 (permalink)  
Antiguo 11/10/2004, 07:32
 
Fecha de Ingreso: julio-2002
Ubicación: Valencia estado Carabobo
Mensajes: 18
Antigüedad: 15 años, 5 meses
Puntos: 0
Takitei..revisa el archivo de configuracion de php y busca la variable "max_execution_time" en estos momentos debe tener el valor "30" el cual es el limite de tiempo de ejecucion del script aumentalo a 1200 eso te dara unos 20 minutos de ejecucion...quizas sea mucho tiempo pero asi no tendras de que preocuparte.
  #10 (permalink)  
Antiguo 11/10/2004, 09:24
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 13 años, 2 meses
Puntos: 5
Perfecto, no sabía eso. Mil gracias Luis!...
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #11 (permalink)  
Antiguo 12/10/2004, 07:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por ferranWEB
x cluster y Cesar24...

yo necesito enviar a menos personas,unas 125 (x 3 bases de datos). no creo que por eso se cauga el servidor, pero si que me da error y no se envian todos pq me paso de tiempo de ejecucion del script. como podria hacerlo?

podria enviarlo desde mi servidor php de mi portatil?

echarme un cable, necesito hacer este envio!!

salu2
En principio (creo que ya te lo han comentado) el tiempo máximo de ejecución de un script se puede variar con la función:

set_time_limit()
www.php.net/set_time_limit

pero que puedas ejecutar esa función .. dependerá de la configuración de PHP .. Creo que en modo seguro ("safe_mode") no se puede usar dicha función o no tiene efecto. En tal caso tendrás que contactar a tu proveedor a ver como solventan el problema .. (si ellos cambian la configuración de PHP, o te hacen una configuración a medida.. etc).

Un saludo,
  #12 (permalink)  
Antiguo 12/10/2004, 10:49
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 13 años, 2 meses
Puntos: 5
BUeno, principalmente mando correos usando mi propio SMTP en mi PC. Asi que modifiqué mi propio php.ini y listo. No me interesa el tiempo de ejecución de mi servidor virtual porque sinceramente no uso el servidor para scripts muy largos.

Gracias Cluster. Un saludo!
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #13 (permalink)  
Antiguo 12/10/2004, 11:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por Takitei
BUeno, principalmente mando correos usando mi propio SMTP en mi PC. Asi que modifiqué mi propio php.ini y listo. No me interesa el tiempo de ejecución de mi servidor virtual porque sinceramente no uso el servidor para scripts muy largos.

Gracias Cluster. Un saludo!
El problema de "tocar" tu php.ini para ese tipo de cosas es que la configuración afecta a todo script que corras en tu servidor .. Lo que pueda ser bueno para un determinado script tal vez no lo sea para otro. Por eso es recomendable actuar sobre el "php.ini" con cautela.

Si te fijas .. son muy contados los scripts que realmente necesiten mucho tiempo de ejecución (más allá de los 30 segunos que PHP tiene por defecto salvo que lo modifiques) .. así que tal vez desarrollando otra aplicación tengas algún día un problema con un bucle o similar y te quedes esperando un rato a ver cual es el error y/o cuelgues el servidor por algún problema de ese tipo. Por eso, en algunos casos es bueno ajustar la configuración de un script en concreto para ese tiempo de ejecución (sea con funciones própias para tal fin como la de set_time_limit() o bien en otras ocasiones por un ini_set() ...)

Un saludo,
  #14 (permalink)  
Antiguo 12/10/2004, 11:12
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
Cluster, en miproveedor me comentan q esos datos no los pueden modificar. el mismo script q ejecuto en el proveedor, se podria ejecutar desde mi portatil, es decir, hacerlo funcionar en mi servidor donde hago las prubeas de mi php??

salu2
  #15 (permalink)  
Antiguo 12/10/2004, 11:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por ferranWEB
Cluster, en miproveedor me comentan q esos datos no los pueden modificar. el mismo script q ejecuto en el proveedor, se podria ejecutar desde mi portatil, es decir, hacerlo funcionar en mi servidor donde hago las prubeas de mi php??

salu2
Si, .. claro . .si tu tienes el control de tu servidor podrías hacer esas modificaciones al php.ini o simplemente usar esa función set_time_limit() (si es que trabajas a safe_mode a OFF .. lo cual hasta eso podrías cambiarlo si corresponde).

Un saludo,
  #16 (permalink)  
Antiguo 12/10/2004, 11:25
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
ok cluster, pero mi duda es, la funcion mail, funciona a modo local?? cuando ejecuto el script en el servidor, y le digo q me envie un mail de confirmacion, me encia un host.servidor.. pensaba que para hecr poder correr el script, necesitaba de un servidor web en internet.

asi que desde mi pc, puedo hacerlo funcionar igual?

salu2
  #17 (permalink)  
Antiguo 12/10/2004, 11:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Sea en modo local o no .. mail() de PHP (PHP en sí) no incorpoara un servidor SMTP que es lo que necesitas para el e-mail realmente salga de PHP hacia su destino.

PHP tan sólo entrega el e-mail al MTA disponieble donde se indique en la configuración de PHP (SMTP= ....)... Así que si haces pruebas locales tendrás que instalar en tu PC "servidor" un servidor SMTP (con eso sobra . .no hace falta uno POP/IMAP). En este mismo mensaje creo que te han recomendado unos cuantos.

Cuando generas un e-mail si usas la opción "confirmación" la dirección que apuntas es una cuenta de e-mail de donde te dé la gana .. por ejemplo cualquiera de las que ya uses (por eso es independiente de por donde envias). Lo mismo haces con el "FROM" (de) o cualquier otra cabecera que uses donde tengas que indicar un e-mail. Eso sí .. algunos filtros de anti-spam tipo hotmail comparan el domino del "FROM" ([email protected]) con el registro MX de la IP que envió el e-mail .. si no son iguales .. derechito va tu e-mail a "correo masivo" o "Spam" ... En tu "casa" no vas a tener un domino asignado a tu IP "tal vez dinámica" y un registro MX para ese dominio .. así que si haces pruebas y observas que todo cae al "correo masivo" no te "asustes".


Un saludo,
  #18 (permalink)  
Antiguo 12/10/2004, 11:38
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
como instalalo el servidor SMTP? tengo q añadir algo a mi script?
  #19 (permalink)  
Antiguo 12/10/2004, 11:45
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
ferrranWeb .. un servidor SMTP es un programa que debes instalar en tu servidor!!!!! (PC)

La configuración de PHP se limita a asegurarte que en tu php.ini tenga en SMTP = localhost (o la IP local de ese PC que tenga ese servidor SMTP instalado).

Un saludo,
  #20 (permalink)  
Antiguo 12/10/2004, 11:50
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
yo en mi empresa dispongo de iuna IP Fija. esto ayuda?

donde consigo un servidor SMTP?
  #21 (permalink)  
Antiguo 12/10/2004, 12:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Lee los mensajes de este mismo tema .. se han sugerido muchos .. Todo depende del S.O. de tu servidor .. para windows: QK SMTP server, etc . .(usa google!!!)

Hasta podrías usar el servidor SMTP de tus cuentas de tu empresa .. en tal caso eso lo configurarias en el apartado SMTP de php.ini para poder hacer que mail() use ese servidor SMTP . pero si requiere autentificación (será lo normal) usa PHP Mailer ...

Un saludo,
  #22 (permalink)  
Antiguo 12/10/2004, 13:20
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
Cluster,me he instalado en mi pc un pack apache, que lleva el mysql, el php, y el phpmyadmin.

he cargado mi bd en el phpmyadmin, he conseguido hacer funcionar el script en php, pero no me envia nada al mail. m,e lo da como enviado, pero no recibo nada...

que tengo que modificar en mi c:\\WINNT\php.ini para que me funcione?

salu2
  #23 (permalink)  
Antiguo 12/10/2004, 14:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero .. ferranWEB .. decide que servidor SMTP vas a usar.

Tienes dos opciones como ya te he comentado:

1) Te instalas un servidor SMTP en tu PC (eso no lo trae tu "pack" .. y si lo usa tendrás que averigüarlo tu mismo .. )

2) Usas el servidor SMTP de tu cuenta de e-mail tipo "SMTP/POP" (no yahoo, ni gmail .. ni hotmail .. ni otras cuentas de e-mail con sólo acceso por "webmail" )..

Cuando tengas claro eso .. en tu php.ini tienes que indicar en la directiva:

SMTP = ... la dirección de tu servidor SMTP que uses

SI usas la opción (1) será "localhost" o 127.0.0.1 o la IP local de ese PC ya que se supone que ahí mismo instalarías tu servidor SMTP (software).

Si usas la opción (2) será "smtp.tuISP.com" o "mail.nose.com" o algo así. En este último caso .. si tu cuenta de e-mail requiere autentificación para usarla .. tendrás que usar PHP Mailer o alguna classe similar (http://phpmailer.sourceforge.net) .. La función mail() de PHP NO te servirá pues no permite autentificación para este caso.

Un saludo,
  #24 (permalink)  
Antiguo 12/10/2004, 15:27
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 13 años, 2 meses
Puntos: 5
ferranWEB ya instaló un server SMTP, el miniRelay. Sin embargo, él menciona que no le funciona la función mail(), eso quiere decir que debes tener algún error en tu php.ini. Verifica la directiva tal como te dice Cluster y prueba nuevamente.

Si el minRelay te dice que el mensaje fue enviado correctamente, entonces no debería haber problemas. Prueba con otro destinatario y verifica las cabeceras que estás colocando en la función mail().

Un saludo!
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #25 (permalink)  
Antiguo 12/10/2004, 15:38
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Antes de nada .. debería probar su servidor SMTP con algún cliente de correo tipo Outlook por ejemplo .. ahí verá bien los mensajes de error (bueno también los verá en los registros/logs de ese servidor SMTP).

Cuando eso esté claro .. pasa a PHP con la misma configuración que usó para el cliente de correo en php.ini

Por cierto .. ese "miniRelay" puede autentificar para enviar el e-mail? .. si es así asegurense que no requiera autentificación y que el "relay" sea al instante (que lo envie nada más recibirlo) y sobre todo lo dicho .. observar los mensajes de error que dé el servidor SMTP.

Un saludo,
  #26 (permalink)  
Antiguo 12/10/2004, 15:45
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 13 años, 2 meses
Puntos: 5
el miniRelay no requiere autentificación. Lo uso en mi PC para hacer spam y funciona sin problemas.
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #27 (permalink)  
Antiguo 13/10/2004, 02:48
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
Buenas compañeros, no me acabo de salir. os pongo la informacion que tengo puesta en mi php.ini

[mail function]
; For Win32 only.
SMTP = 127.0.0.1
smtp_port = 25<?
$ficheromailscorrectos = fopen("mailscorrectos.txt","w+");
//$fp = fopen($archivo,"w+");
//cabeceras para el envio del mail en html y dire de quien lo envia
set_time_limit(0);
$headers = "MIME-Version: 1.0\r\n";
$headers = "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From:[email protected]\r\n";

$tema=$HTTP_POST_VARS ["tema"];

function mostrar_html($tema, $variables)
{
$cod = implode("", @file($tema));
ob_start();
extract($variables);
eval('?>'.$cod.'<?');
$temp=ob_get_contents();
ob_end_clean();
return $temp;
}


$asunto="Emailing ";

$conecto = mysql_connect("localhost","root","");
mysql_select_db("creasites",$conecto);

$result=mysql_query("SELECT * FROM usuarios ") or die (mysql_error());

while ($query=mysql_fetch_array($result)){

$html_personalizado= mostrar_html($tema, $query);


$emailaenviar=$query['mail'];
$idenviar=$query['id'];
$nombreenviar=$query['nombre'];

$mailenviar= mail($emailaenviar,$asunto, $html_personalizado, $headers);

if ($mailenviar){
fputs($ficheromailscorrectos,$idenviar." ".$emailaenviar." ".$nombreenviar."\r\n");
}
sleep(1);
}//fin while
fclose($ficheromailscorrectos);
?>

y vuelvo a poner el codigo, por si puede ayudar en algo!!

el script me lo da como enviado, pero no me envia nada y me cambia el txt.

salu2
  #28 (permalink)  
Antiguo 13/10/2004, 07:30
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero .. vamos a ver..

Usas un servidor SMTP en tu PC? .. si es así .. has probado por otro médio si realmente funciona el envio de e-mails a traves de el? (como comenté .. configurando Outlook o el cliente de correo que uses para tal fin).

Al enviar un e-mail .. que errores obtienes? (tanto en PHP como mensajes que arroje tu servidor SMTP en su LOG)

Un saludo,
  #29 (permalink)  
Antiguo 14/10/2004, 04:20
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
a ver CLuster,

primero de todo pedir disculpas si no me entero, pero es que el tema del mail me sobrepasa.

el amigo Takitei me hizo instalar el miniRelay. me hizo configurar el smtp del outlook como 127.0.0.1. Cuando envio un mail desde outlook, me funciona el miniRelay. hay que decir que el correo esta bajo un servidor web de mi empresa.

pero cuando ejecuto mi script, que en el mismo servidor de internet me funciona, lo ejecuto en local y me da el archivo como enviado, pero no hace nada el relay, ni recibo nada en mi correo...

entiendes?
  #30 (permalink)  
Antiguo 14/10/2004, 07:30
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero .. en tu miniRelay (tu servidor SMTP) recibes algo (la petición del envio del e-mail) en los log's de ese servidor SMTP?.. Revisalos (si es que los hace) por qué ahí veras dos cosas:
1) que el e-mail sale de PHP y contacta correctamente con tu servidor SMTP (o no)
2) si hay problema en la "entrega" del e-mail, ahí lo veras (en los log's)

Suponemos que el servidor SMTP lo tienes instalado en el mismo PC que corre PHP y que la configuración de mail de php.ini usas:

SMTP = localhost (o 127.0.0.1) (prueba ambos)

Un saludo,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:35.