(PHP 4, PHP 5)
mail — 메일을 보냅니다
이메일을 보냅니다.
메일 수신자.
이 문자열의 형식은 » RFC 2822에 적합해야 합니다. 예를 들면:
보낼 이메일의 제목.
제목은 » RFC 2047을 만족해야 합니다.
보내질 메세지.
각 줄은 LF(\n)로 구분되어야 합니다. 한 줄은 70 문자를 넘을 수 없습니다.
(윈도우만) PHP가 SMTP 서버와 직접 통신할 때, 줄 시작의 마침표가 제거됩니다. 이를 방지하려면, 이런 마침표를 2개로 교체할 수 있습니다.
<?php
$text = str_replace("\n.", "\n..", $text);
?>
이메일 헤더 마지막에 추가될 문자열.
헤더를 추가하기 위해서 사용됩니다. (From, Cc, Bcc) 여러 추가 헤더는 CRLF(\r\n)로 구분해야 합니다.
Note: 메일을 보낼 때, 꼭 From 헤더를 포함해야 합니다. 이는 additional_headers 인수를 통하여 설정하거나, 기본값을 php.ini에 설정할 수 있습니다.
이 작업을 하지 않으면 다음과 비슷한 오류 메세지가 출력됩니다. Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing. 윈도우에서 From 헤더는 Return-Path도 설정합니다.
Note: 메세지가 전달되지 않으면, LF(\n)만 사용해 보십시오. 몇몇 질 나쁜 유닉스 메일 전송 에이전트는 자동으로 LF를 CRLF로 교체합니다. (이 경우 CRLF를 쓰면 CR이 두번 들어가게 됩니다) 이는 최후 수단이여야 하며, » RFC 2822에 적합하지 않습니다.
sendmail_path 설정을 사용하여 메을을 보낼 때, additional_parameters 인수를 사용하여 추가적인 인수를 전달할 수 있습니다. 예를 들면, -f sendmail 옵션을 사용하여 봉투 전송 주소를 넣을 수 있습니다.
웹 서버를 운영하는 사용자는 sendmail 설정에 신뢰하는 사용자를 추가하여, 이 방식(-f)으로 봉투 전송 주소를 넣을 때 'X-Warning' 헤더 추가를 막을 수 있습니다. sendmail 사용자라면, 이 파일은 /etc/mail/trusted-users입니다.
메일이 성공적으로 전송이 허용되었을 때는 TRUE, 그 외에는 FALSE를 반환합니다.
이는 메일 전송이 허용 되었을 뿐, 원하는 목적지에 도착한 것을 의미하는 것이 아니라는 점에 주의하십시오.
버전 | 설명 |
---|---|
4.3.0 (윈도우만) | 모든 사용자 헤더(From, Cc, Bcc, Date 등)를 지원하고, 대소문자를 구분하지 않습니다. (사용자 헤더를 직접 MTA에 보내지 않고 먼저 PHP에서 처리함으로써, PHP < 4.3만 Cc 헤더 요소를 지원하고, 대소문자 구분을 하지 않습니다) |
4.2.3 | safe_mode에서 additional_parameters 인수를 쓸 수 없고, mail() 함수를 이 인수와 함께 사용하면 경고 문구를 출력하고 FALSE를 반환합니다. |
4.0.5 | additional_parameters 인수가 추가되었습니다. |
Example #1 메일 보내기.
간단한 이메일을 보내기 위해 mail() 사용하기:
<?php
// 메세지
$message = "Line 1\nLine 2\nLine 3";
// 한 줄이 70 문자를 넘어갈 때를 위하여, wordwrap()을 사용해야 합니다.
$message = wordwrap($message, 70);
// 전송
mail('caffeinated@example.com', 'My Subject', $message);
?>
Example #2 추가 헤더와 함께 메일 보내기
기본 헤더를 추가하여, MUA에게 From과 Reply-To 주소를 알려줍니다:
<?php
$to = 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com' . "\r\n" .
'Reply-To: webmaster@example.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
?>
Example #3 추가적인 명령줄 인수와 함께 메일 전송하기.
additional_parameters 인수는 메일을 보낼 때 사용하는 sendmail_path 설정에 있는 프로그램에 추가 인수를 넘깁니다.
<?php
mail('nobody@example.com', 'the subject', 'the message', null,
'-fwebmaster@example.com');
?>
Example #4 HTML 이메일 보내기
mail()로 HTML 이메일을 보낼 수 있습니다.
<?php
/* 다중 수신자 */
$to = 'aidan@example.com' . ', ' ; // 콤마인 것에 주의.
$to .= 'wez@example.com';
// 제목
$subject = 'Birthday Reminders for August';
// 메세지
$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);
?>
Note: 윈도우에서 mail()은 유닉스에서와는 많은 점이 다릅니다. 첫번째로, 메세지 작성에 로컬 바이너리를 사용하지 않고 직접 소켓으로 작동합니다. 즉, MTA 네트워크 소켓(로컬호스트건 원격이건)이 열려 있어야 합니다.
두번째로, From:, Cc:, Bcc:, Date: 등의 사용자 헤더는 MTA에 직접 해석되지 않으며, PHP에서 처리합니다.
그러므로, to 인수는 "Something <someone@example.com>" 형태로 주어져서는 안됩니다. mail 명령은 MTA와 통신할 때 이를 정상적으로 처리하지 못할 수 있습니다.
Note: 첨부 파일과 특수한 내용 형식(예, HTML)을 가진 이메일을 이 함수로 보낼 수 있습니다. 이는 MIME-인코딩으로 이루어 집니다 - 자세한 사항은 » 젠드 글이나 » PEAR Mime 클래스를 참조하십시오.
Note: mail() 함수는 루프를 돌며 많은 양의 이메일을 처리하기엔 적합하지 않습니다. 이 함수는 각 이메일에 대하여 SMTP 소켓을 열고 닫으며, 매우 비효율적입니다.
많은 양의 이메일을 보내려면, » PEAR::Mail과 » PEAR::Mail_Queue 패키지를 알아보십시오.
Note: 다음 RFC가 유용합니다: » RFC 1896, » RFC 2045, » RFC 2046, » RFC 2047, » RFC 2048, » RFC 2049, » RFC 2822.