실행시 설정

이 함수의 작동은 php.ini 설정에 영향을 받습니다.

메일 설정 옵션
이름 기본값 설정권한 변경점
mail.add_x_header "0" PHP_INI_ALL PHP 5.3.0부터 사용 가능.
mail.log "" PHP_INI_ALL PHP 5.3.0부터 사용 가능.
SMTP "localhost" PHP_INI_ALL  
smtp_port "25" PHP_INI_ALL  
sendmail_from NULL PHP_INI_ALL PHP 4.3.0부터 사용할 수 있습니다.
sendmail_path "/usr/sbin/sendmail -t -i" PHP_INI_SYSTEM  
PHP_INI_* 모드에 대한 상세와 정의는 Where a configuration setting may be set를 참고하십시오.

위 설정 지시어에 대한 간단한 설명입니다.

mail.add_x_header bool

스크립트의 UID와 파일명을 가지는 X-PHP-Originating-Script를 추가합니다.

mail.log string

모든 mail() 호출에 대하여 스크립트 경로, 줄 수, To 주소, 헤더를 기록합니다.

SMTP string

윈도우에서만 사용합니다: PHP가 mail() 함수를 사용하여 메일을 보낼때 사용할 SMTP 서버의 호스트 이름이나 IP 어드레스.

smtp_port int

윈도우에서만 사용합니다: mail()로 메일을 보낼 때 SMTP 설정에서 지정한 서버에 접속하기 위한 포트 번호; 기본값은 25. PHP 4.3.0부터 사용할 수 있습니다.

sendmail_from string

윈도우에서 PHP가 메일을 보낼 때 "From:"에 붙이는 메일 주소. 이 지시어는 "Return-Path:" 헤더도 설정합니다.

sendmail_path string

sendmail 프로그램이 있는 위치. 보통 /usr/sbin/sendmail이나 /usr/lib/sendmail. configure가 이 위치를 찾아서 기본값을 설정하지만, 실패했을 때는 이곳에 설정해야 합니다.

센드메일을 사용하지 않는 시스템은 이 지시어를 메일 시스템이 제공하는 센드메일 랩퍼/교체자로 설정해야합니다. 예를 들어, » Qmail 사용자는 일반적으로 /var/qmail/bin/sendmail이나 /var/qmail/bin/qmail-inject으로 설정합니다.

qmail-inject는 메일을 정확하게 처리하기 위한 어떠한 옵션도 필요하지 않습니다.

이 지시어는 윈도우에서도 작동합니다. 설정하면, smtp, smtp_port, sendmail_from을 무시하고 지정한 명령을 실행합니다.

add a note add a note

User Contributed Notes 8 notes

up
32
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
-2
php dot net at ii0 dot net
8 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
-6
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.
up
-15
A Austin
12 years ago
For linux you can over-ride the default "From" for the outgoing emails by including in php.ini this line:

sendmail_path = "/usr/sbin/sendmail -t -i -f fromMe@blah.com"

The path should work for most linux installations.
up
-15
phpnote-mail at revmaps dot no-ip dot org
8 years ago
setting return path:

Return-path header does not work because it is not part of smtp.

on *nix -f may be set on the mail command
alternatively
some MTAs accept mbox-style "From " header on the first header line
note: no colon after "From" , must be the first header line
or  you may be able to re-configure you MTA to interpret return-path headers

-f is the most reliable method but it may mean that you can't set any other command-line option due to shell escaping problems.

also note that email formatting requirements differ between windows and everything else. sendmail expects only \n line-endings
up
-20
blueshibuyadream at gmail dot com
11 years ago
On Darwin OS such as OSX (current one: 10.8.3) you need to add a specific command and option to the sendmail_path constant if you have downloaded and installed a mamp with a stack.

Indeed you can see the required libraries for PHP, Apache, MySQL in "common/lib" folder. The problem is when you run an external command using these libraries, for example "sendmail". It could be a problem if it gets the stack libraries and not the system ones (different versions, etc).

The "env -i" command clean the Stack environment variables and run "sendmail" with the system libraries.

Hope this helps.
up
-8
torsar at gmail dot com
1 year ago
Ненавижу всякие денверы и ёбн серверы.

У меня голый апач на винде 10 и на нем 6 версий пхп от 5.6 до самой последней. :)
Все устанавливается и конфигиться за минуты. :)
Все версии пхп конфигяться отдельно и работают одновременно. На разных виртуальных хостах и портах.
Не надо ничего переключать и перезапускать.

У меня еще есть виртуальная машина(WmVare) c FreeBSD 13.
Там, например, Redis.
С пхп на винде все работает.

Так вот вопрос:
можно ли юзать sendmail с виртуальной машины на юниксе
в пхп на винде?
Было бы замечательно!!!

Зы в идеале хочу перенести апач с пхпями на виртуальную машину с юникс.
А загружать пхп скрипты с браузера под виндой.
Там уже установлен апач и последняя версия пхп.
И еще perl и Go. (Зачем не знаю. :) Было по приколу поковырять конфиги и понастраивать :) )

Но пока не разобрался как в юниксах подтянуть к голому апачу несколько версий пхп. :(
To Top