1

私はこのプロジェクトを作成してきました。このプロジェクトでは、システムが登録を受け入れてから、所有者にメールで情報を送信します。私はこれを行うためにPEAR: Mail Mimeを使用しています。メールの送信は実際にはローカル コンピューターで機能していますが、このプロジェクトをホスティング サイト (GoDaddy) にアップロードした後、送信されなくなりました。

メールの送信を妨げているものを確認するためにエラー チェックを行ったところ、次のメッセージが表示されました。

ssl://smtp.gmail.com:465 への接続に失敗しました [SMTP: ソケットの接続に失敗しました: 接続が拒否されました (コード: -1、応答: )]

私はGMailアカウントを使用して電子メールメッセージを送信しており、次のコードを使用しています:

/* INCLUDE PREREQUISITES IN ORDER TO SEND AN EMAIL */
include('../../application/third_party/Mail-1.3.0/Mail-1.3.0/Mail.php');
require_once '../../application/third_party/Mail_Mime-1.10.0/Mail_Mime-1.10.0/Mail/mime.php';

/* HEADER INFORMATION */
$from = '<***@gmail.com>';
$to = '<***@gmail.com>';
$subject = 'Someone registers';
$crlf = "\r\n";

$headers = array(
    'From' => $from,
    'To' => $to,
    'Subject' => $subject
);

// CREATING THE MIME MESSAGE
$mime = new Mail_mime($crlf);

$html = '
    <html>
        <body>
            Message here
        </body>
    </html>';

// SETTING THE BODY OF THE EMAIL TO HTML
$mime->setHTMLBody($html);

$body = $mime->get();
$headers = $mime->headers($headers);

// SENDER INFORMATION
$smtp = Mail::factory('smtp', array(
    'host' => 'ssl://smtp.gmail.com',
    'port' => '465',
    'auth' => true,
    'username' => '***@gmail.com',
    'password' => '***'
));

$mail = $smtp->send($to, $headers, $body);

if (PEAR::isError($mail)) {
    $errormessage = '<p>'.$mail->getMessage().'</p>'; // ERROR MESSAGE
    $mail->getUserInfo();
}

はい、 GMail 送信者アカウントの安全性の低いアプリへのアクセスをオンにしました。

はい、エラー表示がオンになっています。

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

私が見逃したかもしれない解決策はありますか?

4

1 に答える 1

0

これで送信メールに関する回答が見つかりました-Sending email through gmail SMTP on GoDaddy

これは、GMail の SSL ポート (465)、および 25 や 587 などの他のポートを制限するホスティング プロバイダーの GoDaddy が原因です。この問題を解決してくれた GitHub の記事 - PHPMailerの問題のトラブルシューティング - に感謝します。ユーザーは、代わりに GoDaddy のメール サーバーを使用する必要があります。

しかし、次のようにして、GMailを使用してメールを送信できました。

$smtp = Mail::factory('smtp');
/* SETTINGS WILL BE IN DEFAULT (E.G. HOST:LOCALHOST, PORT: 45) */

それ以外の

$smtp = Mail::factory('smtp', array(
    'host' => 'ssl://smtp.gmail.com',
    'port' => '465',
    'auth' => true,
    'username' => '***@gmail.com',
    'password' => '***'
));

しかし、受信者は送信された電子メールを「スパム」として受信します。その結果、受信者はシステムからの受信電子メールに気付かないことになります (良い選択ではありません)。また、送信者の送信済みアイテムにはレコードがありません (メールを送信するためにメールを「使用」したことを意味しますが、完全ではないことを意味します)。

というわけで、GoDaddy のメール サーバーに戻ってきました。まず、これを確認して、ホスティング アカウントの中継サーバーを特定する必要があります。私のホスティング アカウントの中継サーバーの名前は何ですか? 、GoDaddy 自身によって公開されました。私の場合はlocalhost、ホストとして使用する Linux (cPanel) です。

$smtp = Mail::factory('smtp', array(
    'host' => 'localhost',
    'auth' => true,
    'username' => '***@***.com',
    'password' => '***'
));

しかし、奇妙なことに、送信されたアイテムの記録はまだありません。GoDaddy の担当者がこれを読んでくれることを願っています。

于 2016-11-04T08:27:04.000 に答える