Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检查是否发送SMTP邮件_Php_Email_Smtp - Fatal编程技术网

Php 检查是否发送SMTP邮件

Php 检查是否发送SMTP邮件,php,email,smtp,Php,Email,Smtp,这是我发送电子邮件的smtp代码: function smtp_mail($from, $to, $subject, $message, $headers="", $params=array()) { $errno = ""; $errstr = ""; $smtpConnect = fsockopen("mail2.allramhosting.com", "25", $errno, $errstr, 20); if (!empty($smtpConnect)) { if ($pa

这是我发送电子邮件的smtp代码:

function smtp_mail($from, $to, $subject, $message, $headers="", $params=array()) {
$errno = "";
$errstr = "";
$smtpConnect = fsockopen("mail2.allramhosting.com", "25", $errno, $errstr, 20);


if (!empty($smtpConnect)) {

    if ($params['use_html']) {
        $extra_headers .= "MIME-Version: 1.0\nContent-Type: text/html; charset=\"utf-8\"\nContent-Transfer-Encoding: 7bit\n";
    }
    $headers = "To: " . $to . "\nFrom: " . $from . "\nSubject: " . $subject . "\nDate: " . date('r') . "\n" . $extra_headers . $headers;

    if (substr($headers, -1) == "\n") $headers = substr($headers, 0, -1); // The last character should not be newline


    fputs($smtpConnect, "HELO networkssms.com\r\n");
    fputs($smtpConnect, "MAIL FROM: " . $from . "\r\n");
    fputs($smtpConnect, "RCPT TO: " . $to . "\r\n");
    fputs($smtpConnect, "DATA\r\n");
    fputs($smtpConnect, $headers . "\r\n\r\n");
    fputs($smtpConnect, $message . "\r\n.\r\n"); // send message and finish
    fputs($smtpConnect,"QUIT" . $newLine);
    fclose($smtpConnect);
    return true;
}
return false;
}

这是smtp邮件函数的调用代码:

smtp_mail($from, $user_to ,$user_subject, $user_message,"MIME-Version: 1.0\nContent-Type: text/html; charset=\"utf-8\"\nContent-Transfer-Encoding: 7bit\n");
$from、$user\u to、$user\u subject、$user\u消息
有自己的值

我想检查电子邮件是否已发送,如果未发送,我想再次发送


如何执行此操作?

首先,您应该检查连接是否正常:

$smtpConnect = fsockopen("mail2.allramhosting.com", "25", $errno, $errstr, 20);
fsockopen
如果连接失败,则返回
false
。因此,添加下面提到的代码

if (!$smptConnect) {
   echo "ERROR: $errno - $errstr".PHP_EOL;
   return false;
} else {
   // send 
   return true;
}
您向SMTP服务器发出的每个命令都将给出一个数字响应-在继续执行下一个命令之前,您应该检查响应是否正确-一旦您阅读了最后一条评论,并且一切仍然正常-这是电子邮件发送的确认。。这解释了您应该从每个命令中得到什么响应

比如说

fputs($smtpConnect, "HELO networkssms.com\r\n");
应使用代码
250
进行响应检查,您可以执行以下操作:

fputs($smtpConnect, "HELO networkssms.com\r\n");
$rcode = fgets($smtpConnect, 256);
if (substr($rcode, 0, 3)!= '250') {    // check the first 3 characters ie the response code
   echo "email sending failed" . PHP_EOL;
}
fputs($smtpConnect, "HELO networkssms.com\r\n");
if (!check_reponse($smptConnect,'250')) {
   return false;
}
您需要为每个命令执行此操作-检查每个命令的响应代码与预期的一样。您可以创建一个简单的函数来检查每个响应

function check_response($smtpConnect,$expected_response) {
    $rcode = fgets($smtpConnect, 256);
    if (substr($rcode, 0, 3)!= $expected_response) {    // check the first 3 characters ie the response code
       echo "email sending failed" . PHP_EOL;
       return false;
    }
    return true;
}
然后你可以做:

fputs($smtpConnect, "HELO networkssms.com\r\n");
$rcode = fgets($smtpConnect, 256);
if (substr($rcode, 0, 3)!= '250') {    // check the first 3 characters ie the response code
   echo "email sending failed" . PHP_EOL;
}
fputs($smtpConnect, "HELO networkssms.com\r\n");
if (!check_reponse($smptConnect,'250')) {
   return false;
}

同样,您需要为发送的每个命令执行此操作。我肯定你明白了……首先你应该检查连接是否正常:

$smtpConnect = fsockopen("mail2.allramhosting.com", "25", $errno, $errstr, 20);
fsockopen
如果连接失败,则返回
false
。因此,添加下面提到的代码

if (!$smptConnect) {
   echo "ERROR: $errno - $errstr".PHP_EOL;
   return false;
} else {
   // send 
   return true;
}
您向SMTP服务器发出的每个命令都将给出一个数字响应-在继续执行下一个命令之前,您应该检查响应是否正确-一旦您阅读了最后一条评论,并且一切仍然正常-这是电子邮件发送的确认。。这解释了您应该从每个命令中得到什么响应

比如说

fputs($smtpConnect, "HELO networkssms.com\r\n");
应使用代码
250
进行响应检查,您可以执行以下操作:

fputs($smtpConnect, "HELO networkssms.com\r\n");
$rcode = fgets($smtpConnect, 256);
if (substr($rcode, 0, 3)!= '250') {    // check the first 3 characters ie the response code
   echo "email sending failed" . PHP_EOL;
}
fputs($smtpConnect, "HELO networkssms.com\r\n");
if (!check_reponse($smptConnect,'250')) {
   return false;
}
您需要为每个命令执行此操作-检查每个命令的响应代码与预期的一样。您可以创建一个简单的函数来检查每个响应

function check_response($smtpConnect,$expected_response) {
    $rcode = fgets($smtpConnect, 256);
    if (substr($rcode, 0, 3)!= $expected_response) {    // check the first 3 characters ie the response code
       echo "email sending failed" . PHP_EOL;
       return false;
    }
    return true;
}
然后你可以做:

fputs($smtpConnect, "HELO networkssms.com\r\n");
$rcode = fgets($smtpConnect, 256);
if (substr($rcode, 0, 3)!= '250') {    // check the first 3 characters ie the response code
   echo "email sending failed" . PHP_EOL;
}
fputs($smtpConnect, "HELO networkssms.com\r\n");
if (!check_reponse($smptConnect,'250')) {
   return false;
}
同样,您需要为发送的每个命令执行此操作。我相信你明白了