PHP에서 메일 보내는 방법 > 서버관리 Tip

본문 바로가기
 

PHP에서 메일 보내는 방법

페이지 정보

작성자 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 댓글 0건 조회 15,477회 작성일 09-05-19 21:06

본문

인터넷에서 메일을 보내는 일은 아주 쉬운 일입니다. 물론 포털 사이트의 메일 기능을 사용한다면 말이죠. 하지만 자신이 개발하고 있는 웹 프로그래밍 언어에서 어떻게 메일을 보낼 수 있을까요? 이것은 앞의 방법보다는 좀 더 어렵습니다.
여기서는 PHP를 이용하여 메일을 보내는 방법을 소개하겠습니다. PHP로 메일을 보내는 방법은 생각보다 무지 쉽습니다 ^^

PHP에서 메일을 보내는 방법 - mail() 함수를 이용한다.

mail() 함수 사용 방법

mail() 함수는 아래와 같이 정의됩니다.
bool mail (string $to, string $subject, string $message[, string $additional_headers[, string $additional_parameters]])

$to: 받는이 (여러 명 가능)
$subject: 메일 제목
$message: 메일 내용
$additional_headers: 추가 헤더
$additional_parameters: 추가 파라미터
mail()은 자동적으로 $message에 저장된 메시지를 $to에 지정한 수신자에게 메일을 보냅니다. 여러 명의 사람에게 메일을 보내기 위해서는 $to에 콤마(,)로 구분한 각각의 주소를 작성합니다.

또한 이 함수에서는 부가 요소와 특별한 형태의 내용을 가진 Email을 보낼 수 있습니다.

이 함수는 전달이 성공하면 true를, 실패하면 false를 반환합니다.
※ 주의
윈도우즈용 mail()은 유닉스용과 많은 차이가 있습니다.

1. 메시지를 작성할 때 로컬 바이너리를 사용하지 않고, 단지 직접 소켓 연결을 합니다. MTA가 네트워크 소켓을 리스닝하고 있을 필요가 있습니다. (localhost나 원격 서버 어디서든지 가능합니다.)

2. From:, Cc:, Bcc:, Date: 등의 사용자 헤더는 MTA에서 해석하지 않고, PHP에서 처리를 합니다. PHP 4.3 아래의 버전은 Cc:  헤더 요소(대소문자 구별)만을 지원합니다. PHP 4.3 이상 버전은 위의 모든 헤더 요소를 지원하고, 대소문자를 구별하지 않습니다.

mail() 함수 사용 예제

Example#1 메일 보내기
  1. <?php   
  2.     mail("joecool@example.com""My Subject""Line 1\nLine 2\nLine 3");   
  3. ?>   
<?php     mail("joecool@example.com", "My Subject", "Line 1\nLine 2\nLine 3"); ?>

네번째 문자열 인자가 주어지면, 문자열은 헤더의 마지막에 위치합니다. 일반적으로 기타 헤더를 추가할 때 사용합니다. 복수의 헤더는 캐리지리턴이나 뉴라인으로 구분합니다.
※ 참고
헤더 구분에는 \r\n을 사용해야만 합니다. 일부 유닉스 메일 전송 에이전트는 하나의 뉴라인(\n)과는 작동하지 않습니다.
Example#2 추가 헤더를 지정해서 메일 보내기
  1. <?php   
  2.     mail("nobody@example.com""the subject"$message,   
  3.            "From: webmaster@{$_SERVER['SERVER_NAME']}\r\n".   
  4.            "Reply-To: webmaster@{$_SERVER['SERVER_NAME']}\r\n".   
  5.            "X-Mailer: PHP/".phpversion());   
  6. ?>   
<?php     mail("nobody@example.com", "the subject", $message,            "From: webmaster@{$_SERVER['SERVER_NAME']}\r\n".            "Reply-To: webmaster@{$_SERVER['SERVER_NAME']}\r\n".            "X-Mailer: PHP/".phpversion()); ?>

$additional_parameters 인자는 메일을 보낼 때 사용하는 sendmail_path 설정에 있는 프로그램에 추가 인자를 넘깁니다. 예를 들어, 센드메일을 사용할때 인증 전송자 주소를 지정하는 -f 센드메일 옵션을 사용하게 할 수 있습니다. 이 방법으로 인증 전송자를 지정했을 때 'X-warning'헤더가 메세지에 추가되는 것을 막기 위해서는 센드메일 설정에 웹 서버를 실행하는 유저를 추가해야 합니다.
Example#3 추가 헤더와 추가 명령줄 인자를 지정하여 메일 보내기
  1. <?php   
  2.     mail("nobody@example.com""the subject"$message,   
  3.            "From: webmaster@{$_SERVER['SERVER_NAME']}",   
  4.            "-fwebmaster@{$_SERVER['SERVER_NAME']}");   
  5. ?>   
<?php     mail("nobody@example.com", "the subject", $message,            "From: webmaster@{$_SERVER['SERVER_NAME']}",            "-fwebmaster@{$_SERVER['SERVER_NAME']}"); ?>
※ 참고
다섯번째 인자는 PHP 4.0.5에서 추가되었고, PHP 4.2.3부터 이 인자는 안전 모드에서는 사용할 수 없습니다. 이를 사용하려고 하면 mail() 함수는 경고 메세지를 출력하고 FALSE를 반환합니다.

