Como configuro o PHP para enviar email no Apache? (Janelas)

Como configuro o PHP para enviar email no Apache? (Janelas)

Estou configurando um servidor Apache (2.2.14) no Windows e pegando emprestadas ideias de uma configuração XAMPP existente. Agora estou tentando configurar a funcionalidade de e-mail para PHP (5.3.1). (Ele precisa ser capaz de lidar com anexos, assim como o servidor XAMPP.)

Percebi que o XAMPP vem comsendmail falso para Windows, mas várias coisas sobre a configuração não fazem sentido para mim.

Aqui estão algumas linhas do XAMPP php.ini:

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

Isso é estranho porque:

  • Diz explicitamente "somente para Unix", mas
    • Continuo vendo tutoriais que dizem para usar esta linha para Windows, e
    • o caminho do arquivo de exemplo nem faria sentido no Unix
  • sendmail_pathé comentado por padrão

Eu me perguntei se sendmail.exeé mesmo necessário. Portanto, no meu servidor Apache personalizado, que não possui sendmail.exe, editei php.inipara adicionar as informações corretas para SMTP, smtp_porte sendmail_from. Com isso, foi possível enviar correspondência! Mas é muito lento.

Então voltei ao servidor XAMPP e renomeei o sendmaildiretório, esperando desabilitar o sendmail. Isso funcionou - meu script PHP alegou ter sido enviado, mas nada aconteceu.

Então estou muito confuso.

  • Meu servidor XAMPP comentou sendmail_path, mas aparentemente ainda usa o programa para o qual aponta. Como isso sabe?
  • Meu servidor Apache não tem nada sendmail_path, mas de alguma forma pode enviar e-mails sem ele. Como isso acontece?

O que realmente preciso fazer para configurar o servidor Apache para enviar e-mails?

Responder1

Depois de mais pesquisas e testes, parece que:

  1. No Windows, a função mail() do PHP não precisa necessariamente entregar o email para outro programa no mesmo computador; ele pode se conectar a um servidor de e-mail sozinho

  2. Isto, no entanto, é ineficiente e lento.

  3. Configurandoemail falsona máquina do servidor e apontar php.inia sendmail_pathdiretiva para ele torna o envio de e-mail muito mais rápido. Pessoalmente, imagino sendmail.exemastigar os dados em pedaços agradáveis ​​e digeríveis e cuspir na boca do servidor de e-mail como uma mãe pássaro alimentando seu bebê. Hummm! Mas talvez eu esteja louco.

  4. Se você colocar sendmail.exeem C:\usr\bin, isso permitirá que alguns programas que esperam ser executados em um sistema operacional baseado em Unix sejam executados no Windows

Aqui estáalgumas informações no manual do PHPisso me ajudou a resolver isso.

Nota: A implementação de mail() no Windows difere em muitos aspectos da implementação do Unix. Primeiro, ele não usa um binário local para compor mensagens, mas opera apenas em soquetes diretos, o que significa que um MTA é necessário para escutar em um soquete de rede (que pode estar no host local ou em uma máquina remota).

E...

Nota: É importante notar que a função mail() não é adequada para volumes maiores de e-mail em loop. Esta função abre e fecha um soquete SMTP para cada email, o que não é muito eficiente. Para o envio de grandes quantidades de e-mail, consulte os pacotes » PEAR::Mail e » PEAR::Mail_Queue.

Responder2

O Apache não está realmente envolvido em nenhuma configuração de envio de email. Isso é tratado completamente pelo PHP e, neste caso, pelo MTA local. O MTA será Sendmail ou Postfix quase sempre. A configuração para isso está no arquivo php.ini na seção [função de email] chamada sendmail_path.

informação relacionada