问题描述
当我使用终端发送电子邮件时,工作正常。我使用以下命令:
echoSubject:test| / usr / lib / sendmail -v [email protected]
但是当我在PHP中尝试这样做:
PHP文档:
<?php bool mail $ to,string $ subject,string $ message [,string $ additional_headers [,string $ additional_parameters]])?>
MY IMPLEMENTATION:
<?php mail([email protected],我的主题,我的留言内容,From:[email protected]); ?>
,那么它不工作。这是为什么?我想这与PHP php.ini文件有关吗?
所有配置:
-
打开php.ini:
nano /etc/php5/apache2/php.ini
-
取消注释sendmail_path并写:
sendmail_path = / usr / sbin / sendmail
-
取消注释sendmail_from并写:
sendmail_from = [email protected]
-
重启apache:
/etc/init.d/apache2 restart
情况如何?要使这个更加清楚:我希望PHP能够通过电子邮件发送!
编辑:
- PHP mail()函数返回一个FALSE。
- for php.ini:将
/ usr / sbin / sendmail
更改为/ usr / lib / sendmail
(或其他方式)似乎没有任何区别 - 终端命令:更改
/ usr / sbin / sendmail
into/ usr / lib / sendmail
(或其他方式)似乎没有任何区别 - 我发送消息到我自己的域和gmail,两个没有邮件的垃圾邮件文件夹。
Sendmail的日志文件: / p>
root @ machine:/ var / log#cat mail.warn
root @ machine:/ var / log#cat mail.err
root @ machine:/ var / log#cat mail.log
Mar 20 10:17:09 machine sendmail [12249]:p2K9H2R9012249:from = root ,size = 0,class = 0,nrcpts = 1,relay = root @ localhost
Mar 20 10:17:20 machine sendmail [12253]:p2K9HImw012253:from = root,size = 0,class = 0,nrcpts = 0,relay = root @ localhost
3月20日10:17:25机器sendmail [12255]:p2K9HOAC012255:from = root,size = 0,clas s = 0,nrcpts = 1,relay = root @ localhost
Mar 20 10:20:00 machine sendmail [12277]:p2K9K09k012277:from = root,size = 14,class = 0,nrcpts = 3,msgid = < [email protected]> relay = root @ localhost
3月20日10:20:00机器sm-mta [12279]:p2K9K0Ge012279:< [email protected]& ...用户未知
Mar 20 10:20:00 machine sendmail [12277]:p2K9K09k012277:to = -r,ctladdr = root(0/0),delay = 00:00:00,xdelay = 00: 00:00,mailer = relay,pri = 90014,relay = [127.0.0.1] [127.0.0.1],dsn = 5.1.1,stat =用户未知
3月20日10:20:00机器sm-mta [12279]:p2K9K0Ge012279:from =< [email protected]> size = 290,class = 0,nrcpts = 2,msgid =< [email protected]> proto = ESMTP, daemon = MTA-v4,relay = localhost [127.0.0.1]
3月20日10:20:00机器sm-mta [12279]:STARTTLS = client,relay = gmail-smtp-in.l.google.com 。,version = TLSv1 / SSLv3,verify = FAIL,cipher = RC4-SHA,bits = 128/128
Mar 20 10:20:02 machine sm-mta [12279]:p2K9K0Ge012279:to = < [email protected]> ctladdr =< [email protected]> (0/0),delay = 00:00:02,xdelay = 00:00:02,mailer = esmtp,pri = 60290,relay = gmail-smtp-in.l.google.com。 [74.125.77.27],dsn = 2.0.0,stat = Sent(OK 1300612802 w59si3196382eeh.92)
Mar 20 10:20:02 machine sm-mta [12279]:STARTTLS = client,relay = aspmx.l .google.com。,version = TLSv1 / SSLv3,verify = FAIL,cipher = RC4-SHA,bits = 128/128
Mar 20 10:20:04 machine sm-mta [12279]:p2K9K0Ge012279:to = < [email protected]> ctladdr =< [email protected]& (0/0),delay = 00:00:04,xdelay = 00:00:02,mailer = esmtp,pri = 60290,relay = aspmx.l.google.com。 [74.125.79.27],dsn = 2.0.0,stat = Sent(OK 1300612804 p50si3196335eei4.4)
Mar 20 10:20:04 machine sendmail [12277]:p2K9K09k012277:to = you2 @ domain.com,you @ domain.com,ctladdr = root(0/0),delay = 00:00:04,xdelay = 00:00:04,mailer = relay,pri = 90014,relay = [127.0.0.1] [127.0.0.1] ,dsn = 2.0.0,stat = Sent(p2K9K0Ge012279消息接受送达)
3月20日10:20:04机器sendmail [12277]:p2K9K09k012277:p2K9K09l012277:DSN:用户未知
3月20日10: 20:04机器sm-mta [12279]:p2K9K0Gg012279:from = - ,size = 1921,class = 0,nrcpts = 1,msgid =< [email protected]> proto = ESMTP ,daemon = MTA-v4,relay = localhost [127.0.0.1]
Mar 20 10:20:05 machine sm-mta [12279]:p2K9K0Gg012279:to =< [email protected]& = 00:00:01,xdelay = 00:00:01,mailer = local,pri = 31921,dsn = 2.0.0,stat = Sent
3月20日10:20:05机器sendmail [12277]:p2K9K09l012277 := = root,delay = 00:00:01,xdelay = 00:00:01,mailer = relay,pri = 31038,relay = [127.0.0.1] [127.0.0.1] dsn = 2.0.0,stat = Sent(p2K9K0Gg012279消息接受送达)
Mar 20 10:25:11 machine sendmail [12321]:p2K9PBC3012321:from = root,size = 14,class = 0,nrcpts = 1 ,msgid =< [email protected]> relay = root @ localhost
3月20日10:25:11机器sm-mta [12323]:p2K9PBLe012323:from =< root @ machine。 domain.com> size = 318,class = 0,nrcpts = 1,msgid =< [email protected]> proto = ESMTP,守护进程= MTA-v4,relay = localhost [127.0.0.1]
Mar 20 10:25:11机器sm-mta [12323]:STARTTLS = client,relay = gmail-smtp-in.l.google.com。,version = TLSv1 / SSLv3,verify = FAIL,cipher = RC4-SHA,bits = 128/128
Mar 20 10:25:12 machine sm-mta [12323]:p2K9PBLe012323:to =< [email protected]> ctladdr =< [email protected] .COM> (0/0),delay = 00:00:01,xdelay = 00:00:01,mailer = esmtp,pri = 30318,relay = gmail-smtp-in.l.google.com。 [74.125.77.27],dsn = 2.0.0,stat = Sent(OK 1300613112 u12si3204796eeh.99)
Mar 20 10:25:12 machine sendmail [12321]:p2K9PBC3012321:[email protected],ctladdr = root(0/0),delay = 00:00:01,xdelay = 00:00:01,mailer = relay,pri = 30014,relay = [127.0.0.1] [127.0.0.1],dsn = 2.0.0 ,stat = Sent(p2K9PBLe012323消息接受送达)
3月20日11:00:17机器sendmail [12567]:p2KA0HX9012567:from = root,size = 20,class = 0,nrcpts = 1,msgid = [email protected]> relay = root @ localhost
3月20日11:00:17机器sm-mta [12568]:p2KA0HNn012568:from =< [email protected]& size = 324,class = 0,nrcpts = 1,msgid =< [email protected]> proto = ESMTP,守护进程= MTA-v4,relay = localhost [127.0.0.1]
Mar 20 11:00:17机器sm-mta [12568]:STARTTLS = client,relay = gmail-smtp-in.l.google.com。,version = TLSv1 / SSLv3,verify = FAIL,cipher = RC4-SHA,bits = 128/128
3月20日11:00:18机器sm-mta [12568]:p2KA0HNn012568:to =< [email protected]& gtl,ctladdr =< [email protected]& (0/0),delay = 00:00:01,xdelay = 00:00:01,mailer = esmtp,pri = 30324,relay = gmail-smtp-in.l.google.com。 [74.125.77.27],dsn = 2.0.0,stat = Sent(OK 1300615218 w59si3268114eeh.65)
3月20日11:00:18机器sendmail [12567]:p2KA0HX9012567:[email protected],ctladdr = root(0/0),delay = 00:00:01,xdelay = 00:00:01,mailer = relay,pri = 30020,relay = [127.0.0.1] [127.0.0.1],dsn = 2.0.0 ,stat = Sent(p2KA0HNn012568消息接受送达)
3月20日11:16:23机器sendmail [12675]:p2KAGNg8012675:from = www-data,size = 188,class = 0,nrcpts = 0,msgid = < [email protected]> relay = www-data @ localhost
root @ machine:/ var / log#
EDIT2:
我找到了解决方案!
正如我所料,这是php.ini中的配置。
在php.ini中:
sendmail_path = / usr / sbin / sendmail * * -t -i **
现在,我们还试着了解为什么,因为我在,然后我在php中找到了-i .ini文件本身。 -t和-i是什么意思?
-t
从邮件标题中提取收件人。这些将添加到在命令行上指定的任何收件人。使用2.1之前的Postfix版本,此选项要求在命令行上不指定收件人地址。
-i
从标准输入读取消息时,不要只处理一行。字符作为输入的结尾。
。
第一个理智检查 - 正如其他人已经评论过的 - 是检查mail()函数的返回值。如果这是虚假的,那么PHP知道发送邮件失败。
如果是真的,你仍然没有收到电子邮件(out),那么一些其他组件不是有助于进一步传送电子邮件。您需要检查整个运输链,并且只是为了使其变为粗体 - 您的整体配置可能会有多个错误,从而阻止您通过PHP发送电子邮件,即使您能够从shell发送一些信息。 p>
如果这对您来说太复杂,建议您联系系统管理员,帮助您解决问题。
BTW您可以编写自己的包装器并使用shell命令发送电子邮件:,请小心。
When I use the terminal to send an e-mail things work correctly. I use the following command:
echo "Subject: test" | /usr/lib/sendmail -v [email protected]
But when I try this in PHP:
PHP DOCUMENTATION:
<?php bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] ) ?>
MY IMPLEMENTATION:
<?php mail("[email protected]", "my topic", "my message contents", "From: [email protected]"); ?>
, then it is not working. Why is that? I guess it has to do with PHPs php.ini file?
All I configured:
open php.ini:
nano /etc/php5/apache2/php.ini
uncomment sendmail_path and write:
sendmail_path = /usr/sbin/sendmail
uncomment sendmail_from and write:
sendmail_from = [email protected]
restart apache:
/etc/init.d/apache2 restart
What can be the case? To make this extra clear: I want PHP to be able to e-mail!
EDIT:
- The PHP mail() function returns a FALSE.
- for php.ini: changing
/usr/sbin/sendmail
into/usr/lib/sendmail
(or the other way around) does not seem to make any difference - for terminal command: changing
/usr/sbin/sendmail
into/usr/lib/sendmail
(or the other way around) does not seem to make any difference either - I sent messages to both my own domain and to gmail, both without messages in the spam folder.
The logfiles of Sendmail:
root@machine:/var/log# cat mail.warn
root@machine:/var/log# cat mail.err
root@machine:/var/log# cat mail.log
Mar 20 10:17:09 machine sendmail[12249]: p2K9H2R9012249: from=root, size=0, class=0, nrcpts=1, relay=root@localhost
Mar 20 10:17:20 machine sendmail[12253]: p2K9HImw012253: from=root, size=0, class=0, nrcpts=0, relay=root@localhost
Mar 20 10:17:25 machine sendmail[12255]: p2K9HOAC012255: from=root, size=0, class=0, nrcpts=1, relay=root@localhost
Mar 20 10:20:00 machine sendmail[12277]: p2K9K09k012277: from=root, size=14, class=0, nrcpts=3, msgid=<[email protected]>, relay=root@localhost
Mar 20 10:20:00 machine sm-mta[12279]: p2K9K0Ge012279: <[email protected]>... User unknown
Mar 20 10:20:00 machine sendmail[12277]: p2K9K09k012277: to=-r, ctladdr=root (0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=90014, relay=[127.0.0.1] [127.0.0.1], dsn=5.1.1, stat=User unknown
Mar 20 10:20:00 machine sm-mta[12279]: p2K9K0Ge012279: from=<[email protected]>, size=290, class=0, nrcpts=2, msgid=<[email protected]>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
Mar 20 10:20:00 machine sm-mta[12279]: STARTTLS=client, relay=gmail-smtp-in.l.google.com., version=TLSv1/SSLv3, verify=FAIL, cipher=RC4-SHA, bits=128/128
Mar 20 10:20:02 machine sm-mta[12279]: p2K9K0Ge012279: to=<[email protected]>, ctladdr=<[email protected]> (0/0), delay=00:00:02, xdelay=00:00:02, mailer=esmtp, pri=60290, relay=gmail-smtp-in.l.google.com. [74.125.77.27], dsn=2.0.0, stat=Sent (OK 1300612802 w59si3196382eeh.92)
Mar 20 10:20:02 machine sm-mta[12279]: STARTTLS=client, relay=aspmx.l.google.com., version=TLSv1/SSLv3, verify=FAIL, cipher=RC4-SHA, bits=128/128
Mar 20 10:20:04 machine sm-mta[12279]: p2K9K0Ge012279: to=<[email protected]>, ctladdr=<[email protected]> (0/0), delay=00:00:04, xdelay=00:00:02, mailer=esmtp, pri=60290, relay=aspmx.l.google.com. [74.125.79.27], dsn=2.0.0, stat=Sent (OK 1300612804 p50si3196335eei.44)
Mar 20 10:20:04 machine sendmail[12277]: p2K9K09k012277: [email protected],[email protected], ctladdr=root (0/0), delay=00:00:04, xdelay=00:00:04, mailer=relay, pri=90014, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (p2K9K0Ge012279 Message accepted for delivery)
Mar 20 10:20:04 machine sendmail[12277]: p2K9K09k012277: p2K9K09l012277: DSN: User unknown
Mar 20 10:20:04 machine sm-mta[12279]: p2K9K0Gg012279: from=<>, size=1921, class=0, nrcpts=1, msgid=<[email protected]>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
Mar 20 10:20:05 machine sm-mta[12279]: p2K9K0Gg012279: to=<[email protected]>, delay=00:00:01, xdelay=00:00:01, mailer=local, pri=31921, dsn=2.0.0, stat=Sent
Mar 20 10:20:05 machine sendmail[12277]: p2K9K09l012277: to=root, delay=00:00:01, xdelay=00:00:01, mailer=relay, pri=31038, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (p2K9K0Gg012279 Message accepted for delivery)
Mar 20 10:25:11 machine sendmail[12321]: p2K9PBC3012321: from=root, size=14, class=0, nrcpts=1, msgid=<[email protected]>, relay=root@localhost
Mar 20 10:25:11 machine sm-mta[12323]: p2K9PBLe012323: from=<[email protected]>, size=318, class=0, nrcpts=1, msgid=<[email protected]>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
Mar 20 10:25:11 machine sm-mta[12323]: STARTTLS=client, relay=gmail-smtp-in.l.google.com., version=TLSv1/SSLv3, verify=FAIL, cipher=RC4-SHA, bits=128/128
Mar 20 10:25:12 machine sm-mta[12323]: p2K9PBLe012323: to=<[email protected]>, ctladdr=<[email protected]> (0/0), delay=00:00:01, xdelay=00:00:01, mailer=esmtp, pri=30318, relay=gmail-smtp-in.l.google.com. [74.125.77.27], dsn=2.0.0, stat=Sent (OK 1300613112 u12si3204796eeh.99)
Mar 20 10:25:12 machine sendmail[12321]: p2K9PBC3012321: [email protected], ctladdr=root (0/0), delay=00:00:01, xdelay=00:00:01, mailer=relay, pri=30014, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (p2K9PBLe012323 Message accepted for delivery)
Mar 20 11:00:17 machine sendmail[12567]: p2KA0HX9012567: from=root, size=20, class=0, nrcpts=1, msgid=<[email protected]>, relay=root@localhost
Mar 20 11:00:17 machine sm-mta[12568]: p2KA0HNn012568: from=<[email protected]>, size=324, class=0, nrcpts=1, msgid=<[email protected]>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
Mar 20 11:00:17 machine sm-mta[12568]: STARTTLS=client, relay=gmail-smtp-in.l.google.com., version=TLSv1/SSLv3, verify=FAIL, cipher=RC4-SHA, bits=128/128
Mar 20 11:00:18 machine sm-mta[12568]: p2KA0HNn012568: to=<[email protected]>, ctladdr=<[email protected]> (0/0), delay=00:00:01, xdelay=00:00:01, mailer=esmtp, pri=30324, relay=gmail-smtp-in.l.google.com. [74.125.77.27], dsn=2.0.0, stat=Sent (OK 1300615218 w59si3268114eeh.65)
Mar 20 11:00:18 machine sendmail[12567]: p2KA0HX9012567: [email protected], ctladdr=root (0/0), delay=00:00:01, xdelay=00:00:01, mailer=relay, pri=30020, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (p2KA0HNn012568 Message accepted for delivery)
Mar 20 11:16:23 machine sendmail[12675]: p2KAGNg8012675: from=www-data, size=188, class=0, nrcpts=0, msgid=<[email protected]>, relay=www-data@localhost
root@machine:/var/log#
EDIT2:
I have found the solution!
It was the config in php.ini, as I expected.
In php.ini:
sendmail_path = /usr/sbin/sendmail **-t -i**
Now, lets also try to understand why, cause I found the -t at this site and then i found the -i in the php.ini file itself. What does -t and -i mean??
-t
Extract recipients from message headers. These are added to any recipients specified on the command line. With Postfix versions prior to 2.1, this option requires that no recipient addresses are specified on the command line.
-i
When reading a message from standard input, don't treat a line with only a . character as the end of input.
Hope I could help those of you that ran in to similar problems.
The case or better the cause in your case is, that the mail() function and sendmail are two different pair of shoes. They are not related to each other per-se.
So only because you can send emails using the sendmail program this does not mean that the php mail() function will send emails as well.
What you are facing is a configuration problem of your php installation. PHP is pretty good to sending emails by default but PHP is not able to know all setups so in case mail() fails you need to check wether or not you've properly configured PHP to send emails.
A good start to learn more what to configure, get tons of notes and notices as well as related information is the PHP manual: mail() function.
A first sanity check - as others have already commented - is to check the return value of the mail() function. If it's false, then PHP knows that sending mail has failed.
If it's true and you still don't get the email (out), then some other component is not helpful in transporting the email further on. You need to check the whole chain of the transport and - just to make it bold - you can have multiple errors in your overall configuration that is preventing you sending emails via PHP even in case you are able to send some from the shell.
If this is too complicated for you I suggest you get in contact with a system administrator that can help you in solving your problem.
BTW you can write your own wrapper and send emails with a shell command: shell_exec, take care.
这篇关于如何找出PHP和sendmail是否在一起工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!