이메일 전송 · 3 min read · Oct 25, 2025
PHP로 이메일 보내기
PHP로 이메일 보내기
이 튜토리얼은 PHP가 활성화된 웹 서버에서 이메일 메시지를 쉽게 보내는 방법을 보여줍니다. 이는 양식 데이터 처리, 알림 전송 등에 활용될 수 있습니다. 또한 이메일 헤더 형식에 대해 약간 설명합니다.
시스템 구성
명백히 웹 서버와 PHP가 설치되어 있어야 합니다. 또한 운영 체제에 이메일 에이전트가 설치되어 있는지 확인해야 합니다(예: Linux의 Sendmail 또는 IIS의 SMTP 서비스). 포트 25가 차단되지 않았는지 확인하세요. 이는 메시지를 두 번째 서버를 통해 릴레이하는 경우에도 필요합니다.
PHP는 기본적으로 mail 함수를 활성화합니다. 그러나 ‘php.ini’ 파일의 [mail function] 섹션(약 700번째 줄)에서 추가 옵션을 지정할 수 있습니다.
구문
mail() 명령의 전체 구문은 다음과 같습니다:
bool mail ( string $email_address_to, string $subject, string $message_contents [, string $additional_headers [, string $additional_parameters]] );첫 번째 3개의 매개변수는 설명이 필요하지 않습니다: 수신자 이메일 주소, 메시지의 제목, 메시지의 내용. $additional_headers 매개변수에는 나중에 나열할 이메일 헤더가 포함됩니다. $additional_parameters는 이메일 전송에 사용되는 프로그램(예: sendmail)에 특정한 옵션을 전달하는 데 사용되며 드물게 사용됩니다. sendmail의 매뉴얼 페이지에서 옵션 목록을 확인해야 합니다.
절대 최소한으로 다음을 지정해야 합니다:
mail ( $email_address_to , $subject, $message_contents );그러나 준수 이유로 추가 헤더를 정의하는 것이 권장됩니다. 이메일 메시지는 RFC #822와 호환되어야 합니다.
아래 예시는 사용할 수 있는 몇 가지 이메일 헤더를 보여줍니다:
- From: 발신자의 이메일 주소.
- Reply-To: 답장이 전송되어야 하는 이메일 주소.
- Return-Path: 메시지가 배달되지 않을 경우 반환되어야 하는 경우 사용됩니다.
- Subject: 이메일의 제목.
- CC: 참조. 모든 다른 수신자가 볼 수 있는 추가 수신자의 쉼표로 구분된 목록입니다.
- BCC: 숨은 참조. 다른 수신자가 볼 수 없는 추가 수신자의 쉼표로 구분된 목록입니다.
- Content-type: 메시지의 MIME 유형을 정의합니다.
- X-Mailer: 메시지를 전송하는 데 사용된 이메일 클라이언트를 지정합니다.
기억해야 할 중요한 점은 헤더 이름이 대소문자를 구분하며 각 헤더는 return 및 newline 문자로 끝나야 한다는 것입니다.
각 메시지는 최소 2개의 이메일 서버(발신자 및 수신자)를 통해 라우팅됩니다. 그러나 릴레이 서버, 스팸 방지 서버 등과 같은 더 많은 이메일 서버가 경로에 있을 수 있습니다. 각 서버는 메시지에 고유한 헤더를 추가합니다. 또한 웹 서버의 설정에 따라 Return-Path와 같은 일부 헤더 필드를 교환할 수 있다는 점도 염두에 두어야 합니다. 이 필드는 답장 주소에 영향을 미치지 않습니다.
예제
다음은 이메일 메시지를 전송하는 간단한 예제입니다:
전체 예제
이 예제는 더 많은 옵션과 헤더가 포함된 더 조직적인 구조를 보여줍니다:
";
$email_return_to = "[email protected]";
$email_content_type = "text/html; charset=us-ascii";
$email_client = "PHP/" . phpversion();
// ------------------------- //
// --- 헤더 정의 --- //
$email_header = "From: " . $email_sender . "\r\n";
$email_header .= "Reply-To: " . $email_return_to . "\r\n";
$email_header .= "Return-Path: " . $email_return_to . "\r\n";
$email_header .= "Content-type: " . $email_content_type . "\r\n";
$email_header .= "X-Mailer: " . $email_client . "\r\n";
// ---------------------- //
// --- 제목 및 내용 --- //
$email_subject = "테스트 이메일 제목";
$email_contents = "";
$email_contents .= "테스트 이메일
";
$email_contents .= "
발신자: " . $email_sender;
$email_contents .= "
수신자: " . $email_recipient;
$email_contents .= "";
// ---------------------------- //
$email_result = mail($email_recipient, $email_subject, $email_contents, $email_header);
if ($email_result) echo "이메일이 전송되었습니다!";
else echo "이메일 전송에 실패했습니다!";
?>
[email protected]>- 참고: mail()의 Windows 구현은 Unix 구현과 여러 면에서 다릅니다. 첫째, 메시지를 작성하기 위해 로컬 바이너리를 사용하지 않고 직접 소켓에서만 작동하므로 네트워크 소켓에서 수신 대기하는 MTA가 필요합니다(로컬호스트 또는 원격 머신에 있을 수 있음). 둘째, From:, Cc:, Bcc: 및 Date:와 같은 사용자 정의 헤더는 처음에 MTA에 의해 해석되지 않고 PHP에 의해 구문 분석됩니다. 따라서 to 매개변수는 “Something < [email protected] >” 형식의 주소가 되어서는 안 됩니다. mail 명령은 MTA와 통신할 때 이를 제대로 구문 분석하지 못할 수 있습니다.
- 참고: mail() 함수는 루프에서 대량의 이메일에 적합하지 않다는 점도 언급할 가치가 있습니다. 이 함수는 각 이메일에 대해 SMTP 소켓을 열고 닫기 때문에 효율적이지 않습니다.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.