Example#4 복잡한 메일 보내기
  1. <?php   
  2.     /* recipients */  
  3.     $to  = "mary@example.com" . ", "// 콤마인 것에 주의.   
  4.     $to .= "kelly@example.com";   
  5.        
  6.     /* subject */  
  7.     $subject = "Birthday Reminders for August";   
  8.        
  9.     /* message */  
  10.     $message = '  
  11.     <html>  
  12.     <head>  
  13.      <title>Birthday Reminders for August</title>  
  14.     </head>  
  15.     <body>  
  16.     <p>Here are the birthdays upcoming in August!</p>  
  17.     <table>  
  18.      <tr>  
  19.       <th>Person</th><th>Day</th><th>Month</th><th>Year</th>  
  20.      </tr>  
  21.      <tr>  
  22.       <td>Joe</td><td>3rd</td><td>August</td><td>1970</td>  
  23.      </tr>  
  24.      <tr>  
  25.       <td>Sally</td><td>17th</td><td>August</td><td>1973</td>  
  26.      </tr>  
  27.     </table>  
  28.     </body>  
  29.     </html>  
  30.     ';   
  31.        
  32.     /* HTML 메일을 보내려면, Content-type 헤더를 설정해야 합니다. */  
  33.     $headers  = "MIME-Version: 1.0\r\n";   
  34.     $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";   
  35.        
  36.     /* 추가 헤더 */  
  37.     $headers .= "To: Mary <mary@example.com>, Kelly <kelly@example.com>\r\n";   
  38.     $headers .= "From: Birthday Reminder <birthday@example.com>\r\n";   
  39.     $headers .= "Cc: birthdayarchive@example.com\r\n";   
  40.     $headers .= "Bcc: birthdaycheck@example.com\r\n";   
  41.        
  42.     /* 그리고 메일을 보냅니다. */  
  43.     mail($to$subject$message$headers);   
  44. ?>   
<?php     /* recipients */     $to  = "mary@example.com" . ", "; // 콤마인 것에 주의.     $to .= "kelly@example.com";         /* 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>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); ?>
※ 참고
$to$subject 에 어떠한 뉴라인 문자도 존재해서는 안됩니다. 그렇지 않으면, 메일은 정상적으로 보내지지 않을 수 있습니다.
※ 참고
$to  인자는 "Something <someone@example.com>" 형태로 주어져서는 안됩니다. mail 명령은 MTA와 통신할 때 이를 정상적으로 처리하지 못할 수 있습니다. (특히 윈도우즈에서)

PHP에서 메일을 보내는 방법 - PHP 메일 솔루션을 이용한다

PHP에는 메일 전송을 편하게 해주는 PHP 메일 솔루션 또는 라이브러리가 존재합니다. 이것들을 잘 사용을 하게되면 더욱 편하게 PHP에서 메일을 전송할 수 있습니다. 여기서 PHP 메일 솔루션(라이브러리)를 몇 가지 소개합니다.
※ 참고: PHP 메일 솔루션의 사용 방법은 여기서 소개하지 않습니다. 사용 방법은 추후 포스팅을 통해 제공하도록 하겠습니다.

XPertMailer

XPerMailer는 당신이 인코딩된 MIME 타입(텍스트, HTML, 이미지가 포함된 HTML, 첨부파일)의 메일을 로컬과 클라이언트에 전송하는 것을 도와줍니다. 또한 임의의 인증과 TLS/SSL을 지원합니다. XPertMailer 클래스는 짧은 시간에 실행될 수 있도록 최적화 되었으며, 사용하기도 쉽습니다. XPertMailer 클래스에 포함된 공용 함수의 이름은 개발자들이 혼란스럽지 않게 하기 위해 아주 뚜렷한 것들만을 사용하였습니다.
※ 특징
* 여러명의 받는이(TOs, CCs, BCCs)가 가능합니다.
* HTML 이메일을 지원하지 않는 클라이언트를 위해 다양한 MIME 포맷을 지원합니다.
* 이메일을 보내는 데 다양한 방법을 제공합니다. (로컬, 클라이언트, 소스, 유닉스 라인)
* 메일의 헤더 입력을 보호합니다.
* HTML에 이미지를 포함할 수 있습니다.
* 첨부파일과 헤더의 초기화 함수를 지원합니다.
* 8비트, Base64, 바이너리, quoted-printable 인코딩을 지원합니다.
* 국제적인 지원을 위해 문자셋을 지정할 수 있습니다.
* Authentication LOGIN, PLAIN, CRAM-MD5, POP Before SMTP
* SSL 암호 풀이법 - TLS, SSL, SSLv2, SSLv3을 지원합니다.
* 소켓, IP를 이용한 포트 연결과 같은 연결을 지원합니다.
* PHP4 이상 버전이 설치된 어느 플랫폼에서나 작동합니다.
XPertMailer 다운로드 페이지: http://sourceforge.net/project/showfile ··· 3D153855

PHPMailer

PHPMailer는 XPertMailer와 큰 차이는 없습니다. 제가 보기에 특징까지도 아주 비슷하다는 것을 알 수 있습니다. 하지만 PHPMailer는 텍스트큐브에서 사용된다는 것이 신뢰가 가는 솔루션입니다. 게다가 업데이트가 아주 최근에 되었기 때문에 더 신뢰성이 크다고 할 수 있습니다. 현재 PHP5와 PHP6를 지원하는 2.2.1 버전까지 나왔습니다.

PHP Mailer 다운로드 페이지: http://sourceforge.net/project/showfile ··· %3D26031

댓글목록

등록된 댓글이 없습니다.

Total 159건 7 페이지
서버관리 Tip 목록
번호 제목 글쓴이 조회 날짜
51 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15772 08-04
50 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 9529 08-04
49 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 12797 08-04
48 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 10311 08-04
47 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15949 08-03
46 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 11554 06-23
45 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 10764 06-19
44 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15775 06-05
43 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 8841 06-05
42 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 18372 06-05
41 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 14504 06-05
40 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 13739 06-05
39 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 13948 06-05
38 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 13552 06-05
37 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 14361 06-05
36 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 16539 05-29
열람중 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 15478 05-19
34 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 19861 05-19
게시물 검색