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.ini
para adicionar as informações corretas para SMTP
, smtp_port
e sendmail_from
. Com isso, foi possível enviar correspondência! Mas é muito lento.
Então voltei ao servidor XAMPP e renomeei o sendmail
diretó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:
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
Isto, no entanto, é ineficiente e lento.
Configurandoemail falsona máquina do servidor e apontar
php.ini
asendmail_path
diretiva para ele torna o envio de e-mail muito mais rápido. Pessoalmente, imaginosendmail.exe
mastigar 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.Se você colocar
sendmail.exe
emC:\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.