워드프레스 메일, phpmailer_init, Works Mobile, sSMTP

워드프레스 설치 후 설치 완료 메일, 댓글 관련 메일, 가입 및 암호 관련 메일 등 워드프레스 전체에 걸쳐 메일 수신 또는 발신 문제로 대부분 사용자가 메일 관련 플러그인을 사용하는 과정이 의무가 된 거 같습니다. 어떤 경우에는 수신의 문제가 때로는 발신의 문제가 발생하는데, 문제라는 것은 메일이 오지 않는다는 것이겠죠. 결국, 수신과 발신은 하나의 문제로 볼 수 있습니다.

메일이 오지 않는 수신의 문제는 발신의 문제에서 생겨야 하는데 워드프레스 사용자가 겪는 이 문제는 발신의 문제가 아니라 정책의 문제가 원인일 경우가 많다는 생각입니다. 꼭 워드프레스 경우로만 볼 수 없고, 모든 경우는 아니겠지만, 화이트 도메인 정책이 대표적입니다. 웹호스팅을 사용할 때 예를 들어, 호스팅 업체가 제공하는 무료 도메인을 사용하면 메일 수신에 문제가 없는데 자신의 도메인을 사용하면 수신이 되지 않는 경우가 많습니다. 서버를 운영할 때도 단순한 목적의 메일 발송을 위해 Sendmail을 설치해도 화이트 도메인으로 등록하지 않으면 원하는 결과를 얻을 수 없습니다.

이런 문제 해소를 위해 플러그인을 설치하고, 구글의 Gmail 계정을 사용하여 메일 관련 문제를 처리하는 것이 일반화된 것으로 보입니다. 어차피 메일 관련한 문제를 워드프레스 사용 시 꼭 처리해야 한다면 플러그인도 좋지만, 코덱스 기본 예시와 안내의 스니핏을 사용하는 것도 좋다는 생각입니다.

서버 또는 공유 웹호스팅 환경에서 워드프레스를 사용할 때 메일 수신(발신) 문제가 생긴다면 워드프레스 phpmailer_init 훅에 관한 코덱스 안내를 빌려 다음에 나오는 코드를 사용하면 대부분 문제가 해결될 것입니다.

phpmailer_init

아래 코드는 Gmail SMTP를 사용할 경우로 사용하는 테마의 functions.php 파일에 단순하게 추가하면 됩니다. 플러그인 또는 MUP(Must Use Plugins) 형식으로 만들어 사용할 수도 있습니다. 자신의 계정정보(메일, 암호)만 변경하면 됩니다.

add_action( 'phpmailer_init', 'my_phpmailer' );
function my_phpmailer( $phpmailer ) {
    $phpmailer->isSMTP();
    $phpmailer->Host = 'smtp.gmail.com';
    $phpmailer->SMTPAuth = true;
    $phpmailer->Port = 587;    
    $phpmailer->Username = get_option( 'admin_email' ); // 계정
    //$phpmailer->Username = 'your_account@gmail.com'; // 계정 (관리자 이메일과 다른 메일 사용하려면 이 줄 활성화, 위 줄 삭제 또는 비활성)
    $phpmailer->Password = 'password'; // 메일 계정 암호 (워드프레스 사용자 암호 아님)
    $phpmailer->SMTPSecure = "tls"; // SSL or TLS
    $phpmailer->From = get_option( 'admin_email' ); // Gmail SMTP 사용 시 Gmail 계정과 달라도 됨 (관리자 이메일과 다른 메일 사용하려면 이 줄 비활성 또는 삭제, 아래 줄 활성)
    //$phpmailer->From = "your_account@gmail.com";   
    $phpmailer->FromName = get_option( 'blogname' ); // 보낸사람 이름, 비워두면 'WordPress'
    //$phpmailer->Subject = get_option( 'blogname' ); // 필요할 때만, 메일 수신, 발신만을 위해서는 불필요
}

아래는 네이버 웍스 모바일(Naver Works Mobile)을 사용할 경우입니다. 해당 서비스 계정에서 SMTP 관련한 설정을 미리 확인하세요.

add_action( 'phpmailer_init', 'my_phpmailer' );
function my_phpmailer( $phpmailer ) {
    $phpmailer->isSMTP();
    $phpmailer->Host = 'smtp.worksmobile.com';
    $phpmailer->SMTPAuth = true;
    $phpmailer->Port = 587; or 465(SSL)
    $phpmailer->Username = 'my_account@mydomain.com'; // 계정
    $phpmailer->Password = 'password';
    $phpmailer->SMTPSecure = "tls"; // or SSL(465)
    $phpmailer->From = "my_account@mydomain.com"; // 계정 메일과 같아야 함
    $phpmailer->FromName = get_option('blogname'); // 보낸사람 이름, 비워두면 'WordPress'
    //$phpmailer->Subject = get_option( 'blogname' ); // 필요할 때만, 메일 수신, 발신만을 위해서는 불필요
}

플러그인, Must Use Plugins

