PHP

PHP로 이메일 보내기

thebasics 2024. 9. 16. 10:00

목차
1. PHP에서 이메일 보내기란 무엇인가?
   - 이메일 전송의 중요성
   - PHP에서 이메일 전송 방식
2. 'mail' 함수 사용법
   - 기본 사용법
   - 메일 헤더 설정
   - HTML 이메일 보내기
3. PHPMailer 라이브러리 사용법
   - PHPMailer 설치 및 설정
   - 기본 이메일 전송
   - 첨부 파일과 HTML 이메일 전송
4. 코드 예제
5. 결론 및 추가 학습 자료


1. PHP에서 이메일 보내기란 무엇인가?

이메일 전송의 중요성

이메일은 웹 애플리케이션에서 사용자와 소통하는 주요 수단 중 하나입니다. 회원가입 확인, 비밀번호 재설정, 뉴스레터 발송, 주문 확인 등 다양한 상황에서 이메일이 사용됩니다. PHP는 이러한 이메일 전송 작업을 간단하게 수행할 수 있는 기능을 제공합니다.

PHP에서 이메일 전송 방식

PHP에서 이메일을 전송하는 방식은 크게 두 가지가 있습니다:
- 'mail' 함수: PHP 내장 함수로, 기본적인 이메일 전송을 수행합니다. 설정이 간단하지만, 제한된 기능을 가지고 있습니다.
- PHPMailer 라이브러리: 더 복잡한 이메일 전송 작업을 지원하는 외부 라이브러리로, SMTP를 사용하여 안전하고 신뢰성 있는 이메일 전송이 가능합니다.


2. 'mail' 함수 사용법

기본 사용법

PHP의 'mail' 함수는 이메일을 전송하기 위한 기본적인 방법입니다. 다음은 'mail' 함수의 기본 사용법입니다:

<?php
$to = "recipient@example.com";
$subject = "Test Email";
$message = "Hello, this is a test email.";
$headers = "From: sender@example.com";

if (mail($to, $subject, $message, $headers)) {
    echo "Email sent successfully.";
} else {
    echo "Failed to send email.";
}
?>

이 예제에서는 'mail' 함수를 사용하여 간단한 텍스트 이메일을 전송합니다. 'mail' 함수는 성공적으로 이메일을 전송하면 'true'를 반환하고, 실패하면 'false'를 반환합니다.

메일 헤더 설정

이메일의 메타데이터를 정의하기 위해 메일 헤더를 설정할 수 있습니다. 예를 들어, 발신자 이름, CC 및 BCC 필드를 설정할 수 있습니다:

<?php
$to = "recipient@example.com";
$subject = "Test Email with Headers";
$message = "This is a test email with custom headers.";
$headers = "From: sender@example.com\r\n";
$headers .= "CC: another@example.com\r\n";
$headers .= "BCC: hidden@example.com\r\n";

if (mail($to, $subject, $message, $headers)) {
    echo "Email with headers sent successfully.";
} else {
    echo "Failed to send email with headers.";
}
?>

이 코드에서는 'CC'와 'BCC' 필드를 사용하여 추가 수신자에게 이메일을 전송합니다.

HTML 이메일 보내기

HTML 형식의 이메일을 전송하려면 메일 헤더에 'Content-type'을 설정해야 합니다:

<?php
$to = "recipient@example.com";
$subject = "HTML Email Test";
$message = "
<html>
<head>
    <title>HTML Email</title>
</head>
<body>
    <h1>This is a Heading</h1>
    <p>This is a paragraph.</p>
</body>
</html>
";
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
$headers .= "From: sender@example.com" . "\r\n";

if (mail($to, $subject, $message, $headers)) {
    echo "HTML email sent successfully.";
} else {
    echo "Failed to send HTML email.";
}
?>

이 예제는 HTML 형식으로 작성된 이메일을 전송합니다. 'Content-type' 헤더를 설정하여 이메일의 콘텐츠를 HTML로 지정합니다.


3. PHPMailer 라이브러리 사용법

PHPMailer 설치 및 설정

