PHPMailerは SMTP サーバーに接続できません
(2011-10-22 12:17:35)
再投稿▼
タグ: php phpメーラー 雑話 |
カテゴリ: デフォルトのカテゴリ |
PHPmailer が電子メールを送信できず、エラーが表示される エラー: SMTP ホストに接続できませんでした
このブログには、「PHPMailer::SMTP サーバーに接続できません」「PHPMailer が SMTP サーバーに接続できない 2 つの一般的な理由」という 2 つの過去の記事があります
1 つ再版され、1 つはメモ用ですが、誰もが問題を解決できるわけではありません。
何人かの友人が私に助けを求めて手紙をくれましたが、私も不安でした。後で解決しましたが、やはり分かりませんでしたので、落ち着いてもう一度見てみたら
PHPMailerがSMTPサーバーに接続できませんでした。まずコードで確認してください:
function Get_host($host){ //ドメイン名を解決
$Get_host=gethostbyname($host);
echo "$host に接続してみます...
rn ";
if(!$ Get_host) {
$str= "解析に失敗しました (1)
PHPmailer は、メールを送信するための優れた PHP クラスです。エラー処理は、SMTP サーバーとのセッション中の問題 (誤った認証や空の受信者エラー メッセージなど) に重点を置いています。簡単に言うと、SMTP への接続プロセスに関するエラー メッセージです。 , 「SMTP ホストに接続できませんでした」という問題が解決されていないことが多く、さらにばかげているのは、便利だが不合理な方法が世の中に広まっていることです。
わかりました、これ以上ナンセンスな話はやめてください。
SMTP ホストに接続できなかった理由を理解したい場合は、サービスに接続する手順を理解する必要があります。
完全かつ効果的な SMTP 送信プロセスには、ドメイン名の解決、SMTP サーバーへの接続、検証が含まれます。身元を確認し、受信者とレターの内容を決定し、送信します
上記の PHP コードは、これらのステップを分離し、理由を見つけてメソッドを見つけるものです。エコーされた結果は次のようになります:
1、解決失敗 (2): ドメイン名が解決できないことを示す無効なホスト名
である可能性があります。 DNS レベルの問題である可能性があります。管理者に連絡するか、サービスプロバイダーを変更してください
2、サーバーは Fsockopen をサポートしていません。pFsockopen 関数を試してください
pfsockopen 関数を使用してサーバーに正常に接続できた場合は、$this->smtp_conn = fsockopen を変更してください( in class.smtp.php For $this->smtp_conn = pfsockopen(. PHPmailer の通常の使用を復元するには
3、サーバー側エラー
リモートホストとの接続は正常に確立されましたが、相手はSMTP プロトコルをインストールせず、SMTP サーバーに問題がある可能性があることを示す 220 応答コードを送信しました
4、220 SMTP サーバーの応答は正常です
さて、それが fsockopen 関数か pfsockopen かPHPmailer を使用してレターを送信できない場合は、別のアカウントを変更して再試行することを強くお勧めします
5、その他のエラーが報告されています
警告: fsockopen(): smtp163.com:25 に接続できません
この場合、管理者に連絡してファイアウォール ルールを変更できない場合は、これがファイアウォールによって引き起こされていると確信する必要があります。 「PHPMailer::SMTP サーバーに接続できません」の方法を試してください。
function IsSMTP() {
$this->Mailer = 'smtp';
}を検索してください。
次のように変更されました:
function IsSMTP() {
$this->Mailer = 'SMTP';
}
タイトルにあるように、「PHPMailer は SMTP サーバーに接続できません。SMTP ケースの変更とは何の関係もありません。」当然、再生できません。解決策の成功率はあなたの性格によって異なります
その理由を分析してみましょう
このコードはおそらく class.phpmailer.php の 286 行目あたりにあります。メール送信メソッドを宣言するPHPmailerクラス
this->Mailerをclass.smtp.phpの400行目くらいまでトレースします
case 'sendmail':
$result = $this->SendmailSend($header, $body) $result = $this ->SmtpSend($header, $body); );
Break;
case 'mail':
$result = $this->MailSend($header, $body);
Break;
デフォルト:
$result = $this->MailSend($header, $本文);
休憩;
まず第一に、smtp は明らかに SMTP と同等ではありません。この基本原則を忘れていました。
つまり、上記の条件が満たされない場合、PHPmailer は
$result = $this->MailSend($header, $body); を実行します
function MailSend($header, $body) { $to = "somebody@example.com"; //这里改成你的邮箱地址
クラスの 460 行目あたりにある MailSend() 関数を追跡してみましょう.phpmailer.php :
$to = '';
for($i = 0; $i < count($this->to); $i++) {
if($i ! = 0) { $to .= ', '; }
$to .= $this->AddrFormat($this->to[$i]);
}
$toArr = split(',', $to);
$params = sprintf(" -oi -f %s", $this->送信者);
if ($this->送信者 != '' && strlen(ini_get('safe_mode')) < 1) {
$old_from = ini_get( 'sendmail_from');
ini_set('sendmail_from', $this->Sender);
if ($this->SingleTo === true && count($toArr) > 1) {
foreach ($toArr as $key => $val) {
$rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params );
}
} else {
$rt = @mail($to, $this->EncodeHeader($this->gt;SecureHeader($this->Subject)), $body, $header, $params) ;
}
} else {
if ($this->SingleTo === true && count($toArr) > 1) {
foreach ($toArr as $key => $val) {
$rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params);
}
} else {
$rt = @ mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header);
}
}
if (isset($old_from)) {
ini_set('sendmail_from', $old_from);
}
if(!$rt) {
$this->SetError($this->Lang('instantiate'));
return false;
}
return true;
}
注意$rt = @mail( これはPHP内にあるmail関数の送信信啊です!
来W3Schoolのメール発信实例
$subject = "私の主題";
$txt = "Hello world!";
$headers = "From: dongfangtianyu@qq.com" 。 "rn" .
mail($to,$subject,$txt,$headers);
?>
このスクリプトを実行してクライアントに到達できる場合は、SMTP サイズ書き込みを修正する方法を使用できます。 php.ini の設定を変更する必要があります。つまり、見にくいサービスプロバイダーに設定する必要があります。 サーバーが mail() 関連のすべてを適切に設定している場合、PHPmailer が mail() を使用する方法は当然ながら成功することができます。不再赖fsockopen関数数
これは、防火禁止の状況であるため、修正smtp大小写反によりPHPmailer発行信を使用できるため、那封電子メールは根本的に本地のsmtpサービス务器代発行である
亲愛する友友、你明白了吗?