mail

(PHP 3, PHP 4 , PHP 5)

mail -- 메일을 보냅니다.

설명

bool mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]])

mail()은 자동적으로 message에 지정한 메세지를 to에 지정한 수신자에게 메일을 보냅니다. 복수 수신자는 to에 콤마로 구분한 각각의 어드레스를 지정할 수 있습니다. 부가 요소와 특별한 형태의 내용을 가진 Email을 이 함수를 이용하여 보낼 수 있습니다. MIME-encoding을 이용하여 이루어집니다 - 자세한 정보는 젠드 아티클이나 PEAR Mime 클래스를 참고하십시오.

다음의 RFC도 유용합니다: RFC 1896, RFC 2045, RFC 2046, RFC 2047, RFC 2048, RFC 2049.

mail()은 메일 전달이 성공하면 TRUE를, 그 외의 경우에는 FALSE를 반환합니다.

주의

mail()의 윈도우즈판은 유닉스판과 많은 점에서 차이가 있습니다. 첫번째, 메세지를 작성할 때 로컬 바이너리를 사용하지 않고, 단지 직접 소켓 연결을 합니다. MTA가 네트워크 소켓을 리스닝하고 있을 필요가 있습니다. (localhost나 원격 머신 어디든지 가능합니다) 둘째, From:, Cc:, Bcc:, Date: 등의 사용자 헤더는 MTA에서 해석하지 않고, PHP에서 처리를 합니다. PHP < 4.3은 Cc: 헤더 요소(대소문자 구별)만을 지원합니다. PHP >= 4.3은 위의 모든 헤더 요소를 지원하고, 대소문자를 구별하지 않습니다.

예 1. 메일 보내기.

<?php
mail
("joecool@example.com", "My Subject", "Line 1\nLine 2\nLine 3");
?>

네번째 문자열 인자가 주어지면, 문자열은 헤더의 마지막에 추가됩니다. 일반적으로 기타 헤더를 추가할 때 사용합니다. 복수의 헤더는 캐리지리턴과 뉴라인으로 구별합니다.

참고: 헤더 구분에는 \r\n을 사용해야만 합니다. 일부 유닉스 메일 전송 에이전트는 하나의 뉴라인(\n)과는 작동하지 않습니다.

예 2. 추가 헤더를 지정해서 메일 보내기.

<?php
mail
("nobody@example.com", "the subject", $message,
     
"From: webmaster@{$_SERVER['SERVER_NAME']}\r\n" .
     
"Reply-To: webmaster@{$_SERVER['SERVER_NAME']}\r\n" .
     
"X-Mailer: PHP/" . phpversion());
?>

additional_parameters 인자는 메일을 보낼 때 사용하는 sendmail_path 설정에 있는 프로그램에 추가 인자를 넘깁니다. 예를 들어, 센드메일을 사용할때 인증 전송자 주소를 지정하는 -f 센드메일 옵션을 사용하게 할 수 있습니다. 이 방법으로 인증 전송자를 지정했을 때 'X-warning'헤더가 메세지에 추가되는 것을 막기 위해서는 센드메일 설정에 웹 서버를 실행하는 유저를 추가해야 합니다.

예 3. 추가 헤더와 추가 명령줄 인자를 지정하여 메일 보내기.

<?php
mail
("nobody@example.com", "the subject", $message,
     
"From: webmaster@{$_SERVER['SERVER_NAME']}", "-fwebmaster@{$_SERVER['SERVER_NAME']}");
?>

참고: 다섯번째 인자는 PHP 4.0.5에서 추가되었고, PHP 4.2.3부터 이 인자는 안전 모드에서는 사용할 수 없습니다. 이를 사용하려고 하면 mail() 함수는 경고 메세지를 출력하고 FALSE를 반환합니다.

복잡한 email 메세지를 작성하기 위해 간단한 문자열 작성 테크닉을 사용할 수 있습니다.

예 4. 복잡한 메일 보내기.

<?php
/* recipients */
$to  = "mary@example.com" . ", " ; // 콤마인 것에 주의.
$to .= "kelly@example.com";

/* subject */
$subject = "Birthday Reminders for August";

/* message */
$message = '
<html>
<head>
<title>Birthday Reminders for August</title>
</head>
<body>
<p>Here are the birthdays upcoming in August!</p>
<table>
<tr>
  <th>Person</th><th>Day</th><th>Month</th><th>Year</th>
</tr>
<tr>
  <td>Joe</td><td>3rd</td><td>August</td><td>1970</td>
</tr>
<tr>
  <td>Sally</td><td>17th</td><td>August</td><td>1973</td>
</tr>
</table>
</body>
</html>
'
;

/* HTML 메일을 보내려면, Content-type 헤더를 설정해야 합니다. */
$headers  = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";

/* 추가 헤더 */
$headers .= "To: Mary <mary@example.com>, Kelly <kelly@example.com>\r\n";
$headers .= "From: Birthday Reminder <birthday@example.com>\r\n";
$headers .= "Cc: birthdayarchive@example.com\r\n";
$headers .= "Bcc: birthdaycheck@example.com\r\n";

/* 그리고 메일을 보냅니다. */
mail($to, $subject, $message, $headers);
?>

참고: tosubject에 어떠한 뉴라인 문자도 존재해서는 안됩니다. 그렇지 않으면, 메일은 정상적으로 보내지지 않을 수 있습니다.

참고: to 인자는 "Something <someone@example.com>" 형태로 주어져서는 안됩니다. mail 명령은 MTA와 통신할 때 이를 정상적으로 처리하지 못할 수 있습니다. (특히 윈도우즈에서)

참고: imap_mail().