14

PHPMailerを使用してSMTP電子メールを送信しようとしていますが、このエラーメッセージが表示され続けます。これを取り除く方法はありますか?
ポート465でSSL経由で接続しようとしています。

SMTP -> FROM SERVER: 
SMTP -> FROM SERVER: 
SMTP -> ERROR: EHLO not accepted from server: 

Notice: fputs() [function.fputs]: send of 18 bytes failed with errno=32 Roura přerušena (SIGPIPE) in /home/www/amazonek.cz/subdomains/library/PHPMailer_v5.1/class.smtp.php on line 494
SMTP -> FROM SERVER: 
SMTP -> ERROR: HELO not accepted from server: 

Notice: fputs() [function.fputs]: send of 12 bytes failed with errno=32 Roura přerušena (SIGPIPE) in /home/www/amazonek.cz/subdomains/library/PHPMailer_v5.1/class.smtp.php on line 212
SMTP -> ERROR: AUTH not accepted from server: 
SMTP Error: Could not authenticate.

私のコード:

  require_once('../library/PHPMailer_v5.1/class.phpmailer.php');

        try{
            $mail = new PHPMailer(true);
            $mail->IsSMTP();
            $mail->SMTPAuth = true;
            $mail->Host = SMTP_SERVER;
            $mail->Port = SMTP_PORT;
            $mail->Username = SMTP_USERNAME;
            $mail->Password = SMTP_PASSWORD;
            $mail->SMTPDebug = 2;
            $mail->SetFrom(MAIL_ORDERS_ADDRESS, MAIL_ORDERS_NAME);
            $mail->Subject = 'AMAZONEK.cz - objednávka číslo '.$_SESSION['orderId'];
            $mail->MsgHTML('<b>Ahoj</b>');
            $mail->AddAddress($_SESSION['user']['email'], $_SESSION['user']['name'].' '.$_SESSION['user']['surname']);
            $mail->AddBCC(MAIL_ORDERS_ADDRESS, MAIL_ORDERS_NAME);

            if(!$mail->Send()) throw new Exception($mail->ErrorInfo);
        }
        catch(Exception $e){
            echo $e->getMessage();
        }

定数の定義:

define('SMTP_SERVER', 'smtp.ebola.cz');
define('SMTP_PORT', 465);
define('SMTP_USERNAME', 'myEmail@myDomain.tld');
define('SMTP_PASSWORD', '***CENSORED***');

define('MAIL_ORDERS_ADDRESS', 'myEmail@myDomain.tld');
define('MAIL_ORDERS_NAME', 'My Name');

何か案は?

4

9 に答える 9

26

私が見る限り、あなたのコードはすべて正しいです。エラーは次のとおりです。

SMTPエラー:認証できませんでした。

これは、送信した資格情報がSMTPサーバーによって拒否されることを意味します。ホスト、ポート、ユーザー名、パスワードが適切であることを確認してください。

STARTTLSを使用する場合は、以下を追加してみてください。

$mail->SMTPSecure = 'tls';

SMTPS(SSL)を使用する場合は、次を追加してみてください。

$mail->SMTPSecure = 'ssl';

それを念頭に置いて:

  • 一部のSMTPサーバーは、「外部」からの接続を禁止できます。
  • 一部のSMTPサーバーは、SSL(またはTLS)接続をサポートしていません。

たぶん、この例が役立つかもしれません(GMailセキュアSMTP)。

[ソース]

于 2010-09-01T13:52:16.533 に答える
4

そのSMTPサーバーを介して手動で/インタラクティブメーラー(Mozilla Thunderbirdなど)から電子メールを送信してみてください。エラーから、サーバーはあなたの資格情報を受け入れないようです。そのSMTPはポートで実行されていますか、それともSSL + SMTPですか?投稿したコードで安全な接続を使用していないようです。PHPMailerが実際にSSL+SMTPをサポートしているかどうかはわかりません。

