2011-08-27 20 views
5

He configurado una aplicación php/mysql en mi computadora portátil local usando iis7 para realizar pruebas. Uso php mail() para enviar correos electrónicos usando el servicio localhost smtp en el servidor y quiero replicar localmente para realizar pruebas. (Ha estado funcionando bien durante mucho tiempo en el servidor, así que solo quiero replicar localmente para fines de prueba.)Configuración de smtp en windows-7 iis-7.5

Utilizando el artículo de TechNet: http://technet.microsoft.com/en-us/library/cc772058(WS.10).aspx Pude configurar mi configuración de SMTP, sin embargo, todavía no puedo enviar correo electrónico.

He reciclado el servidor varias veces sin ningún efecto.

He ejecutado un netstat -an y no hay nada escuchando en port25- ¿hay algo más que deba hacer para que el servicio smtp esté escuchando en port25?

El error que estoy recibiendo:

PHP Warning: mail() [function.mail]: no pudo conectar con servidor de correo en " localhost " puerto 25, verificar su " SMTP " y " smtp_port " ajuste en php.ini o usar ini_set()

php.ini:

SMTP = localhost 
smtp_port = 25 
+0

No necesita ejecutar un servidor SMTP local para enviar usando 'mail()' a menos que esté tratando de enviar correos electrónicos a una dirección '@ localhost'. ¿Qué error obtienes cuando intentas enviar un correo electrónico? – DaveRandom

+0

No estoy intentando ejecutar un servidor smtp local: quiero escuchar en el host local y pasar el correo al servidor de correo remoto. (que configuré en la función IIS SMTP) –

+0

