일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 코드이그나이터
- 주식 청약
- java
- css
- 공모주
- php
- jquery
- SQL
- 6월 공모주 청약 일정
- 주식
- Stock ipo
- 제이쿼리
- Oracle
- JavaScript
- linux
- Eclipse
- MYSQL
- 자바스크립트
- 주식 청약 일정
- 공모주 청약 일정
- 공모주 청약
- 맥
- Stock
- 자바
- 오라클
- 리눅스
- IPO
- codeigniter
- 7월 공모주 청약 일정
- html
- Today
- Total
개발자의 끄적끄적
[php] 워드프레스 이메일 발송 처리 [펌] 본문
[php] 워드프레스 이메일 발송 처리 [펌]
워드프레스에서 이메일은 어떻게 발송하나요?
네? 뭐라구요? 그건 너무 당연한 질문 아닌가요? 워드프레스가 ‘알아서 잘’ 처리하는데 굳이 뭘 더 할 게 있나요?
맞습니다. 워드프레스는 이메일 발송 시스템이 잘 갖춰져 있고 또 왠만한 경우엔 가만히 내버려 둬도 알아서 잘 작동하기에 굳이 무언가 더 해야 할 일은 거의 없습니다. 게다가 각종 뉴스레터 플러그인을 포함, 이메일과 관련된 플러그인들도 많이 나와 있어서 사실 워드프레스를 사용할 때 이메일 발송에 대해 사용자가 신경을 쓸 일은 거의 없다고 봐도 됩니다.
하지만 종종 이메일이 문제를 일으키는 경우가 생기곤 합니다.
예를 들면 이런 경우죠.
- 일부 웹호스팅 환경에서는 이메일이 제대로 발송되지 않습니다.
- 발송된 이메일이 자꾸 스팸함으로 빠집니다.
- 워드프레스가 발송하는 이메일의 디폴트값을 변경하고 싶습니다. 예를 들면 발신자명 같은. 등등.
이런 경우에는 워드프레스의 이메일 발송 시스템에 대해 조금 알아 두는 게 문제를 해결하는데 도움이 됩니다. ‘알쓸신잡’ 같은 거죠.^^
PHP에서 이메일 처리
이메일 발송은 이메일 발송 관련 프로토콜에 따라 처리되며 워드프레스라 해서 딱히 다를 건 없습니다. 또한 워드프레스는 PHP 기반이기 때문에 결국 PHP의 이메일 발송 기능을 이용합니다. PHP는 이메일 발송을 위해 mail()이라는 함수를 기본으로 제공하죠.
<?php $to = 'nobody@example.com'; $subject = 'the subject'; $message = 'hello'; $headers = 'From: webmaster@example.com' . "\r\n" . 'Reply-To: webmaster@example.com' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); mail($to, $subject, $message, $headers);
그럼 혹시 워드프레스가 이 mail() 이라는 함수를 사용할까요? 답은 잠시 후에 말씀 드리기로 하고, 우선은 다른 방법을 하나 더 보도록 하죠.
PHPMailer
PHPMailer는 PHP에서 가장 인기있는 이메일 발송 라이브러리입니다. 이메일 발송과 관련된 거의 모든 기능을 제공하기 때문에 많이들 사용합니다.
PHPMailer 튜토리얼 문서에서는 PHPMailer를 다음과 같이 소개하고 있습니다.
PHPMailer is a class library for PHP that provides a collection of functions to build and send email messages. PHPMailer supports several ways of sending email: mail(), Sendmail, qmail & direct to SMTP servers. You can use any feature of SMTP-based e-mail, multiple recepients via to, CC, BCC, etc. In short: PHPMailer is an efficient way to send e-mail within PHP.
즉, PHPMailer는 PHP의 mail() 뿐 아니라 Sendmail이나 STMP 같은 다양한 방식의 메일 전송을 지원합니다.
이 글은 PHPMailer의 사용법을 다루는 글은 아니기에 자세한 사용법은 생략합니다만, 그럼에도 여기서 굳이 PHPMailer를 언급한 까닭은 워드프레스 역시 내부적으로 이 PHPMailer를 사용하여 이메일 발송을 처리하기 때문입니다.
wp_mail()
알다사피 워드프레스에서는 wp_mail()이라는 함수를 제공합니다. 이 함수는 워드프레스에서 모든 이메일 발송 처리를 담당하는 함수이며 사용법은 다음과 같습니다.
<?php $to = 'sendto@example.com'; $subject = 'The subject'; $body = 'The email body content'; $headers = array('Content-Type: text/html; charset=UTF-8'); wp_mail( $to, $subject, $body, $headers );
앞서도 잠깐 언급했듯 이 wp_mail() 함수는 내부적으로 PHPMailer를 사용합니다. 또 앞서 소개한 PHPMailer의 여러 메일 전송 방식 중 기본적으로 PHP mail() 방식을 사용합니다. 한마디로, 워드프레스는 PHPMailer를 사용하여 PHP의 mail() 함수를 호출합니다!
이메일 발송 테스트
이제 워드프레스의 이메일 발송 방식을 알았으니 테스트를 한번 해 보죠. 내 워드프레스 사이트에서 이메일 발송이 제대로 되는지 어떻게 하면 알 수 있을까요?
가장 간단한 방법은 아마도 워드프레스를 설치하고서 자동으로 발송되는 알림(alert) 메일이 아닐까요? 워드프레스 사이트를 새로 설치하면 알림 메일이 관리자 메일 계정으로 발송됩니다. 이 메일이 정상적으로 도착했다면(비록 스팸함에라도) 워드프레스의 이메일 발송이 정상적으로 처리되고 있다는 뜻이겠죠.
이미 사이트를 설치한 상태라 테스트하기 힘들다구요? 그렇다면 새 사용자를 한 명 추가해 보는 것도 좋은 방법입니다. 워드프레스는 새 사용자가 추가될 때마다 자동으로 관리자에게 “새로운 사용자”를 알리는 알림 메일을 발송하니까요!
어차피 워드프레스에서 이메일 발송 테스트는 wp_mail() 함수가 제대로 작동하는지를 테스트하는 것이기 때문에 앞서 소개한 wp_mail() 함수 코드 예제를 참고하여 간단하게 PHP 스크립트를 작성해 실행해 보는 것도 좋은 테스트 방법입니다.
코드가 번거로운 분들이라면 Check Email 같은 간단한 플러그인을 설치하여 똑같은 테스트를 해 볼 수도 있구요.
SMTP로 이메일 전송하기
사실 워드프레스에서 이메일 발송이 문제가 되는 경우, 가장 흔한 원인은 대부분 워드프레스 사이트를 호스팅하는 웹호스팅사의 PHP 메일 설정이나 보안 정책과 관련된 문제입니다. 그런 경우, 워드프레스에서 이메일 전송 방식을 SMTP로 변경하여 외부 SMTP 서버를 통해 이메일 전송 처리를 하게끔 하면 왠만한 문제는 해결됩니다.
wp_mail() 함수를 표준 PHP mail 이 아닌 SMTP로 처리하게 하려면 다음과 같이 wp_mail() 함수에서 제공하는 phpmailer_init 액션(action)을 후킹하면 됩니다.
<?php add_action( 'phpmailer_init', 'my_phpmailer_example' ); function my_phpmailer_example( $phpmailer ) { $phpmailer->isSMTP(); $phpmailer->Host = 'smtp.example.com'; $phpmailer->SMTPAuth = true; // Force it to use Username and Password to authenticate $phpmailer->Port = 25; $phpmailer->Username = 'yourusername'; $phpmailer->Password = 'yourpassword'; // Additional settings… //$phpmailer->SMTPSecure = "tls"; // Choose SSL or TLS, if necessary for your server //$phpmailer->From = "you@yourdomail.com"; //$phpmailer->FromName = "Your Name"; }
wp_mail() 함수는 플러거블 함수(Pluggable)입니다. 따라서 통째 교체가 가능하며, 그럴 경우 이 phpmailer_init 액션 훅은 동작하지 않을 수도 있습니다.
물론 이쯤 되면 굳이 직접 코딩을 하기 보단 플러그인을 쓰는 게 좀 더 현명한(?) 방법일테죠? 워드프레스 플러그인들 중에는 SMTP를 지원하는 좋은 플러그인들이 이미 많이 나와 있고 세상은 넓고 할일은 많으니까요!
워드프레스 SMTP 플러그인
아래 플러그인들이 대표적으로 많이 사용되는 인기있는 플러그인들이지만, 굳이 이것 말고도 여럿 있으니 필요에 맞게 찾아 사용하면 될 것 같습니다.
- WP Mail SMTP by WPForms | WordPress.org
- Easy WP SMTP | WordPress.org
- Post SMTP Mailer/Email Log | WordPress.org
기타 워드프레스에서 이메일 설정과 관련된 문제나 앞서 소개한 SMTP 플러그인의 사용법에 관한 부분은 아래 문서들에 이미 자세하게 잘 설명되어 있으니 참고하면 좋을 것 같습니다.
'개발 > php' 카테고리의 다른 글
[php] 추천인 코드 생성 함수 (0) | 2020.09.08 |
---|---|
[php] 그누보드 메일 발송하기 [펌] (0) | 2020.09.08 |
[php] 워드프레스 설치하기 [펌] (0) | 2020.09.07 |
[php/Gnuboard] 그누보드 5 설치과정 (5.3.2.6 버전) [펌] (0) | 2020.09.06 |
[php] 두 좌표간의 거리 구하기 예제 (0) | 2020.09.06 |