2016-08-13 2 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 catch 예외 메서드를 사용하여 오류가 표시되지 않습니다. 게다가 누군가가 내 t 변수로 나쁜 일을 시도하면 스크립트를 처리하는 방법을 알고있다. –

+0

그래서 나는 대답 섹션에 내 코멘트를 넣지 않았다. 그것은 쪽지입니다. t 변수를 다루는 가장 안전한 방법은 사용자 입력이 처음부터 들어갈 수 없도록하는 것입니다. 어쨌든 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

나는 명성이 아직 없기 때문에 투표를 변경하지 않을 것이다. 평판을 높이려면 어떻게해야합니까? –

관련 문제