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.
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
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) –
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