Mail 메일 보내기
(PHP 4, PHP 5, PHP 7, PHP 8)
mail - 메일 보내기
설명
mail( string $to, string $subject, string $message, array|string $additional_headers = [], string $additional_params = "" ): bool
메일 보내기
매개변수
to
- 수신자 또는 메일 수신자.
이 문자열의 형식은 » RFC 2822를 준수해야 합니다. 몇 가지 예는 다음과 같습니다.
- user@example.com
- user@example.com, anotheruser@example.com
- User <user@example.com>
- User <user@example.com>, Another User <anotheruser@example.com>
subject
- 보낼 이메일의 제목입니다.
주의 제목은 » RFC 2047을 충족해야 합니다.
message
- 보낼 메시지입니다.
각 줄은 CRLF(\r\n)로 구분해야 합니다. 줄은 70자 이하여야 합니다.
주의 (Windows만 해당) PHP가 SMTP 서버와 직접 통신할 때 줄의 시작 부분에서 마침표가 발견되면 제거됩니다. 이에 대응하려면 이러한 발생을 이중 점으로 바꾸십시오.
<?php $text = str_replace("\n.", "\n..", $text); ?>
additional_headers (optional)
- 이메일 헤더의 끝에 삽입할 문자열 또는 배열입니다.
이것은 일반적으로 추가 헤더(From, Cc 및 Bcc)를 추가하는 데 사용됩니다. 여러 개의 추가 헤더는 CRLF(\r\n)로 구분해야 합니다. 외부 데이터가 이 헤더를 구성하는 데 사용되는 경우 원치 않는 헤더가 삽입되지 않도록 데이터를 삭제해야 합니다.
배열이 전달되면 해당 키는 헤더 이름이고 값은 각각의 헤더 값입니다.
메모: PHP 5.4.42 및 5.5.27 이전에는 각각
additional_headers
에 메일 헤더 삽입 방지 기능이 없었습니다. 따라서 사용자는 지정된 헤더가 안전하고 헤더만 포함하는지 확인해야 합니다. 즉, 여러 줄 바꿈을 넣어 메일 본문을 시작하지 마십시오.메모:메일을 보낼 때 메일에는
From
헤더가 포함되어야 합니다. 이는additional_headers
매개변수로 설정하거나 php.ini에서 기본값을 설정할 수 있습니다.이렇게 하지 않으면
Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing
과 유사한 오류 메시지가 표시됩니다. From 헤더는 SMTP를 통해 직접 보낼 때 Return-Path도 설정합니다(Windows만 해당).메모:메시지가 수신되지 않으면 LF(\n)만 사용해 보십시오. 일부 Unix 메일 전송 에이전트(특히 » qmail)는 LF를 자동으로 CRLF로 대체합니다(CRLF를 사용하면 CR이 두 배로 늘어남). » RFC 2822를 준수하지 않으므로 이것은 최후의 수단이어야 합니다.
additional_params (optional)
additional_params
매개변수는sendmail_path
구성 설정에 정의된 대로 메일을 보낼 때 사용하도록 구성된 프로그램에 명령줄 옵션으로 추가 플래그를 전달하는 데 사용할 수 있습니다. 예를 들어 -f sendmail 옵션과 함께 sendmail을 사용할 때 봉투 발신자 주소를 설정하는 데 사용할 수 있습니다.이 매개변수는 명령 실행을 방지하기 위해 내부적으로 escapeshellcmd()에 의해 이스케이프됩니다. escapeshellcmd()는 명령 실행을 방지하지만 추가 매개변수를 추가할 수 있습니다. 보안상의 이유로 셸 명령에 원치 않는 매개변수를 추가하지 않도록 사용자가 이 매개변수를 삭제하는 것이 좋습니다.
escapeshellcmd()는 자동으로 적용되기 때문에 인터넷 RFC에서 이메일 주소로 허용하는 일부 문자는 사용할 수 없습니다. mail()은 이러한 문자를 허용할 수 없으므로 이러한 문자의 사용이 필요한 프로그램에서는 이메일을 보내는 대체 수단(예: 프레임워크 또는 라이브러리 사용)을 권장합니다.
이 메서드를 사용하여 봉투 발신자(-f)를 설정할 때 'X-Warning' 헤더가 메시지에 추가되는 것을 방지하려면 웹 서버가 실행되는 사용자를 신뢰할 수 있는 사용자로 sendmail 구성에 추가해야 합니다. sendmail 사용자의 경우 이 파일은 /etc/mail/trusted-users입니다.
반환 값
메일이 성공적으로 배달되면 true
를 반환하고 그렇지 않으면 false
를 반환합니다.
메일이 배달을 위해 수락되었다고 해서 메일이 실제로 의도한 목적지에 도착한다는 의미는 아닙니다.
변경 로그
버전 | 설명 |
---|---|
7.2.0 | additional_headers 매개변수는 이제 배열도 허용합니다. |
Examples
예제 #1 Sending mail
mail()을 사용하여 간단한 이메일 보내기:
<?php
// The message
$message = "Line 1\r\nLine 2\r\nLine 3";
// In case any of our lines are larger than 70 characters, we should use wordwrap()
$message = wordwrap($message, 70, "\r\n");
// Send
mail('caffeinated@example.com', 'My Subject', $message);
?>
예제 #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);
?>
예제 #3 추가 헤더를 배열로 포함하는 메일 보내기
이 예는 바로 위의 예와 동일한 메일을 보내지만 추가 헤더를 배열로 전달합니다(PHP 7.2.0부터 사용 가능).
<?php
$to = 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = array(
'From' => 'webmaster@example.com',
'Reply-To' => 'webmaster@example.com',
'X-Mailer' => 'PHP/' . phpversion()
);
mail($to, $subject, $message, $headers);
?>
예제 #4 추가 명령줄 매개변수를 사용하여 메일 보내기.
additional_params
매개변수는 sendmail_path를 사용하여 메일을 보낼 때 사용하도록 구성된 프로그램에 추가 매개변수를 전달하는 데 사용할 수 있습니다.
<?php
mail('nobody@example.com', 'the subject', 'the message', null,
'-fwebmaster@example.com');
?>
예제 #5 HTML 이메일 보내기
mail()을 사용하여 HTML 이메일을 보내는 것도 가능합니다.
<?php
// Multiple recipients
$to = 'johny@example.com, sally@example.com'; // note the comma
// 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>Johny</td><td>10th</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>
';
// To send HTML mail, the Content-type header must be set
$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-type: text/html; charset=iso-8859-1';
// Additional headers
$headers[] = 'To: Mary <mary@example.com>, Kelly <kelly@example.com>';
$headers[] = 'From: Birthday Reminder <birthday@example.com>';
$headers[] = 'Cc: birthdayarchive@example.com';
$headers[] = 'Bcc: birthdaycheck@example.com';
// Mail it
mail($to, $subject, $message, implode("\r\n", $headers));
?>
메모: HTML 또는 복잡한 메일을 보내려는 경우 PEAR 패키지 » PEAR::Mail_Mime을 사용하는 것이 좋습니다.
메모
mail()의 SMTP 구현(Windows만 해당)은 sendmail 구현과 여러 면에서 다릅니다. 첫째, 메시지를 작성하는 데 로컬 바이너리를 사용하지 않고 직접 소켓에서만 작동합니다. 즉, MTA가 네트워크 소켓(localhost 또는 원격 시스템에서 가능)에서 수신 대기해야 함을 의미합니다.
둘째, From:, Cc:, Bcc: 및 Date:와 같은 사용자 정의 헤더는 처음에 MTA에서 해석되지 않지만 PHP에서는 구문 분석됩니다.
따라서 to
매개변수는 "Something <someone@example.com>" 형식의 주소가 아니어야 합니다. 메일 명령은 MTA와 통신하는 동안 이를 제대로 구문 분석하지 못할 수 있습니다.
mail() 함수는 루프에서 대량의 이메일에 적합하지 않습니다. 이 함수는 각 이메일에 대해 SMTP 소켓을 열고 닫는 데 매우 효율적이지 않습니다.
대량의 이메일을 보내는 경우 » PEAR::Mail 및 » PEAR::Mail_Queue 패키지를 참조하세요.
다음 RFC가 유용할 수 있습니다. » RFC 1896, » RFC 2045, » RFC 2046, » RFC 2047, » RFC 2048, » RFC 2049, 및 » RFC 2822.
기타
- mb_send_mail() - Send encoded mail
- imap_mail() - Send an email message
- » PEAR::Mail
- » PEAR::Mail_Mime