(SMTPサーバーのホスト名をグーグルで検索した最初の結果:http://podpora.ebola.cz/idx.php/0/006/article/Strucny-technicky-popis-nastaveni-sluzeb.htmlは「SMTPメール送信:安全SSL接続、ポート:465 "。)

PHPMailerはSSLをサポートしているようです。少なくともこれから。したがって、これを変更する必要があります。

define('SMTP_SERVER', 'smtp.ebola.cz');

これに:

define('SMTP_SERVER', 'ssl://smtp.ebola.cz');
于 2010-09-01T13:52:48.323 に答える
3

456ではなくポート25を試してください。

ポート456を使用したときに同じエラーが発生し、25に変更するとうまくいきました。

于 2013-07-23T02:49:51.673 に答える
2

これは暗闇の中でのショットのように見えるかもしれませんが、SMTPがSSLを必要とする場合は、PHPがOpenSSLに準拠していることを確認してください。

使用を確認するにはphpinfo()

それが役に立てば幸い!

于 2010-09-01T14:03:20.610 に答える
1

SMTP-> FROM SERVER:
SMTP-> FROM SERVER:
SMTP->エラー:EHLOはサーバーから受け入れられません:

これは、SSLを使用していないクライアントでSSLサービスに接続しようとする典型的な例です。

SMTPエラー:認証できませんでした。

SMTP会話認証の開始に失敗したことに驚くことはありません。

phpmailerは暗黙のSSL(別名TLS on connect、SMTPS)を実行しません。smtp.class.phpを書き直してサポートを含める以外に、要求したことを実行する方法はありません。

代わりに、明示的なSSL(別名TLS、STARTTLS)でポート587を使用してください。

于 2012-07-09T22:19:32.510 に答える
1

はい、正しく機能するにはOpenSSLが必要です。バックアップテストサイトは機能しましたが、ライブサーバーは機能しませんでした。違い?ライブサーバーには、PHP構成内にOpenSSLがありませんでした。

于 2010-11-30T19:28:51.477 に答える
1

何が悪かったのかがわかるまで、私は1時間ほど同じような問題を抱えていました。私の問題は、sslの代わりにSSLを使用したことでした。コードでは、チェックで大文字と小文字が区別されます。 AlexVは私を問題の原因に導きました。そのhelo/ehloのものは無関係のようです。

于 2013-07-08T15:19:45.880 に答える
0

one.comをSMTPポート465として使用しても機能しませんでした。phpmailerでこの構成を使用できます。

$mail->Host = 'send.one.com';
$mail->SMTPAuth = true;
$mail->Username = "***";
$mail->Password = "******";
$mail->From = "***";
$mail->SMTPAutoTLS = false;
$mail->SMTPSecure = 'none';
$mail->Port = 25;
于 2021-11-05T12:32:05.067 に答える
-1

tls / ssl smtp STARTTLSコマンドを使用したphpストリームソケットを使用したシンプルなsmtpクライアント: https ://github.com/breakermind/PhpMimeParser/blob/master/PhpSmtpSslSocketClient.php

認証付きのgmail.comで動作します:

<?php
// Login email and password
$login = "your-email@cool.xx";
$pass = "123456";

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'verify_peer', false);
stream_context_set_option($ctx, 'ssl', 'verify_peer_name', false);
try{
    // echo $socket = stream_socket_client('ssl://smtp.gmail.com:587', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
    echo $socket = stream_socket_client('tcp://smtp.gmail.com:587', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
    if (!$socket) {
        print "Failed to connect $err $errstr\n";
        return;
    }else{
        // Http
        // fwrite($socket, "GET / HTTP/1.0\r\nHost: www.example.com\r\nAccept: */*\r\n\r\n");
        // Smtp
        echo fread($socket,8192);
        echo fwrite($socket, "EHLO cool.xx\r\n");
        echo fread($socket,8192);

        // Start tls connection
        echo fwrite($socket, "STARTTLS\r\n");
        echo fread($socket,8192);

        echo stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_SSLv23_CLIENT);

        // Send ehlo
        echo fwrite($socket, "EHLO cool.xx\r\n");
        echo fread($socket,8192);

        // echo fwrite($socket, "MAIL FROM: <hello@cool.com>\r\n");
        // echo fread($socket,8192);

        echo fwrite($socket, "AUTH LOGIN\r\n");
        echo fread($socket,8192);

        echo fwrite($socket, base64_encode($login)."\r\n");
        echo fread($socket,8192);

        echo fwrite($socket, base64_encode($pass)."\r\n");
        echo fread($socket,8192);

        echo fwrite($socket, "rcpt to: <to-email@boome.com>\r\n");
        echo fread($socket,8192);

        echo fwrite($socket, "DATA\n");
        echo fread($socket,8192);

        echo fwrite($socket, "Date: ".time()."\r\nTo: <to-email@boome.com>\r\nFrom:<zour-email@cool.xx\r\nSubject:Hello from php socket tls\r\n.\r\n");
        echo fread($socket,8192);

        echo fwrite($socket, "QUIT \n");
        echo fread($socket,8192);

        /* Turn off encryption for the rest */
        // stream_socket_enable_crypto($fp, false);

        fclose($socket);
    }
}catch(Exception $e){
    echo $e;
}
于 2017-11-05T11:15:35.480 に答える