2017-07-21 3 views
1

なぜ動作しないのかわかりません。私の知る限り、いくつかの点で私のポストの要求を理解し、それはそうここに...受け入れられていない私のコードはもちろんのことPhpMailer無効なアドレス:(setFrom)

<meta charset="utf-8" type="text/html"> 
 

 
<?php 
 
echo !extension_loaded('openssl')?"Not Available":"Available"; 
 
echo'<br>'; 
 
include 'PHPMailer/PHPMailerAutoload.php'; 
 
$name = $_POST['nombre']; 
 
$mailfrom = $_POST['email']; 
 
$context = $_POST['context']; 
 

 
echo $name,$mailfrom,$context; 
 
echo "<br>"; 
 

 
echo "<br>"; 
 
$subject = 'Information'; 
 
/*i'm not sure if i can use any gmail or it needs to be 
 
    registred on my server admin panel*/ 
 
$to ="[email protected]"; 
 
define ('GUSER','[email protected]'); 
 
define ('GPWD','pass'); 
 

 

 
// make a separate file and include this file in that. call this function in that file. 
 

 
function smtpmailer($mailfrom, $name, $subject, $context) { 
 
    global $error; 
 
    $mail = new PHPMailer(); // create a new object 
 
    $mail->IsSMTP(); // enable SMTP 
 
    $mail->SMTPDebug = 2; // debugging: 1 = errors and messages, 2 = messages only 
 
    $mail->SMTPAuth = true; // authentication enabled 
 
    $mail->SMTPSecure = 'tls'; // secure transfer enabled REQUIRED for GMail 
 
    $mail->SMTPAutoTLS = false; 
 
    $mail->Host = 'ssl://smtp.gmail.com'; 
 
    $mail->Port = 587; 
 
    $mail->CharSet = "UTF-8"; 
 

 
    $mail->Username = GUSER; 
 
    $mail->Password = GPWD; 
 
    $mail->SetFrom ($mailfrom); //here it's my error 
 
    $mail->Subject = $subject; 
 
    $mail->Body = $context; 
 
    $mail->AddAddress('[email protected]'); 
 
    if(!$mail->Send()) { 
 
     $error = 'Mail error: '.$mail->ErrorInfo; 
 
     return false; 
 
    } else { 
 
     $error = 'Message sent!'; 
 
     return true; 
 
    } 
 
} 
 
smtpmailer(); 
 

 
    ?>

その他の重要なものです。これは私のホスティングプロバイダが私に与える設定です。そして、私が適切に使用しているかどうかはわかりません。私はすべてのポートとホストで試しましたが、同じエラーが発生します。

smtp settings

ports

私は本当にすべての助けに感謝:)

+0

setFormには2つの引数が必要です。最初にメールアドレスを、2番目に文字列には何かを指定します。ここでは、phpmailerの公式ホームページのサンプル: '$ mail-> setFrom('[email protected] '、' Your Name ');' $ mailFormの内容が本当に文字列か有効であるかをチェックする必要がありますメールアドレス – mtizziani

+0

はまだ同じエラーを受け取りました –

+0

いいえ、 'setFrom'の2番目のパラメータはオプションです。無効なアドレスを指定すると' false'が返されますので、事前に確認する必要はありません。値。 – Synchro

答えて

1

これをしないでください。

$mailfrom = $_POST['email']; 
... 
$mail->SetFrom($mailfrom); 

$mailfromが有効なアドレスであっても、これは偽造でありますあなたのメッセージはSPFチェックに失敗し、バウンスされるか、迷惑メールフォルダに入ります。このため、PHPMailerのドキュメントや例では、これをしないように指示しています。

2番目のパラメータは完全にオプションです。 setFromFromに直接設定することの主な利点は、アドレスをすぐに検証して、送信するまで待つ必要がないことです。

また、任意のアドレスからの送信を許可しないgmailを介して、あらかじめ定義されたエイリアスのみを送信しているため、とにかく動作しません。

これを行うための正しい方法は次のとおりです。また、SMTPSecure = 'tls'を設定しながら、あなたはまた、$mail->Host = 'ssl://smtp.gmail.com';であなたのHost値を設定している

$mail->setFrom('[email protected]'); 
if (!$mail->addReplyTo($mailfrom)) { 
    echo 'Invalid email address'; 
    exit; 
} 

。これは互換性がなく、動作しません。 Hostを平野に設定すると、smtp.gmail.comとなります。

PHPMailerで提供されているこれらのすべての問題を回避するgmailの例を使用した方が簡単にロードできました。

+0

大丈夫ですので、試してみました。少なくとも私には何のエラーも送信していませんが、メールを送信しません。 D: –

1

はこれを試してみてください:

echo !extension_loaded('openssl')?"Not Available":"Available"; 
echo'<br>'; 
include 'PHPMailer/PHPMailerAutoload.php'; 

define ('GUSER','[email protected]'); 
define ('GPWD','pass'); 

$name  = $_POST['nombre']; 
$mailfrom = $_POST['email']; 
$context = $_POST['context']; 

$subject = 'Information'; 
$to   = "[email protected]"; 

smtpmailer($mailfrom, $name, $subject, $context); 


// make a separate file and include this file in that. call this function in that file. 

function smtpmailer($from, $name, $subject, $context) { 
    global $error; 
    $mail = new PHPMailer();     // create a new object 

    $mail->isSMTP();       // Set mailer to use SMTP 
    $mail->Host  = 'smtp.gmail.com';  // Specify main and backup SMTP servers 
    $mail->SMTPAuth = true;     // Enable SMTP authentication 
    $mail->CharSet = "UTF-8"; 
    $mail->SMTPDebug = 2;      // Enable verbose debug output 
    $mail->isHTML(true);      // Set email format to HTML 


    $mail->Username = GUSER;     // SMTP username 
    $mail->Password = GPWD;      // SMTP password 

    //$mail->SMTPAutoTLS = false; 
    $mail->SMTPSecure = 'tls';    // Enable TLS encryption, `ssl` also accepted 
    $mail->Port   = 587;     // TCP port to connect to 

    $mail->setFrom($from,$name);   // Mail Form 
    $mail->addAddress('[email protected]');   // Name is optional 

    $mail->Subject = $subject; 
    $mail->Body = $context; 

    if(!$mail->Send()) { 
     $error = 'Mail error: '.$mail->ErrorInfo; 
     return false; 
    } else { 
     $error = 'Message sent!'; 
     return true; 
    } 
} 
+0

@EduardoRawrdríguezこのコードが機能しない場合は、最初にすべてのgmailをログアウトしてからCONSTANT変数「GUSER」で使用しているメールにログインし、このリンクに移動する必要があります:[ここをクリック](https://www.google.com/settings/security/lesssecureapps)これを変更する:安全性の低いアプリケーションを許可する:オフにしてセキュリティの弱いアプリケーションを許可する:ON。その後、再度メールを送信してください。 – Rashid

+0

はい、私はあなたが言ったすべてを試みました、まだメールを取得していません。実際に私のacountは確認するために私の電話と同期...しかし、まだ何もu、u –

0

はので、私は少しを進めたが、私は、この新しいエラーを得た...

SMTP ERROR: Failed to connect to server: Connection refused (111) 2017-07-24 02:59:26 SMTP connect() failed

を私は空の私の$コンテスト変数をsendigしていることが分かりました...またはエラーを言ったが、私はまだuuをつけた 誰かいくつかのアイデアがある?

関連する問題