많은 PHP 개발자는 자신의 코드에서 이메일을 보내야 합니다. 이를 직접 지원하는 유일한 PHP 함수는 mail()
입니다. 그러나 암호화, 인증, HTML 메시지, 첨부 파일 등 널리 사용되는 기능을 사용하는 데는 어떠한 지원도 제공하지 않습니다.
이메일 형식을 올바르게 지정하는 것은 놀라울 정도로 어렵습니다. 엄청나게 복잡한 형식 및 인코딩 규칙을 엄격하게 준수해야 하는 수많은 중복(및 상충) 표준이 있습니다. 온라인에서 mail()
함수를 직접 사용하는 코드의 대부분은 안전하지 않더라도 완전히 잘못된 것입니다!
PHP mail()
함수는 일반적으로 Linux, BSD 및 macOS 플랫폼에서 sendmail
바이너리가 앞에 있는 로컬 메일 서버를 통해 전송하지만 Windows에는 일반적으로 로컬 메일 서버가 포함되어 있지 않습니다. PHPMailer의 통합 SMTP 클라이언트를 사용하면 로컬 메일 서버 없이도 모든 플랫폼에서 이메일을 보낼 수 있습니다. 하지만 가능한 경우 mail()
함수는 피해야 한다는 점에 유의하세요. SMTP를 localhost에 사용하는 것이 더 빠르고 안전합니다.
직접 해보고 싶은 유혹에 빠지지 마십시오 . PHPMailer를 사용하지 않는 경우 직접 롤링하기 전에 살펴봐야 할 다른 훌륭한 라이브러리가 많이 있습니다. SwiftMailer, Laminas/Mail, ZetaComponents 등을 사용해 보세요.
이 소프트웨어는 GPL 협력 약속과 함께 LGPL 2.1 라이센스에 따라 배포됩니다. 소프트웨어 가용성 및 배포에 대한 정보는 라이센스를 읽어보십시오.
PHPMailer는 Packagist(의미론적 버전 관리 사용)에서 사용할 수 있으며 Composer를 통한 설치는 PHPMailer를 설치하는 데 권장되는 방법입니다. composer.json
파일에 다음 줄을 추가하세요.
"phpmailer/phpmailer" : " ^6.9.2 "
또는 실행
composer require phpmailer/phpmailer
vendor
폴더와 vendor/autoload.php
스크립트는 Composer에 의해 생성됩니다. PHPMailer의 일부가 아닙니다.
XOAUTH2 인증을 사용하려는 경우, league/oauth2-client
및 composer.json
의 적절한 서비스 어댑터 패키지에 대한 종속성을 추가해야 합니다. 또는 특히 다음과 같은 경우 @decomplexity의 SendOauth2 래퍼를 살펴봐야 합니다. Microsoft 서비스를 사용합니다.
또는 Composer를 사용하지 않는 경우 PHPMailer를 zip 파일로 다운로드한 다음(문서와 예제는 zip 파일에 포함되어 있지 않음) PHPMailer 폴더의 내용을 다음에 지정된 include_path
디렉터리 중 하나로 복사할 수 있습니다. PHP 구성을 설정하고 각 클래스 파일을 수동으로 로드합니다.
<?php
use PHPMailer PHPMailer PHPMailer ;
use PHPMailer PHPMailer Exception ;
require ' path/to/PHPMailer/src/Exception.php ' ;
require ' path/to/PHPMailer/src/PHPMailer.php ' ;
require ' path/to/PHPMailer/src/SMTP.php ' ;
SMTP
클래스를 명시적으로 사용하지 않는 경우(아마도 사용하지 않을 경우) SMTP 클래스에 대한 use
줄이 필요하지 않습니다. 예외를 사용하지 않더라도 내부적으로 사용되는 Exception
클래스를 로드해야 합니다.
PHPMailer 5.2(PHP 5.0 - 7.0과 호환)는 보안 업데이트에도 더 이상 지원되지 않습니다. 5.2-stable 브랜치에서 최신 버전의 5.2를 찾을 수 있습니다. PHP 5.5 이상(사용해야 함)을 사용하는 경우 6.x 릴리스로 전환하세요.
가장 큰 변화는 소스 파일이 이제 src/
폴더에 있고 PHPMailer가 이제 PHPMailerPHPMailer
네임스페이스를 선언한다는 것입니다. 여기에는 몇 가지 중요한 효과가 있습니다. 자세한 내용은 업그레이드 가이드를 읽어보세요.
전체 패키지를 수동으로 설치하거나 Composer를 사용하여 설치하는 것은 간단하고 편리하며 안정적이지만 프로젝트에 중요한 파일만 포함하고 싶을 수도 있습니다. 최소한 src/PHPMailer.php가 필요합니다. SMTP를 사용하는 경우 src/SMTP.php가 필요하고, SMTP 이전 POP를 사용하는 경우( 거의 가능성 없음!) src/POP3.php가 필요합니다. 사용자에게 오류를 표시하지 않고 영어로만 작성된 오류를 처리할 수 있는 경우 언어 폴더를 건너뛸 수 있습니다. XOAUTH2를 사용하는 경우 src/OAuth.php와 인증하려는 서비스에 대한 Composer 종속성이 필요합니다. 실제로 Composer를 사용하는 것이 훨씬 쉽습니다!
<?php
//Import PHPMailer classes into the global namespace
//These must be at the top of your script, not inside a function
use PHPMailer PHPMailer PHPMailer ;
use PHPMailer PHPMailer SMTP ;
use PHPMailer PHPMailer Exception ;
//Load Composer's autoloader
require ' vendor/autoload.php ' ;
//Create an instance; passing `true` enables exceptions
$ mail = new PHPMailer ( true );
try {
//Server settings
$ mail -> SMTPDebug = SMTP :: DEBUG_SERVER ; //Enable verbose debug output
$ mail -> isSMTP (); //Send using SMTP
$ mail -> Host = ' smtp.example.com ' ; //Set the SMTP server to send through
$ mail -> SMTPAuth = true ; //Enable SMTP authentication
$ mail -> Username = ' [email protected] ' ; //SMTP username
$ mail -> Password = ' secret ' ; //SMTP password
$ mail -> SMTPSecure = PHPMailer:: ENCRYPTION_SMTPS ; //Enable implicit TLS encryption
$ mail -> Port = 465 ; //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`
//Recipients
$ mail -> setFrom ( ' [email protected] ' , ' Mailer ' );
$ mail -> addAddress ( ' [email protected] ' , ' Joe User ' ); //Add a recipient
$ mail -> addAddress ( ' [email protected] ' ); //Name is optional
$ mail -> addReplyTo ( ' [email protected] ' , ' Information ' );
$ mail -> addCC ( ' [email protected] ' );
$ mail -> addBCC ( ' [email protected] ' );
//Attachments
$ mail -> addAttachment ( ' /var/tmp/file.tar.gz ' ); //Add attachments
$ mail -> addAttachment ( ' /tmp/image.jpg ' , ' new.jpg ' ); //Optional name
//Content
$ mail -> isHTML ( true ); //Set email format to HTML
$ mail -> Subject = ' Here is the subject ' ;
$ mail -> Body = ' This is the HTML message body <b>in bold!</b> ' ;
$ mail -> AltBody = ' This is the body in plain text for non-HTML mail clients ' ;
$ mail -> send ();
echo ' Message has been sent ' ;
} catch ( Exception $ e ) {
echo " Message could not be sent. Mailer Error: { $ mail -> ErrorInfo }" ;
}
Gmail을 통한 전송, 연락처 양식 작성, 메일링 리스트로 전송 등 다양한 일반적인 시나리오를 다루는 예제 폴더에서 다양한 작업을 찾을 수 있습니다.
인스턴스를 재사용하는 경우(예: 메일링 리스트로 보낼 때) 중복 메시지 전송을 방지하기 위해 수신자 목록을 지워야 할 수도 있습니다. 자세한 지침은 메일링 리스트 예시를 참조하세요.
그게 다야. 이제 PHPMailer를 사용할 준비가 되었습니다!
PHPMailer의 기본값은 영어이지만 언어 폴더에서 발생할 수 있는 PHPMailer 오류 메시지에 대한 다양한 번역을 찾을 수 있습니다. 해당 파일 이름에는 번역을 위한 ISO 639-1 언어 코드가 포함되어 있습니다(예: 프랑스어의 경우 fr
. 언어를 지정하려면 다음과 같이 PHPMailer에 사용할 언어를 알려주어야 합니다.
//To load the French version
$ mail -> setLanguage ( ' fr ' , ' /optional/path/to/language/directory/ ' );
수정 사항과 새로운 언어를 환영합니다. 수정 사항을 찾고 있는 경우 테스트 폴더에서 Language/TranslationCompletenessTest.php 스크립트를 실행하면 누락된 번역이 표시됩니다.
GitHub 위키에서 읽기 시작하세요. 문제가 있는 경우 자주 업데이트되는 문제 해결 가이드를 참조하세요.
일반적인 시나리오에 PHPMailer를 사용하는 방법의 예는 예제 폴더에서 찾을 수 있습니다. 좋은 출발점을 찾고 있다면 Gmail 예제부터 시작하는 것이 좋습니다.
PHPMailer의 배포된 코드 공간을 줄이기 위해 Composer 또는 GitHub의 zip 파일 다운로드를 통해 PHPMailer를 로드하는 경우 예제가 포함되지 않으므로 git 저장소를 복제하거나 위 링크를 사용하여 예제로 직접 이동해야 합니다.
생성된 전체 API 문서는 온라인으로 제공됩니다.
최상위 폴더에서 phpdoc
실행하여 완전한 API 수준 문서를 생성할 수 있으며 문서는 docs
폴더에 표시되지만 PHPDocumentor가 설치되어 있어야 합니다. 단위 테스트는 암호화와 같은 다양한 작업을 수행하는 방법에 대한 좋은 참고 자료를 찾을 수 있습니다.
문서에서 필요한 내용을 다루지 않는 경우 스택 오버플로에서 많은 질문을 검색하고 "SMTP 오류: SMTP 호스트에 연결할 수 없습니다."에 대해 질문하기 전에 문제 해결 가이드를 읽어보세요.
PHPMailer 테스트는 폴리필과 함께 PHPUnit 9를 사용하여 이전 PHPUnit 및 PHP 버전에서 9 스타일 테스트를 실행할 수 있습니다.
이 문제가 해결되지 않으면 도움을 드릴 수 있는 일이 있나요?
발견된 취약점을 책임감 있게 공개하십시오. 보안 문제는 관리자에게 비공개로 보고하십시오.
GitHub에서 SECURITY 및 PHPMailer의 보안 권고를 참조하세요.
GitHub 이슈 트래커에 버그 보고서, 제안, 풀 요청을 제출해 주세요.
우리는 특히 예외적인 사례를 수정하고, 테스트 범위를 확장하고, 번역을 업데이트하는 데 관심이 있습니다.
문서에서 실수를 발견했거나 뭔가를 추가하고 싶다면 계속해서 위키를 수정하세요. 누구나 편집할 수 있습니다.
PHPMailer GitHub 조직으로 이동하기 전에 git 클론이 있는 경우 클론 내에서 다음과 같은 명령을 사용하여 이전 GitHub 위치를 참조하는 모든 원격 URL을 업데이트해야 합니다.
git remote set-url upstream https://github.com/PHPMailer/PHPMailer.git
더 이상 SourceForge 또는 Google Code 프로젝트를 사용 하지 마세요 . 그것들은 더 이상 사용되지 않으며 더 이상 유지 관리되지 않습니다.
PHPMailer의 개발 시간과 리소스는 세계 유일의 개인 정보 보호 우선 이메일 마케팅 시스템인 Smartmessages.net에서 제공됩니다.
맥주, 티셔츠, 차가운 현금 등 기부를 환영합니다. GitHub를 통한 후원은 PHPMailer의 관리자와 기여자에게 "감사합니다"를 전하는 간단하고 편리한 방법입니다. 프로젝트 페이지에서 "후원" 버튼을 클릭하기만 하면 됩니다. 회사에서 PHPMailer를 사용하는 경우 Tidelift의 기업 지원 프로그램에 참여해 보세요.
Tidelift 구독의 일부로 제공됩니다.
PHPMailer 및 수천 개의 기타 패키지 관리자는 Tidelift와 협력하여 애플리케이션 구축에 사용하는 오픈 소스 패키지에 대한 상업적 지원 및 유지 관리를 제공하고 있습니다. 시간을 절약하고 위험을 줄이며 코드 상태를 개선하는 동시에 사용하는 정확한 패키지의 관리자에게 비용을 지불합니다. 자세히 알아보세요.
변경 로그를 참조하세요.
coolbru
)과 Andy Prevost( codeworxtech
)는 2004년에 프로젝트를 인수했습니다.