我正在建立一个自动通讯,我有点坚持这个问题。 我需要知道电子邮件是否已发送。这是我的代码
@$send = mail($emailRecipient, $subject, $message, $headers);
我试图将它添加到if语句,但它在这里不起作用是代码。
if( @$send = mail($emailRecipient, $subject, $message, $headers)){
//do something
}else{
//do something
}
答案 0 :(得分:1)
仅为了完整性,应该提到的是,有一种方法可以通过PHP
发送电子邮件,并知道接收MTA是否真的接受了它(同样,并不意味着它被传递给用户或在SMTP握手后静默丢弃)。
理论上可以在PHP
中编写一个SMTP客户端,例如使用内置的流函数,如stream_socket_client,以便通过直接原始tcp与接收MTA进行通信在SMTP协议请求和响应中形成的连接。
发出SMTP命令的一般逻辑如下:
<?php
$fp = stream_socket_client("tcp://fqdn-of-receiving-mta:25", $errno, $errstr, 90);
fwrite($fp, "EHLO LOCALHOST\r\n");
fwrite($fp, "MAIL FROM: youremailaddress@something.tld\r\n");
fwrite($fp, "RCPT TO: recipient@remotedomain.com\r\n");
fwrite($fp, "DATA\r\n");
fwrite(
$fp,
"Subject: your subject text\r\n" .
"First line of message body\r\n" .
"At the end of the message body one single period char should be placed before and after EOL character\r\n" .
"Like this: \r\n" .
".\r\n"
);
当然,这显然是不完整的(经验丰富的开发人员会注意到我既没有收听也没有解析我得到的SMTP响应)。为了使用这种方法,必须严格重新发明PHP
语言的轮子。
嗯,你至少会有3种类型的信息:
250 2.0.0 Ok
同样,这只是出于教育目的,除非您准备与开发符合标准的SMTP客户端的项目结婚,否则不要在家中这样做。
答案 1 :(得分:0)
你也可以尝试这个
$send = mail($to,$subject,$msg);
if($send)
{
echo "Your Account is Successfully Created. You must Activate your account.";
}
else
echo "Failed to send";
答案 2 :(得分:0)
我想在@Daya的答案中添加更多信息,我想在他的答案中进行一些修改,如下所示:
如果电子邮件将成功发送,则不是问题,但如果邮件功能有错误,那么开发人员将如何获取错误,为此,他/她可以使用error_get_last()
函数来获取最后的错误,并且修改如下:
if(!$mail) {
print_r( 'Mailer error: ' . error_get_last());
} else {
echo 'Message has been sent.';
}
答案 3 :(得分:-2)
$ send = mail($ emailRecipient,$ subject,$ message,$ headers);
检查$发送的返回值,如If($ send ['error_code'] == 0){echo“success”; } Else {Echo“错误”; }