Post

[PHP] form 메일보내기 mail()

[PHP] form 메일보내기 mail()

mail()

mail 함수는 PHP를 이용하여 이메일을 보내는데 사용하는 함수입니다.

php mail 문법

1
mail( "메일받는주소", "메일제목", "메일내용", "메일헤더" );

예제1

  • 받는 메일 주소: diceworld@naver.com
  • 보낼 메일 주소: diceworld@naver.com
  • 메일 제목: PHP 메일 발송
  • 메일 내용: PHP mail() 함수를 이용한 메일 발송 테스트
1
2
3
4
5
6
7
8
<?
  $to = "diceworld@naver.com";
  $subject = "PHP 메일 발송";
  $contents = "PHP mail() 함수를 이용한 메일 발송 테스트";
  $headers = "From: diceworld@naver.com.\\n";

  mail($to, $subject, $contents, $headers);
?>

alt text 결과


index.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>메일전송</title>
  <style>
    *{margin:0; padding:0}
    ul{ list-style:none;}

    #mailAddress{width:80%; border:1px solid #ccc; border-radius:10px; margin:20px 5%;
    padding:20px 5%}
    #mailAddress li{ margin-bottom:15px}
    #mailAddress input,
    textarea{width:90%; border-radius:5px; border:0; padding:10px 5%;
    background:#F0F0F0}
    </style>
</head>
<body>
  <div id="mailAddress">
    <form action="mail.php" method="post">
      <ul>
        <li><input type="text" id="uname" name="uname" placeholder="Full name"></li>
        <li><input type="text" id="email" name="email" placeholder="E-mail address"></li>
        <li><input type="text" id="phone" name="phone" placeholder="Phone number"></li>
        <li><textarea name="message"  placeholder="Message" cols="50" rows="15"></textarea></li>
        <li><input type="submit" value="Send E-mail" class="submitBtn"></li>
      </ul>
    </form>
  </div>
</body>
</html>

mail.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<meta charset="UTF-8">

<?
  $name_01 = $_POST['uname'];
  $mail_02 = $_POST['email'];
  $phone_03 = $_POST['phone'];
  $msg_04 = $_POST['message'];


  $to = 'test@naver.com';    // 관리자 메일 주소
  $subject = 'XXX사이트에서 관리자에게 보낸 메일';
  $msg = "보낸사람:$name_01\n".
  "보낸사람메일주소:$mail_02\n".
  "보낸사람전화번호:$phone_03\n".
  "내용:$msg_04\n";

  mail($to,$subject,$msg,'보낸사람메일주소:'.$mail_02);   

  echo "<script>
    alert('성공적으로 메일이 전송되었습니다.');
    //history.go(-1);
    location.href='index.html';
  </script>
  "

  /*
  echo '이름:'.$name_01.'<br />';
  echo '메일:'.$mail_02.'<br />';
  echo '메일:'.$phone_03.'<br />';
  echo '내용:'.$msg_04.'<br />';
  echo '메일이 성공적으로 전송되었습니다<br />';
  */
?>

메일 발송이 안되는 경우

윈도우에서 Apache + PHP를 사용하는 경우

Warning: mail() [function.mail]: [Failed to connect to mailserver at “localhost” port 25, verify your “SMTP” and “smtp_port” setting in php.ini or use ini_set() in C:\APM_Setup\hotdocs\index.php on line 12

와 같은 오류가 발생할 수 있습니다. 이런 경우 메일 발송 서버를 따로 설치해야 합니다.

리눅스에서 selinux에 막힌 경우

오류메세지가 표시되지 않는 경우도 존재하는데 리눅스 콘솔창에서 cat/var/log/maillog를 이용하여 어떤 메세지가 나오는지 확인해야 합니다.

만약 postfix/sendmail[숫자]: fatal: chdir /var/spool/postfix: Permission denied 가 로그에 있는 경우 /usr/sbin/setenforce 0를 통ㅎ 잠시 selinux를 끄고 발송을 해보시기 바랍니다.

스팸메일로 분류되는 경우

메일 발송이 실패하고 리눅스 콘솔창에서 cat / var/log/maillog 명령어를 쳤을 때 Your ip is filtered by RBL. And this connection will be closed. (IP: IP주소) (Caues: http://www.spamhaus.org/query/bl?ip=IP주소) 와 같이 나오는 경우 해당 아이피가 블랙리스트에 등록되어 있는 것입니다. 아이피 블랙리스트에서 제외되도록 해제 신청을 하시거나 다른 아이피를 사용해야 한다.


부트스트랩 이메일보내기

부트스트랩 이메일보내기

contact_me.php

1
$to = 'webmaster@naver.com'; // 받는이의 메일 주소 수정
This post is licensed under CC BY 4.0 by the author.