ホームページ >バックエンド開発 >PHPチュートリアル >PHPMailer はメールを送信できない、PHPMailer はメールを送信する_PHP チュートリアル

PHPMailer はメールを送信できない、PHPMailer はメールを送信する_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:13:501215ブラウズ

PHPMailer はメールを送信できません。PHPMailer はメールを送信できます

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)


";
}elseif($Get_host==$host){
$str= "解析に失敗しました (2): 無効なホスト名である可能性があります}else{
echo "ドメイン名は $Get_host...
rn";
Open_host($host);}
echo $str;
}

Function Open_host($host ){ / /ホストに接続します

if(function_exists('fsockopen')){
$fp = fsockopen($host,25,&$errno,&$errstr,60);
elseif(function_exists('pfsockopen') ){
echo "サーバーは Fsockopen をサポートしていません。pFsockopen 関数を試してください...
rn";
$fp = pfsockopen($host,25,&$errno,&$errstr,60); }
else
exit('サーバーは Fsockopen 関数をサポートしていません');

if(!$fp){
echo "コード名: $errno,
nエラー理由: $errstr
";
}else {
echo "SMTP サーバー接続は正常です!
rn";
fwrite($fp, "");
$out0= fgets($fp, 128);
#echo $out0;
if (strncmp($ out0,"220",3)= =0){ // 3 文字の内容を決定します
echo '220 SMTP サーバーの応答は正常です
';
}else{
echo 'サーバー側エラー
' ;}
}
}
// SMTP サーバーアドレス
$site = array("smtp.163.com","smtp.sina.cn","smtp.sina.com","smtp.qqq.com", "smtp.126.com");

//トランスポート スクリプト
#$host="smtp.163.com";
#echo Get_host($host);


for ($i=0; $i< =4; $i++)
{
$host= $site[$i];
echo Get_host($host);
}



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行目くらいまでトレースします

switch($this->Mailer) {

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); を実行します

この文


クラスの 460 行目あたりにある MailSend() 関数を追跡してみましょう.phpmailer.php :

function MailSend($header, $body) {
$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のメール発信实例

$to = "somebody@example.com"; //这里改成你的邮箱地址
$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サービス务器代発行である
亲愛する友友、你明白了吗?





www.bkjia.com本当http://www.bkjia.com/PHPjc/913098.html技術記事 PHPMailer はメールを送信できません PHPMailer は SMTP サーバーに接続できません (2011-10-22 12:17:35) 再投稿▼ タグ : php phpmailer...

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。