2016-08-13 1 views
0

私はPHPの初心者ですから、私が知っているのは実際にはフォーラムからのものです。これらは私のphp.iniファイルで、私が行った設定PHPのメール関数はすべての設定にかかわらずfalseを返す

SMTP=smtp.gmail.com 
smtp_port=587 
sendmail_from = [email protected] 
sendmail_path = "\"C:\xamppnew\sendmail\sendmail.exe\" -t" 
;sendmail_path = "C:\xamppnew\mailtodisk\mailtodisk.exe" 

これらはsendmail.iniファイルに加えられた変更

smtp_server=smtp.gmail.com 
smtp_port=587 
error_logfile=error.log 
debug_logfile=debug.log 
[email protected] 
auth_password=************ 
[email protected] 

されており、ここでは、私はメールに

を送信するために使用していたコードですされています
$to = "[email protected]"; 
$myemail = "[email protected]";  
$email_subject = "Contact form submission: $name"; 
$email_body = "my message"; 
$headers = "From: $myemail\n"; 
$headers .= "Reply-To: $email_address"; 
mail($to,$email_subject,$email_body,$headers); 
header('Location: ../index-alt2.html?t="done successfully"'); 
+0

あなたのヘッダリダイレクトは、ページ上に表示されますように聞こえる「T」変数を取るように見えます。これはクロスサイトスクリプティング攻撃を可能にします。リンクが共有されている場合、誰かがHTMLやスクリプトをページに挿入することができます。次のページで成功した場合は、渡された入力を表示せず、代わりにパラメータサーバー側を解釈し、メッセージを別々に表示する必要があります。 – jedifans

+0

これは私の質問ではありません。私はメール機能がうまくいかない理由を知りたい。少なくとも、どのようにエラーを知ることができますか?私はエラーを表示していないtry catch例外メソッドを使用しています。プラス私は誰かが私の変数と悪いことをしようとするとスクリプトを処理する方法を知っている –

+0

私は答えのセクションに私のコメントを入れていない理由は何ですか。それは副作用です。あなたの変数に対処する最も安全な方法は、ユーザーの入力が最初にそこに入ることを許さないことです。とにかく、PHPのエラーログと実際にデバッグログは、うまくいけばあなたのメールの問題の詳細を表示する必要があります。成功したかどうかを確認するには、mail()も戻ります。 – jedifans

答えて

1

PHPから電子メールを送信するためにPHPMailerを使用することをお勧めします。これを達成するための手順は次のとおりです。

  1. Github repositoryにアクセスしてください。
  2. ZIPをダウンロードします。
  3. public_htmlディレクトリに展開します。
  4. include '/path/to/PHPMailer/PHPMailerAutoload.php'; PHPスクリプトの先頭にあります。
  5. 通常どおりHTMLフォームから値を取得します。ここで

は例です...

index.html 

<form action="index.php" method="post"> 
    <input type="email" name="email"> 
    <input type="text" name="name"> 
    <input type="text" name="subject"> 
    <input type="text" name="message"> 
</form> 

index.php 

include '/path/to/PHPMailer/PHPMailerAutoload.php'; 

$email = $_POST['email']; 
$name = $_POST['name']; 
$subject = $_POST['subject']; 
$message = $_POST['message']; 

$mail = new PHPMailer; 
$mail->isSMTP(); // Set mailer to use SMTP 
$mail->Host = 'localhost'; // Specify main and backup SMTP servers 
$mail->SMTPAuth = true; // Enable SMTP authentication 
$mail->Username = 'username'; // SMTP username 
$mail->Password = 'password'; // SMTP password 
$mail->SMTPSecure = 'tls'; // Enable TLS encryption, "ssl" also accepted 
$mail->Port = 587; // TCP port to connect to 

$mail->setFrom('your email', 'your name'); // from 
$mail->addAddress($email, $name); // to 
$mail->isHTML(true); // if html 

$mail->Subject = $subject; 
$mail->Body = $message; //HTML 

if($mail->send()){ 
    echo 'Mail sent!'; 
} 
else { 
    echo 'Mail failed!'; 
} 
+0

それは働いたより –

+0

それが答えとしてそれを受け入れてください。 –

+0

私はしましたが、私はまだ15の評判を持っていないので投票を変更しません。私の評判を上げるには? –

関連する問題