PHPMailer는 PHP로 이메일을 전송하기 위한 강력한 라이브러리입니다. Composer를 사용하여 PHPMailer를 설치할 수 있습니다:

composer require phpmailer/phpmailer

설치 후, 다음과 같이 PHPMailer를 설정할 수 있습니다:

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'vendor/autoload.php';

$mail = new PHPMailer(true);
?>

기본 이메일 전송

PHPMailer를 사용하여 기본적인 이메일을 전송하는 방법은 다음과 같습니다:

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'vendor/autoload.php';

$mail = new PHPMailer(true);

try {
    $mail->isSMTP();
    $mail->Host = 'smtp.example.com';
    $mail->SMTPAuth = true;
    $mail->Username = 'your_email@example.com';
    $mail->Password = 'your_password';
    $mail->SMTPSecure = 'tls';
    $mail->Port = 587;

    $mail->setFrom('your_email@example.com', 'Your Name');
    $mail->addAddress('recipient@example.com', 'Recipient Name');

    $mail->isHTML(true);
    $mail->Subject = 'Test Email from PHPMailer';
    $mail->Body    = 'This is a test email sent using <b>PHPMailer</b>.';
    $mail->AltBody = 'This is the plain text version of the email content.';

    $mail->send();
    echo 'Email has been sent successfully';
} catch (Exception $e) {
    echo "Email could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
?>

이 예제에서는 PHPMailer를 사용하여 SMTP 서버를 통해 이메일을 전송합니다. 'isSMTP' 메서드를 호출하여 SMTP를 사용하도록 설정하고, 필요한 인증 정보를 제공합니다.

첨부 파일과 HTML 이메일 전송

PHPMailer는 이메일에 파일을 첨부하거나 HTML 형식으로 이메일을 전송하는 기능도 제공합니다:

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'vendor/autoload.php';

$mail = new PHPMailer(true);

try {
    $mail->isSMTP();
    $mail->Host = 'smtp.example.com';
    $mail->SMTPAuth = true;
    $mail->Username = 'your_email@example.com';
    $mail->Password = 'your_password';
    $mail->SMTPSecure = 'tls';
    $mail->Port = 587;

    $mail->setFrom('your_email@example.com', 'Your Name');
    $mail->addAddress('recipient@example.com', 'Recipient Name');

    // 첨부 파일 추가
    $mail->addAttachment('/path/to/file.zip');
    $mail->addAttachment('/path/to/image.jpg', 'new.jpg');

    $mail->isHTML(true);
    $mail->Subject = 'Test Email with Attachment';
    $mail->Body    = 'This email contains an attachment sent using <b>PHPMailer</b>.';
    $mail->AltBody = 'This is the plain text version of the email content.';

    $mail->send();
    echo 'Email with attachment has been sent successfully';
} catch (Exception $e) {
    echo "Email could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
?>

이 코드에서는 'addAttachment' 메서드를 사용하여 파일을 이메일에 첨부합니다. 여러 파일을 첨부할 수 있으며, 이메일 본문은 HTML 형식으로 작성되었습니다.


4. 코드 예제

다음은 PHP의 'mail' 함수와 PHPMailer를 사용하여 이메일을 보내는 종합적인 예제입니다.

1. PHP 'mail' 함수로 기본 이메일 전송:

<?php
$to = "recipient@example.com";
$subject = "Welcome to Our Service";
$message = "Hello, thank you for registering with us.";
$headers = "From: no-reply@example.com";

if (mail($to, $subject, $message, $headers)) {
    echo "Basic email sent successfully.";
} else {
    echo "Failed to send basic email.";
}
?>

2. PHP 'mail' 함수로 HTML 이메일 전송:

<?php
$to = "recipient@example.com";
$subject

 = "Special Offer Just for You!";
$message = "
<html>
<head>
    <title>Special Offer</title>
</head>
<body>
    <h1>Exclusive Offer</h1>
    <p>Get 50% off on your next purchase.</p>
</body>
</html>
";
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
$headers .= "From: no-reply@example.com" . "\r\n";

if (mail($to, $subject, $message, $headers)) {
    echo "HTML email sent successfully.";
} else {
    echo "Failed to send HTML email.";
}
?>

3. PHPMailer로 SMTP를 통한 이메일 전송:

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'vendor/autoload.php';

$mail = new PHPMailer(true);

try {
    $mail->isSMTP();
    $mail->Host = 'smtp.example.com';
    $mail->SMTPAuth = true;
    $mail->Username = 'your_email@example.com';
    $mail->Password = 'your_password';
    $mail->SMTPSecure = 'tls';
    $mail->Port = 587;

    $mail->setFrom('your_email@example.com', 'Your Name');
    $mail->addAddress('recipient@example.com', 'Recipient Name');

    $mail->isHTML(true);
    $mail->Subject = 'Welcome to Our Service';
    $mail->Body    = 'Hello, <b>thank you</b> for registering with us.';
    $mail->AltBody = 'Hello, thank you for registering with us.';

    $mail->send();
    echo 'Email sent successfully via PHPMailer.';
} catch (Exception $e) {
    echo "Email could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
?>

4. PHPMailer로 파일 첨부 및 HTML 이메일 전송:

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'vendor/autoload.php';

$mail = new PHPMailer(true);

try {
    $mail->isSMTP();
    $mail->Host = 'smtp.example.com';
    $mail->SMTPAuth = true;
    $mail->Username = 'your_email@example.com';
    $mail->Password = 'your_password';
    $mail->SMTPSecure = 'tls';
    $mail->Port = 587;

    $mail->setFrom('your_email@example.com', 'Your Name');
    $mail->addAddress('recipient@example.com', 'Recipient Name');

    $mail->addAttachment('/path/to/contract.pdf', 'Contract.pdf');

    $mail->isHTML(true);
    $mail->Subject = 'Please Review the Attached Contract';
    $mail->Body    = 'Dear Client, <br>Please review the attached <b>contract</b>.';
    $mail->AltBody = 'Dear Client, Please review the attached contract.';

    $mail->send();
    echo 'Email with attachment sent successfully via PHPMailer.';
} catch (Exception $e) {
    echo "Email could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
?>

코드 분석:
- 첫 번째 예제는 'mail' 함수를 사용하여 기본적인 텍스트 이메일을 전송합니다.
- 두 번째 예제는 'mail' 함수를 사용하여 HTML 형식의 이메일을 전송합니다.
- 세 번째 예제는 PHPMailer를 사용하여 SMTP를 통해 이메일을 전송하며, 이메일 본문을 HTML 형식으로 작성합니다.
- 네 번째 예제는 PHPMailer를 사용하여 파일을 첨부한 HTML 형식의 이메일을 전송합니다.


5. 결론 및 추가 학습 자료

이번 글에서는 PHP에서 이메일을 전송하는 방법에 대해 알아보았습니다. PHP의 'mail' 함수는 간단한 이메일 전송에 유용하지만, 더 복잡한 이메일 기능이 필요하다면 PHPMailer와 같은 라이브러리를 사용하는 것이 좋습니다. PHPMailer는 SMTP를 통한 안전한 이메일 전송, HTML 이메일 작성, 파일 첨부 등 다양한 기능을 제공합니다.

추가 학습 자료:
- [PHP 공식 문서 - mail 함수](https://www.php.net/manual/en/function.mail.php) PHP 'mail' 함수에 대한 공식 문서입니다.
- [PHPMailer GitHub 리포지토리](https://github.com/PHPMailer/PHPMailer) PHPMailer 라이브러리의 소스 코드와 문서가 제공되는 GitHub 리포지토리입니다.
- [Sending Email with PHP](https://www.w3schools.com/php/php_ref_mail.asp) W3Schools에서 제공하는 PHP 이메일 전송 튜토리얼입니다.


이제 PHP를 사용하여 다양한 이메일 전송 작업을 효과적으로 수행할 수 있습니다. 실습을 통해 익히고, 필요에 따라 'mail' 함수 또는 PHPMailer를 사용해보세요!

반응형