¿Cómo configuro PHP para enviar correo electrónico en Apache? (ventanas)

¿Cómo configuro PHP para enviar correo electrónico en Apache? (ventanas)

Estoy configurando un servidor Apache (2.2.14) en Windows y tomando prestadas ideas de una configuración XAMPP existente. Ahora estoy intentando configurar la funcionalidad de correo electrónico para PHP (5.3.1). (Debe poder manejar archivos adjuntos, tal como lo hace el servidor XAMPP).

He notado que XAMPP viene consendmail falso para Windows, pero varias cosas sobre la configuración no tienen sentido para mí.

Aquí hay un par de líneas de XAMPP php.ini:

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path = "C:\xampp\sendmail\sendmail.exe -t"

Esto es extraño porque:

  • Dice explícitamente "sólo para Unix", pero
    • Sigo viendo tutoriales que dicen usar esta línea para Windows, y
    • la ruta del archivo de ejemplo ni siquiera tendría sentido en Unix
  • sendmail_pathestá comentado de forma predeterminada

Me preguntaba si sendmail.exees siquiera necesario. Entonces, en mi servidor Apache personalizado, que no tiene sendmail.exe, edité php.inipara agregar la información correcta para SMTP, smtp_porty sendmail_from. ¡Con eso, pudo enviar correo! Pero es muy lento.

Luego volví al servidor XAMPP y cambié el nombre del sendmaildirectorio, con la esperanza de desactivar sendmail. Eso funcionó: mi script PHP afirmó haberse enviado, pero no pasó nada.

Entonces estoy muy confundido.

  • Mi servidor XAMPP ha sendmail_pathcomentado, pero aparentemente todavía usa el programa al que apunta. ¿Cómo lo sabe?
  • Mi servidor Apache no tiene nada sendmail_path, pero de alguna manera puede enviar correo sin él. ¿Como hace eso?

¿Qué necesito hacer realmente para configurar el servidor Apache para enviar correos electrónicos?

Respuesta1

Después de más búsquedas y pruebas, parece que:

  1. En Windows, la función mail() de PHP no necesariamente necesita entregar el correo electrónico a otro programa en la misma computadora; puede conectarse a un servidor de correo por sí mismo

  2. Sin embargo, esto es ineficiente y lento.

  3. Configurandocorreo falsoen la máquina del servidor y señalarle php.inila sendmail_pathdirectiva hace que el envío de correo electrónico sea mucho más rápido. Personalmente, me imagino sendmail.exemasticando los datos en pedazos agradables y digeribles y escupiéndolos en la boca del servidor de correo como una mamá pájaro alimentando a su bebé. ¡Mmmm! Pero tal vez estoy loco.

  4. sendmail.exeSi ingresa C:\usr\bin, esto permite que algunos programas que esperan ejecutarse en un sistema operativo basado en Unix se ejecuten en Windows

Aquí estáalgo de información en el manual de PHPeso me ayudó a resolver esto.

Nota: La implementación de mail() en Windows difiere en muchos aspectos de la implementación de Unix. En primer lugar, no utiliza un binario local para redactar mensajes, sino que solo opera en sockets directos, lo que significa que se necesita un MTA escuchando en un socket de red (que puede estar en el host local o en una máquina remota).

Y...

Nota: Vale la pena señalar que la función mail() no es adecuada para grandes volúmenes de correo electrónico en un bucle. Esta función abre y cierra un socket SMTP para cada correo electrónico, lo cual no es muy eficiente. Para enviar grandes cantidades de correo electrónico, consulte los paquetes » PEAR::Mail y » PEAR::Mail_Queue.

Respuesta2

Apache no participa realmente en ninguna configuración para el envío de correo electrónico. Esto lo maneja completamente PHP y, en este caso, el MTA local. El MTA será Sendmail o Postfix casi siempre. La configuración para esto se encuentra en el archivo php.ini en la sección [función de correo] llamada sendmail_path.

información relacionada