워드프레스로 여러 웹사이트를 구성하는 경우는 보통의 사용자에게 일어나지 않지만, 테마를 변경하는 등의 작업은 가끔 발생할 수 있습니다. 메일 문제는 테마 변경에서 독립되어야 하므로 플러그인으로 만들어 사용하는 것이 더 좋습니다. 입문자를 위해 남기는 것으로 아래 코드(Gmail 사용 시)에서 메일과 암호만 자신의 것으로 변경한 후에 원하는 파일명.php 파일을 만드세요. (예, myphpmailer.php)

<?php
/**
 * Plugin Name: Gmail SMTP
 * Description: Gmail SMTP 사용하여 메일 발신
 */
add_action( 'phpmailer_init', 'my_phpmailer' );
function my_phpmailer( $phpmailer ) {
    $phpmailer->isSMTP();
    $phpmailer->Host = 'smtp.gmail.com';
    $phpmailer->SMTPAuth = true;
    $phpmailer->Port = 587;
    $phpmailer->Username = 'your_account@gmail.com';
    $phpmailer->Password = 'password';
    $phpmailer->SMTPSecure = "tls";
    $phpmailer->From = "your_account@gmail.com";
    $phpmailer->FromName = get_option( 'blogname' );
}

워드프레스 설치 경로에서 wp-content > plugins 디렉터리에 파일을 올리고, 관리페이지에서 해당 플러그인(Gmail SMTP)을 활성화하면 됩니다.

Must Use Plugins로 사용하고 싶다면 wp-content > mu-plugins 디렉터리에 해당 파일을 올리면 되는데 mu-plugins 디렉터리는 없다면 추가하는 것입니다. 이 경우 플러그인 활성화는 필요하지 않습니다. 관리페이지 플러그인 목록을 보면 Must-Use 메뉴가 추가된 것을 확인할 수 있습니다. 더 많은 내용은 여기를 참고하세요.

sSMTP

서버를 운영할 때 간단한 sSMTP 유틸을 설치하여 사용하는 경우도 많은데, Gmail 사용할 때의 예시는 검색하면 너무 많이 나오니 네이버 웍스 모바일을 사용할 때 설정을 남깁니다. 처음 설정할 때 시행착오 방지를 위해 참고로. 서버에 복수의 사이트가 있거나 워드프레스가 존재한다면 phpmailer_init 훅을 사용한 위의 방식이 좋지 않을까 합니다.

(Gmail을 사용할 때 특정 번호의 오류 로그가 나올 수 있는데 대부분 구글 계정 설정의 변경이 필요한 경우로 sSMTP 설정과 무관한 경우가 많습니다.)

구글 계정의 보안 설정
구글 계정의 보안 설정 확인이 필요할 수도 있다. 로그인 후 여기서 설정.

도메인 domain.com, 메일 주소를 hello@domain.com, 암호를 1234로 가정합니다. 자신의 것으로 변경하면 됩니다.

//우분투 예시 : /etc/ssmtp/ssmtp.conf

#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=hello@domain.com

# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com

mailhub=smtp.worksmobile.com:465

# Where will the mail seem to come from?
rewriteDomain=domain.com

AuthUser=hello@domain.com
AuthPass=1234

# The full hostname
hostname=domain.com

# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
FromLineOverride=YES
UseTLS=YES

Gmail SMTP 사용은 방대한 정보가 있어 쉽게 적용할 수 있고 편리합니다. 다만 우리나라에서 네이버 웍스 모바일보다 처리 속도가 늦습니다.

댓글 5

  1. 좋은 정보 공유해주셔서 감사합니다. 워드프레스 이메일 송/수신 문제가 발생하면 매번 플러그인에 의존할 수 밖에 없었는데, 앞으로는 본문의 코드로 쉽게 해결할 수 있을거 같아요. ^^

    1. 이 포스트 정보는 낡은 정보인데 검색을 해보니 국내 워드프레스 사용자 포스트 중에 메일 문제와 관련해서 모두 플러그인에 관한 내용만 있어 작성했습니다.

      보통 메일 관련 플러그인 소스를 보면 이 포스트와 기본적으로 동일한 것이 대부분입니다. PHPMailer 클래스는 워프만이 아니라 대부분 PHP 프로그램에서도 사용하는 것이므로 일반적 정의의 설치 플러그인보다 스니핏 (플러그인)으로 사용하는 것이 좋지 않을까 합니다.

  2. 대단히 감사합니다.
    다른 어드바이스들도 참고해봤는데
    이 글이 가장 간단하고도 빠르게 적용이 되는군요.

    근데 제가 해보니 소스중 약간 수정할 부분이 있습니다.
    웍스모바일 정책이 바뀌어서 서버 포트를 이 글 대로 하면 안됩니다.
    port는 465 smtpsecure는 ssl 로 바까줘야 합니다.

    감사합니다.

    1. 저는 계속 사용 중인데 문제가 없었습니다. 혹시나 해서 방금 다시 확인했는데 역시 아무 문제가 없네요. 오히려 전에는 안 되던 SSL(465) 지금은 되는군요.

      SSL(465), TLS(587) 번갈아 확인하면서 되는 것을 사용하면 어떨까요?