폼메일을 사용중인데 처음에 들어갔을때는 신청을 해도 메일이 안옵니다.
본문
폼메일을 사용중인데 처음에 들어갔을때는 신청을 해도 메일이 안옵니다.
하지만 두번째로 신청하면 또 메일이 옵니다.
무조건 첫번째는 안오는데요.. 문제가 무엇일까요?
신청하기를 눌렀을때 /#링크를 걸어두어서 안되는줄 알았는데 첫번째는 그냥 안오는 거였습니다.
html 은
<input type="hidden" name="mailto" value="갈 메일">
과 입력양식
<div style="clear:both; position:relative;" id="event13_btn">
<a href="javascript:;" class="check" ><img src="img/fair_btn.png"></a>
</div>
<script>
// 체크박스 체크 하는 메소드
function agree_click(){
$("input:checkbox[name='info_check']").attr("checked", true);
$("input:checkbox[name='maket_check']").attr("checked", true);
}
// 폼 리셋 시키는 메소드
function reset(){
var pForm = document.getElementById("sendForm");
pForm.reset();
}
var console = window.console || { log:function() {} };
function ajaxplay(){
var formData = $("#sendForm").serialize();
console.log(formData);
$.ajax({
url:'/mail.php',
type:'post',
dataType:'text',
data:formData
})
.done(function(data) {
console.log(data);
if(data == "true"){
alert('정상적으로 신청되었습니다.');
reset();
}else{
alert('실패하였습니다. 다시 신청 해주세요 ');
}
})
.fail(function(data) {
alert('통신 오류입니다. 다시 신청 해주세요 ');
})
.always(function(data) {
});
}
$(".check").click(function(){
var txtEle = $("#sendForm input[type=text]");
for(var i = 0; i < txtEle.length; i ++){
// console.log($(txtEle[i]).val());
if("" == $(txtEle[i]).val() || null == $(txtEle[i]).val()){
var error = $(txtEle[i]).attr("name");
switch (error){
case 'name': alert('성함을 기록해주세요'); $("input[name=name]").focus(); return false;
case 'tel2': alert('전화번호를 기록해주세요'); $("input[name=tel2]").focus(); return false;
case 'tel3': alert('전화번호를 기록해주세요'); $("input[name=tel3]").focus(); return false;
}
}
}
if ( "" == $("select[name=tel1]").val()){
alert("휴대폰 앞자리를 기록해주세요");
$("select[name=tel1]").focus();
return false;
}
if ( "" == $("select[name=wedding1]").val()){
alert("결혼 예정일을 선택해 주세요");
$("select[name=wedding1]").focus();
return false;
}
if ( "" == $("select[name=wedding2]").val()){
alert("결혼 예정일을 선택해 주세요");
$("select[name=wedding2]").focus();
return false;
}
if ( "" == $("select[name=wedding3]").val()){
alert("결혼 예정일을 선택해 주세요");
$("select[name=wedding3]").focus();
return false;
}
var check = $("input:checkbox[name='info_check']").is(":checked") ;
if ( check== false){
alert("개인정보 수집 및 이용에 동의해주세요");
$("select[name=wedding3]").focus();
return false;
}
var check = $("input:checkbox[name='maket_check']").is(":checked") ;
if ( check== false){
alert("마케팅 활용에 동의해주세요");
$("select[name=wedding3]").focus();
return false;
}
ajaxplay();
});
</script>
입니다.
또 mail.php 는
<?php
header("Content-Type: text/html; charset=UTF-8");
$charset = 'UTF-8';
$fromName = @$_POST['name'];
$from->tel1 = @$_POST['tel1'];
$from->tel2 = @$_POST['tel2'];
$from->tel3 = @$_POST['tel3'];
$fromEmail = @$_POST['mailto'];
$from->day = @$_POST['wedding1'];
$from->day2 = @$_POST['wedding2'];
$from->day3 = @$_POST['wedding3'];
$from->memo = @$_POST['memo'];
$toEmail = @$_POST['mailto']; // 받는 이 메일 주소
$subject = @$_POST['subject']; // 제목
$toName = @$_POST['toName']; // 받는이
$contype = @$_POST['contype']; // 접속기기 추가 *****************************
$body='<html><body><p style="font:normal bold 30px/1.2 Gulim; color: #006600; text-align: center;">' .$subject . '</p> 이름 :' . $fromName . '<br /> 메일 주소 : ' . $fromEmail . '<br /> 전화번호 : ' .$from->tel1 .'-'. $from->tel2 .'-'. $from->tel3 .'<br />결혼예정일 : ' . $from->day .'년' .$from->day2 . '월 ' .$from->day3 .'일 <br />메모 : ' .$from->memo .'<br />접속기기 : ' .$contype.'</body></html>'; // 메일내용
////// <br />접속기기 : ' .$contype.' 추가 *****************************
//echo $body;
//echo '<br />';
$encoded_subject="=?".$charset."?B?".base64_encode($subject)."?=\n"; // 인코딩된 제목
$to= "\"=?".$charset."?B?".base64_encode($toName)."?=\" <".$toEmail.">" ; // 인코딩된 받는이
$from= "\"=?".$charset."?B?".base64_encode($fromName)."?=\" <".$fromEmail.">" ; // 인코딩된 보내는이
$headers="MIME-Version: 1.0\n".
"Content-Type: text/html; charset=".$charset."; format=flowed\n".
"To: ". $to ."\n".
"From: ".$from."\n".
"Return-Path: ".$from."\n".
"Content-Transfer-Encoding: 8bit\n"; // 헤더 설정
$mail = mail ( $to , $encoded_subject , $body , $headers ); // 메일 보내기
//echo $mail;
echo json_encode($mail);
?>
이렇습니다.
무엇이 문제일까요? ㅠㅠ
답변 1
아래와 같이 직전/직후에 로그를 남겨보세요.
...
error_log(__FILE__ . ':' . __LINE__); // 직전
error_log(print_r($_POST, true));
$mail = mail ( $to , $encoded_subject , $body , $headers ); // 실제 메일 전송 부분
error_log(__FILE__ . ':' . __LINE__); // 직후
...
error_log 는 서버 설정에 따라 로그가 남겨지지 않을 수 도 있을 경우를 대비
간단하게 파일로 로그 남기는 함수 만들고 호출하셔도 됩니다.