PHP mail() 함수를 사용하여 이메일을 보내는 방법
⚡ 스마트 요약
PHP의 `mail` 함수는 서버의 SMTP 설정을 사용하여 PHP 스크립트에서 직접 이메일을 보내는 내장 함수입니다. 이 가이드에서는 `mail()` 함수의 구문 및 매개변수, php.ini 파일에서 SMTP 설정, `filter_var`를 사용한 사용자 입력 검증, 보안 메일 전송, 그리고 PHP를 사용하는 방법에 대해 다룹니다.Mail믿을 수 있는 배송을 위해.

PHP 메일이란?
PHP mail은 PHP 스크립트에서 이메일을 보내는 데 사용되는 PHP 내장 함수입니다.
메일 기능은 다음과 같은 매개변수를 허용합니다.
- 이메일 주소
- 제목
- 메시지
- CC 또는 BCC 이메일 주소
PHP 메일을 사용해야 하는 이유와 시기
메일 기능은 여러 상황에서 유용합니다.
- 이는 사용자에게 중요한 이벤트를 알리는 비용 효율적인 방법입니다.
- 웹사이트에 문의 양식을 제공하여 제공된 콘텐츠를 이메일로 전송함으로써 사용자가 이메일을 통해 연락할 수 있도록 하세요.
- 개발자는 이를 통해 시스템 오류를 이메일로 수신할 수 있습니다.
- 뉴스레터 구독자에게 이메일을 보내는 데 사용할 수 있습니다.
- 이 기능을 사용하면 비밀번호를 잊어버린 사용자에게 비밀번호 재설정 링크를 보낼 수 있습니다.
- 이메일 활성화 및 확인 링크를 보내는 데 사용할 수 있습니다. 이는 사용자 등록 및 이메일 주소 인증 시 유용합니다.
PHP를 사용하여 메일 보내기
PHP 메일 함수의 기본 구문은 다음과 같습니다.
<?php mail($to_email_address,$subject,$message,[$headers],[$parameters]); ?>
이리,
- “$to_email_address”는 메일 수신자의 이메일 주소입니다.
- “$subject”는 이메일 제목입니다.
- "$message"는 보낼 메시지입니다.
- “[$headers]”는 선택 사항이며, 참조(CC) 및 숨은 참조(BCC)와 같은 정보를 포함하는 데 사용할 수 있습니다.
- CC는 '참조 사본(carbon copy)'의 약자입니다. 이는 이해관계가 있는 사람에게 사본을 보내고 싶을 때 사용됩니다. 예를 들어, 회사에 불만 이메일을 보낼 때 불만 처리 위원회에도 CC로 보낼 수 있습니다.
- BCC는 숨은 참조(BCC)의 약자입니다. CC와 유사하지만, BCC에 포함된 이메일 주소는 다른 수신자에게 표시되지 않습니다.
단순, 간단, 편리 Mail Transmission 프로토콜(SMTP)
PHP 메일은 Simple을 사용합니다. Mail Transmission 메일을 보내기 위한 프로토콜(SMTP)
호스팅 서버에서는 SMTP 설정이 이미 되어 있을 것입니다.
SMTP 메일 설정은 PHP 설치 폴더에 있는 "php.ini" 파일에서 구성할 수 있습니다.
XAMPP를 사용하고 있다고 가정할 때, 로컬 호스트에서 SMTP 설정을 구성하려면 다음 단계를 따르세요. Windows"C:\xampp\php" 디렉토리에서 "php.ini" 파일을 찾으십시오.
- 메모장이나 다른 텍스트 편집기를 사용하여 엽니다. 이 예에서는 메모장을 사용하겠습니다. 편집 메뉴를 클릭합니다.
- 찾기… 메뉴를 클릭하세요
- 찾기 대화 상자가 나타납니다.
- '다음 찾기' 버튼을 클릭하세요
[메일 기능] 항목 아래에 있는 내용을 찾으세요. 기본 설정은 보통 다음과 같습니다.
- ; SMTP = 로컬호스트
- ; smtp_port = 25
SMTP와 smtp_port 앞의 세미콜론을 제거하고 SMTP를 사용자 환경에 맞게 설정하세요. SMTP 서버 그리고 포트는 SMTP 포트로 설정하십시오. 설정은 다음과 같아야 합니다.
- SMTP = smtp.example.com
- smtp_port = 25
참고: SMTP 설정은 웹 호스팅 제공업체에서 확인할 수 있습니다. 서버에서 인증이 필요한 경우 다음 줄을 추가하십시오.
- auth_username = example_username@example.com
- auth_password = example_password
변경 사항을 저장하고 다시 시작하세요. 아파치 서버.
PHP Mail 예시
이제 간단한 이메일을 보내는 예시를 살펴보겠습니다.
<?php $to_email = 'name@example.com'; $subject = 'Testing PHP Mail'; $message = 'This mail is sent using the PHP mail function'; $headers = 'From: noreply@example.com'; mail($to_email,$subject,$message,$headers); ?>
출력:
참고: 위 예시는 필수 매개변수 4개만 사용합니다. 위의 가상 이메일 주소는 실제 이메일 주소로 바꿔야 합니다.
이메일 사용자 입력 내용 정리
위의 예에서는 단순성을 위해 이메일 주소와 기타 세부정보에 대한 소스 코드에 하드코딩된 값을 사용합니다.
사용자가 세부 정보를 입력하고 제출하는 문의 양식을 만들어야 한다고 가정해 보겠습니다.
- 사용자는 실수로 또는 의도적으로 헤더에 코드를 삽입할 수 있으며, 이로 인해 스팸 메일이 전송될 수 있습니다.
- 이러한 공격으로부터 시스템을 보호하려면 메일을 보내기 전에 값을 정리하고 검증하는 사용자 지정 함수를 만들 수 있습니다.
`filter_var` 내장 함수를 사용하여 이메일 주소를 검증하고 정제하는 사용자 지정 함수를 만들어 보겠습니다. `filter_var` 함수는 사용자 입력 데이터를 검증하고 정제하는 데 사용됩니다.
기본 구문은 다음과 같습니다.
<?php filter_var($field, SANITIZATION_TYPE); ?>
이리,
- "filter_var(…)"는 유효성 검사 및 삭제 기능입니다.
- "$field"는 필터링할 필드의 값입니다.
- “SANITIZATION_TYPE”은 필드에 적용할 정제 유형을 나타냅니다. 예를 들면 다음과 같습니다.
- 이메일 필터링 검증 유효한 이메일 주소이면 true를, 유효하지 않은 이메일 주소이면 false를 반환합니다.
- 이메일 필터링_청결 - 이메일 주소에서 허용되지 않는 문자를 제거하여, 잘못된 문자가 포함된 주소는 info@domain.com으로 줄어듭니다.
- 필터_소독_URL – 허용되지 않는 문자를 제거합니다 URLs를 사용하면 https://www.example.com과 같은 깔끔한 주소가 남습니다.
- FILTER_SANITIZE_STRING - 문자열 값에서 태그를 제거합니다. 예를 들어 "am bold" 는 "am bold"가 됩니다. 이 필터는 PHP 8.1에서 더 이상 사용되지 않으므로 대신 htmlspecialchars()를 사용하십시오.
아래 코드는 사용자 지정 함수를 사용하여 보안 메일을 전송합니다.
<?php function sanitize_my_email($field) { $field = filter_var($field, FILTER_SANITIZE_EMAIL); if (filter_var($field, FILTER_VALIDATE_EMAIL)) { return true; } else { return false; } } $to_email = 'name@example.com'; $subject = 'Testing PHP Mail'; $message = 'This mail is sent using the PHP mail function'; $headers = 'From: noreply@example.com'; // check if the email address is invalid $secure_check = sanitize_my_email($to_email); if ($secure_check == false) { echo "Invalid input"; } else { // send email mail($to_email, $subject, $message, $headers); echo "This email is sent using PHP Mail"; } ?>
출력:
보안 Mail
이메일은 전송 중에 의도치 않은 수신자에 의해 가로채질 수 있습니다.
이로 인해 이메일 내용이 의도치 않은 수신자에게 노출될 수 있습니다.
보안 메일은 다음과 같은 방법으로 이 문제를 해결합니다. transmit예를 들어, 465번 포트의 SSL을 사용하는 SMTP 또는 587번 포트의 STARTTLS와 같이 SSL 또는 TLS를 사용하는 암호화된 연결을 통해 이메일을 전송합니다.
암호화는 메시지를 보내기 전에 내용을 뒤섞어, 수신자의 메일 서버만 읽을 수 있도록 합니다.
PHPMailer: mail()보다 더 나은 대안
실제 애플리케이션 개발에서 대부분의 개발자는 PHP를 사용합니다.MailPHP에서 mail() 함수 대신 라이브러리를 사용하세요.Mail이 프로그램은 외부 SMTP 서버를 통해 인증하므로 이메일 전송률이 크게 향상되고, 첨부 파일 및 HTML 이메일 전송이 간편해집니다.
Composer를 사용하여 설치한 다음 아래와 같이 인증되고 암호화된 SMTP 연결을 통해 메일을 보내십시오.
<?php use PHPMailer\PHPMailer\PHPMailer; require 'vendor/autoload.php'; $mail = new PHPMailer(true); $mail->isSMTP(); $mail->Host = 'smtp.example.com'; $mail->SMTPAuth = true; $mail->Username = 'user@example.com'; $mail->Password = 'secret'; $mail->SMTPSecure = 'tls'; $mail->Port = 587; $mail->setFrom('noreply@example.com', 'My App'); $mail->addAddress('name@example.com'); $mail->Subject = 'Testing PHPMailer'; $mail->Body = 'This email is sent using PHPMailer over SMTP'; $mail->send(); ?>
mail()과 비교했을 때, PHPMailer은 SMTP 인증, 내장 암호화, 첨부 파일 지원 및 명확한 오류 처리를 제공하므로 프로덕션 이메일에 권장되는 선택입니다.






