PHP 8.4.0 RC4 available for testing

Configurações em Execução

O comportamento destas funções é afetado pelas configurações do php.ini.

Opções de configuração da função Mail
Nome Padrão Modificável Registro de Alterações
mail.add_x_header "0" INI_PERDIR  
mail.log NULL INI_SYSTEM|INI_PERDIR  
mail.force_extra_parameters NULL INI_SYSTEM|INI_PERDIR  
SMTP "localhost" INI_ALL  
smtp_port "25" INI_ALL  
sendmail_from NULL INI_ALL  
sendmail_path "/usr/sbin/sendmail -t -i" INI_SYSTEM  
Para mais detalhes e definições dos modos INI_*, consulte os Onde uma configuração deve ser definida.

Aqui está uma breve explicação das diretivas de configuração.

mail.add_x_header bool

Adiciona X-PHP-Originating-Script que incluirá o UID do script seguido pelo nome do arquivo.

mail.log string

O caminho para o arquivo de registro que irá armazenar todas as chamadas à função mail(). As entradas de registro incluirão o caminho completo do script, número da linha, endereço de destino To e cabeçalhos.

mail.force_extra_parameters string

Força a adição de parâmetros específicos que serão passados como parâmetros extras para o binário sendmail. Estes parâmetros sempre substituirão o valor do quinto parâmetro da função mail().

SMTP string

Usado somente no Windows: nome de servidor ou endereço IP do servidor SMTP que o PHP deve usar para e-mail envio com a função mail().

smtp_port int

Usado somente no Windows: Número da porta para se conectar ao servidor definido com a configuração de SMTP ao enviar e-mail com a função mail(); a porta padrão é 25.

sendmail_from string

Qual endereço de e-mail "From:" deve ser usado no e-mail enviado diretamente via SNMP (somente Windows). Esta diretiva também define o cabeçalho "Return-Path:".

sendmail_path string

Onde o programa sendmail pode ser encontrado, normalmente em /usr/sbin/sendmail ou /usr/lib/sendmail. configure faz uma tentativa de localizar e definir o padrão, mas se ele falhar, pode ser definido aqui.

Sistema que não usam o sendmail devem configurar essa diretiva para a alternativa ao sendmail que o sistema oferece, se houver. Por exemplo, usuários do » Qmail normalmente usam /var/qmail/bin/sendmail ou /var/qmail/bin/qmail-inject.

qmail-inject não requer nehuma opção para o processar o e-mail corretamente.

Esta diretiva também funciona no Windows. Se definida, smtp, smtp_port e sendmail_from são ignorados e o comando especificado é executado.

adicione uma nota

Notas Enviadas por Usuários (em inglês) 4 notes

up
26
elitescripts2000 at yahoo dot com
10 years ago
On Ubuntu 13.04, not sure of the other Distros.

If you simply uncomment the default:

sendmail_path = "sendmail -t -i"

Your mail() functions will all fail. This is because, you should place the FULL PATH (i.e. /usr/sbin/sendmail -t -i )

The documentation states PHP tries it's best to find the correct sendmail path, but it clearly failed for me.

So, always enter in the FULLPATH to sendmail or you may get unexpected failing results.

As a secondary note: Those that just want to ENFORCE the -f parameter, you can do so in php.ini using:

mail.force_extra_parameters = -fdo_not_reply@domain.tld

You can leave the sendmail path commented out, it will still use the defaults (under UNIX -t -i options which if you look them up are very important to have set)....

But, now there is no way to change this, even with the 5th argument of the mail() function. -f is important, because if NOT set, will be set to which ever user the PHP script is running under, and you may not want that.

Also, -f sets the Return-Path: header which is used as the Bounce address, if errors occur, so you can process them. You you can not set Return-Path: in mail() headers for some reason... you could before. Now you have to use the -f option.
up
3
jscholz at wisc dot edu
2 years ago
The documentation should be made clear that sendmail does NOT default to -t -i when using just /usr/sbin/sendmail. You literally need to specify the options.

I know this might seem like a no-brainer but I wasted hours trying to get mail() to work only to discover that the sendmail program is NOT passed -t and -i by default as stipulated in the documentation.
up
-1
php dot net at ii0 dot net
7 years ago
If anyone gets this cryptic error message in the PHP error logs:
"sh: -t: command not found"
after upgrading from PHP 5.4, this may be the solution for you.

I upgraded PHP from 5.4 to 5.6 and all our mail() functionality suddenly broke, with no useful error logging.

If this is you, and you've been using ini_set() to set the "sendmail_path" then note that even though it's apparently not mentioned in the upgrade documentation -- or anywhere else I could find on php.net (or a dozen forums) -- you'll now need to go set the sendmail_path in your php.ini file; it is now ignored if you use ini_set() to specify a path to the sendmail binary on the fly.

So, just specify "sendmail_path" in php.ini instead. That's all there is to it -- that fixed all the mail() functionality for us.

Hope this little note saves someone else as much time as I spent troubleshooting and researching. Cheers!
up
-3
Mark Simon
5 years ago
It is worth reiterating that, as stated above, sendmail_path also works for Windows, overriding other Windows SMTP settings.

The comment in php.ini, “For Unix only”, does not make that clear.

This makes it relatively easy to substitute a fake sendmail program or even a shell script/batch file to save mail to a text file.

I use this technique when teaching or testing in PHP.
To Top