2

次のコードを使用してメッセージを送信します。

try
{   
    require_once "lib/Swift.php";
    require_once "lib/Swift/Connection/SMTP.php";
    $smtp =& new Swift_Connection_SMTP("mail.somedomain.net", 587);
    $smtp->setUsername("username");
    $smtp->setpassword("password");
    $swift =& new Swift($smtp);

    //Create the sender from the details we've been given
    $sender =& new Swift_Address($email, $name);
    $message =& new Swift_Message("message title");

    $message->attach(new Swift_Message_Part("Hello"));

    //Try sending the email
    $sent = $swift->send($message, "$myEmail", $sender);
    //Disconnect from SMTP, we're done
    $swift->disconnect();

    if($sent)
    {
        print 'sent';

    }
    else 
    {
        print 'not sent';
    }

}

catch (Exception $e) 
{
    echo"$e";
}

問題は、ローカル サーバー (私の xampp サーバー) では正常に動作していますが、ファイルが実際のサーバーにアップロードされたときに動作しないことです。

このエラーをスローします:

'The SMTP connection failed to start [mail.somedomain.net:587]: fsockopen returned Error Number 110 and Error String 'Connection timed out''

このエラーを修正するにはどうすればよいですか。読んでくれてありがとう

4

2 に答える 2

1

SMTP サーバー ドメインが有効であることを確認します。応答を確認するために ping を実行しようとしています。また、trace route を試して、遅い応答を返しているスイッチがあるかどうかを確認することもできます。

于 2010-04-07T20:12:05.470 に答える
1
$smtp =& new Swift_Connection_SMTP("mail.somedomain.net", 587);

接続するポート番号は「587」ですか?通常のポート 25 の代わりにそれを試している理由はありますか? ポート 587 (送信) は通常、ローカル ユーザーがメールを送信するために使用されます。このスクリプトをリモート Web サーバーで実行すると、それはもはや「ローカル」ではなく、おそらくファイアウォールで保護されています (または、メール サーバーが外部インターフェイスでそのポートをリッスンしていません)。

ポート 25 に切り替えてみて、それが役立つかどうかを確認してください。

アップデート:

接続拒否は「接続タイムアウト」よりも優れています。これは、少なくとも最初のデータ パケットがどこかに到達し、積極的に拒否されたことを意味します。タイムアウトとは、物事が途中で静かに落とされたことを意味します。

max_execution_time は、php スクリプト自体が最大時間を超えた場合にのみ機能します。その場合、スクリプトは単純に終了するため、swiftmailer エラーは発生しません。

Web サーバーで sendmail が実行されていますか? 接続ホストを「localhost」に変更し、それが役立つかどうかを確認してください。メールを送信したいだけなら、それでうまくいくはずです。リモート SMTP サーバーに接続する唯一の理由は、From: ヘッダーを正しく設定し、受信側で SPAM としてフラグが立てられないようにするためです。

于 2010-04-07T23:06:52.407 に答える