我使用 php fsockopen 发送邮件,但它失败了


I use a php fsockopen to send a mail but it fails

代码是:

function logit($txt) {
        $log = fopen('/tmp/mail.txt','a+');;
        fwrite($log,$txt."'n");
        fclose($log);
    }
    function SendMail($ServerName, $Port, $ToEmail, $FromEmail, $Subject, $Body, $Header = '', $Username = '', $Password = '') {
        $smtp = fsockopen($ServerName, $Port);
        $InputBuffer = fgets($smtp, 1024);
        $GECode=220;
        if (substr($InputBuffer,0,3) != $GECode) {
            logit('Connect:'.$InputBuffer);
            fclose($smtp);
            return FALSE;
        }
        fputs($smtp, "HELO $ServerName'n");
        $InputBuffer = fgets($smtp, 1024);
        $GECode=250;
        if (substr($InputBuffer,0,3) != $GECode) {
            fclose($smtp);
            logit('HELO:'.$InputBuffer);
            return FALSE;
        }

        if ($Username != '') {
            fputs($smtp,"AUTH LOGIN'n");
            $smtpResponse = fgets($smtp, 1024);
            $GECode=250;
            if (substr($InputBuffer,0,3) != $GECode) {
                fclose($smtp);
                logit('AUTH'.$InputBuffer);
                return FALSE;
            }

            if ($Username != '') {
                fputs($smtp, base64_encode($Username)."'n");
                $smtpResponse = fgets($smtp, 1024);
                $GECode=250;
                if (substr($InputBuffer,0,3) != $GECode) {
                    fclose($smtp);
                    logit($InputBuffer);
                    return FALSE;
                }
            }
            if ($Password != '') {
                fputs($smtp, base64_encode($Password)."'n");
                $smtpResponse = fgets($smtp, 1024);
                $GECode=250;
                if (substr($InputBuffer,0,3) != $GECode) {
                    fclose($smtp);
                    logit($InputBuffer);
                    return FALSE;
                }
            }
        }

        fputs($smtp, "MAIL From:<$FromEmail>'n");
        $InputBuffer = fgets($smtp, 1024);
        $GECode=250;
        if (substr($InputBuffer,0,3) != $GECode) {
            fclose($smtp);
            logit($InputBuffer);
            return FALSE;
        }

        fputs($smtp, "RCPT To:<$ToEmail>'n");
        $InputBuffer = fgets($smtp, 1024);
        $GECode=250;
        if (substr($InputBuffer,0,3) != $GECode) {
            fclose($smtp);
            logit($InputBuffer);
            return FALSE;
        }
        fputs($smtp, "DATA'n");
        $InputBuffer = fgets($smtp, 1024);
        $GECode=354;
        if (substr($InputBuffer,0,3) != $GECode) {
            fclose($smtp);
            logit($InputBuffer);
            return FALSE;
        }

        fputs($smtp, "From: $FromEmail'n");
        fputs($smtp, "To: $ToEmail'n");
        if ($Header != '') {
            fputs($smtp, "$Header");
        }
        fputs($smtp, "Subject: $Subject'n'n");
        fputs($smtp, "$Body'r'n.'r'n");
        fputs($smtp, "QUIT'n");
        $InputBuffer = fgets($smtp, 1024);
        $GECode=250;
        if (substr($InputBuffer,0,3) != $GECode) {
            fclose($smtp);
            logit($InputBuffer);
            return FALSE;
        }
        fclose($smtp);
        return TRUE;
    }
    $server = 'ssl://smtp.gmail.com ';
    $port = 465;
$email='oil_karchack@yahoo.com';    
$subject='test subject';
$body='test body';
SendMail($server,$port,'shervin_445@yahoo.com',$email,$subject,$body,$headers,'email','pass');

我也使用不发送邮件的邮件功能

这是一个评论,因为我需要空间。

这是为了确认通过"谷歌"smtp服务器发送电子邮件的实际需要的设置。用于从打印机、扫描仪或应用发送邮件的 Google 企业应用套件 SMTP 设置

我使用"SwiftMailer"免费功能丰富的PHP Mailer作为PHP Mail软件。"PhpMailer"也是可靠的邮件软件。我都用过。

我在发送消息时使用"SSL"加密选项,所以我使用端口:465。如果使用"TLS"加密,则使用端口:587

以下是我使用的设置 - "PhpMailer"将具有类似的设置 - (垃圾用户名和密码):

Transport: 
    ->setHost('smtp.gmail.com')
    ->setPort(465)
    ->setEncryption('ssl')
    ->setTimeout(20)
    ->setUsername('not.valid@gmail.com')
    ->setPassword('not.valid.password!);

以下是"发送"的完整日志(请注意"确定"回复):

<< 220 mx.google.com ESMTP ha10sm2282960wjc.37 - gsmtp
>> EHLO [127.0.0.1]
<< 250-mx.google.com at your service, [123.123.123.123]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
>> AUTH LOGIN
<< 334 VXNlcm5hbWU6
>> zmZ2MTIzLnX123XN0aW9uc0BnbWFpbC5jb20=
<< 334 UGFzc3dvcmQ6
>> ZmluRTY12tpdGUlMDAx
<< 235 2.7.0 Accepted
++ Swift_SmtpTransport started
>> MAIL FROM: <questions@not.valid.uk>
<< 250 2.1.0 OK ha10sm2282960wjc.37 - gsmtp
>> RCPT TO: <not.valid@hotmail.com>
<< 250 2.1.5 OK ha10sm2282960wjc.37 - gsmtp
>> DATA
<< 354  Go ahead ha10sm2282960wjc.37 - gsmtp
>> 
.
<< 250 2.0.0 OK 1426244335 ha10sm2282960wjc.37 - gsmtp