según ese error, 'mail()' funciona, pero el servidor SMTP lo está rechazando. Lo primero que haría es obtener [Wireshark] (http://www.wireshark.org/) y echar un vistazo al SMTP sin formato que se intercambia. Sin embargo, la advertencia: no se puede escuchar el tráfico en 127.0.0.1 en Wireshark en Windows. Tendrá que rebotar en una máquina remota mientras depura (a menos que salga de su NIC inalámbrica y en su NIC con cable o viceversa ... – DaveRandom

Respuesta

16

Puede usar algo como smtp4dev (http://smtp4dev.codeplex.com/) en lugar de iis para fines de prueba. Funciona como un encanto para mí.

+0

¿Esto significa que la característica SMTP en IIS no funciona? –

+0

Funciona, pero aparentemente no en Windows 7. Esto el sistema de operación viene sin servidor SMTP incorporado. – Dima

+0

Funcionó bien para mí en Win7. – jvenema

2

Windows 7 no incluye el servicio SMTP. Entonces debes usar un producto de terceros. Este ha sido un problema bien conocido, pero no estoy seguro de por qué no lo encontraste buscando en Internet.

+0

diríjase a un documento que indique que la función iis 7.5 smtp no funcionará en Windows 7 sin un servidor SMTP? –

+0

No debe configurar su aplicación y dejar que intente encontrar un servidor SMTP localmente (como se mencionó anteriormente) . Si desea que funcione, debe tener un servidor SMTP ejecutándose localmente. Es de sentido común, y no creo que deba documentarse en alguna parte. –

+0

¿Qué? sentido común para saber que la función SMTP en IIS no proporciona la funcionalidad SMTP? ¿Cómo podría ser de sentido común saber eso ????? –

1

Bueno, estoy de acuerdo con el OP. No es inmediatamente obvio que W7 (incluso Ultimate) se envía sin un servidor SMTP (estoy bastante seguro de que lo teníamos en Vista 64 Ultimate y posiblemente incluso XP), por lo que tendrá que identificar un servidor para usar, ya sea local, o remoto.

Si el servidor no está utilizando la autorización, entonces esto debería funcionar sin tener que perder el tiempo con IIS7 o IIS7 Express:

$smtpserver = 'host.domain.tld'; 
$port = 25; 
$from = '[email protected]'; 
$replyto = $from; 
$headers = 'From: ' . $from . "\r\n" . 'Reply-To: ' . $replyto . "\r\n" . 
    'X-Mailer: PHP/' . phpversion(); 
$to = '[email protected]'; 
$subject = 'Test Message'; 
ini_set('SMTP', $smtpserver); 
ini_set('smtp_port', $port); 
$message = wordwrap("Hello World!", 70); 
$success = mail($to, $subject, $message, $headers); 

Si el servidor utiliza la autorización de texto simple (no TLS/SSL), a continuación, añadir las credenciales puede funcionar, dependiendo de su versión de PHP:

ini_set('username', 'yourusername'); 
ini_set('password', 'yourpwd'); 

Si el servidor impone el uso de TLS/SSL para conectarse con las credenciales, como Gmail hace, entonces el paquete xpm4 Sourceforge es una solución sencilla. Hay dos formas en que podría utilizarlo con Gmail (estos son directamente de los ejemplos que se proporcionan con el paquete):

// manage errors 
error_reporting(E_ALL); // php errors 
define('DISPLAY_XPM4_ERRORS', true); // display XPM4 errors 
// path to 'MAIL.php' file from XPM4 package 
require_once '../MAIL.php'; 
// initialize MAIL class 
$m = new MAIL; 
// set from address 
$m->From('[email protected]'); 
// add to address 
$m->AddTo('[email protected]'); 
// set subject 
$m->Subject('Hello World!'); 
// set HTML message 
$m->Html('<b>HTML</b> <u>message</u>.'); 
// connect to MTA server 'smtp.gmail.com' port '465' via SSL ('tls' encryption) 
// with authentication: '[email protected]'/'password' 
// set the connection timeout to 10 seconds, the name of your host 'localhost' 
// and the authentication method to 'plain' 
// make sure you have OpenSSL module (extension) enable on your php configuration 
$c = $m->Connect('smtp.gmail.com', 465, '[email protected]', 'password', 'tls', 10, 
      'localhost', null, 'plain') 
     or die(print_r($m->Result)); 
// send mail relay using the '$c' resource connection 
echo $m->Send($c) ? 'Mail sent !' : 'Error !'; 
// disconnect from server 
$m->Disconnect(); 

El IIS7 Express (que es lo que estaba usando) módulo FastCGI PHP se instala con el soporte OpenSSL Extensión habilitado Lo anterior le permite usar etiquetas HTML en el contenido de su mensaje.La segunda manera de usar el paquete xpm4 se muestra a continuación, para mensajes de texto de sólo (de nuevo, el ejemplo es de la fuente del paquete):

// manage errors 
error_reporting(E_ALL); // php errors 
define('DISPLAY_XPM4_ERRORS', true); // display XPM4 errors 
// path to 'SMTP.php' file from XPM4 package 
require_once '../SMTP.php'; 
$f = '[email protected]'; // from (Gmail mail address) 
$t = '[email protected]'; // to mail address 
$p = 'password'; // Gmail password 
// standard mail message RFC2822 
$m = 'From: '.$f."\r\n". 
    'To: '.$t."\r\n". 
    'Subject: test'."\r\n". 
    'Content-Type: text/plain'."\r\n\r\n". 
    'Text message.'; 
// connect to MTA server (relay) 'smtp.gmail.com' via SSL (TLS encryption) with 
// authentication using port '465' and timeout '10' secounds 
// make sure you have OpenSSL module (extension) enable on your php configuration 
$c = SMTP::connect('smtp.gmail.com', 465, $f, $p, 'tls', 10) or die(print_r($_RESULT)); 
// send mail relay 
$s = SMTP::send($c, array($t), $m, $f); 
// print result 
if ($s) echo 'Sent !'; 
else print_r($_RESULT); 
// disconnect 
SMTP::disconnect($c); 

Tanto el trabajo anterior con Gmail, a partir de la fecha de este post, usando IIS7 y sin tener que hacer ninguna configuración adicional.

Cuestiones relacionadas