워드프레스에서 이메일 발송을 위한 PHP 라이브러리 sendmail 설치 방법(리눅스 우분투 서버)

17

워드프레스 웹사이트, 블로그에서 이메일을 보내는 방법에는 몇가지 방법이 있는데 이 글은 자신의 우분투 서버 자체에서 이메일을 보낼 수 있도록 PHP 라이브러리인 sendmail을 설치하는 방법에 대한 글입니다.

서버 자체가 이메일을 전송하기위해서는 우선 자신의 PHP 서버가 이메일을 발송할 수 있는 준비가 되어있어야하고 그렇지 않으면 제 3자 SMTP 서비스를 이용해야합니다. 

  • PHP 이메일 전송 라이브러리(PHP의 mail() 함수 동작)
  • 도메인 (신뢰성)

이글에서 다룰 sendmail 이라는 PHP 라이브러리를 서버에 추가로 설치, 세팅함으로써 리눅스 우분투 서버가 이메일을 전송할 수 있게 되는데요. 

이 글에서는 제 블로그에서 워드플레스를 설치했던 두 가지 방식을 따로 나누어 어떻게 sendmail을 설치하고 설정하는지 알아보려고 합니다.

워드프레스의 이메일 전송기능과 에러 메시지

워드프레스를 실행중인 서버에서 이메일을 보내는 것에는 여러가지가 있는데 첫 째로 WordPress 코어의 자체 기능인 아래와 같은 것들입니다.

  • 워드프레스 코어의 e-mail 전송 기능
    • 사용자 비밀번호 찾기 기능(암호 초기화)
    • 사용자 가입 환영 메일 전송 기능
    • 사용자/관리자 이메일 주소 변경 승인 메일 알림
  • 이메일을 전송하는 플러그인

위와 같은 것들은 모두 워드프레스나 플러그인 자체가 메일을 보낼 수 있는 것이 아닌, 서버에 설치된 PHP의 mail() 함수를 이용해서 보내거나 제 3자 SMTP 서비스를 통해서 메일을 전송하게 됩니다.

메일 전송 기능이 제대로 동작 되지 않으면 워드프레스에서 아래와 같은 에러메시지를 보게됩니다.

  • 워드프레스 코어: 비밀번호 찾기
    • 이메일을 보낼 수 없습니다. 가능성 있는 원인: 호스트가 mail() 함수를 비활성화했을 수도 있습니다. (Possible reason: your host may have disabled the mail() function.)
  • 콘택트폼 7 플러그인 
    • 메시지를 보내는 도중 오류가 발생했습니다. 나중에 다시 시도해주세요. (There was an error trying to send your message. Please try again later.)

자신의 서버를 이용한 이메일 전송의 한계

이메일을 전송 위한 PHP 라이브러리 중에는 sendmail, PHPMailer, Swift Mailer등이 있고, 이 것을  설치하고 세팅하면 위 기능들이 정상 동작하게 되긴 할겁니다.

하지만 이런 PHP 라이브러리 설치가 이메일 전송의 궁극적인 해결방법은 아닙니다. 서버가 이메일을 보낼 수 있다고 해도 결국 한계가 있습니다.

제가 찾아보기로, 오랜 역사를 거치면서 이메일 발송자, 수신자, 이메일 서비스 업체(ISP), 스팸광고업자, 이메일을 통한 바이러스 확산등이 얽힌 복잡한 이해관계로 인해서 서버에서 이메일을 발송하기는 생각보다 까다로워졌기 때문인데요. 

많은 VPS, 호스팅 업체에서는 자신들의 서비스가 스팸메일 발송에 쓰이길 원하지 않습니다. 그래서 이메일 전송 포트를 막고 있거나, 한 달 전송가능한 최대 이메일 갯수를 제한하곤 합니다. 

메일이 정상적으로 보내진다고 해도 난관에 부딛히곤 하는데, 이메일 서비스 업체(ISP – 예: 구글의 지메일)는 자신들의 고객을 보호하기위해 신뢰할 수 없는 이메일은 모두 거르려는 노력을 합니다. 그예로, 신뢰할 수 없거나 암호화되지않은 이메일을 스팸으로 분류해버리는 것이죠.

일반적으로, 이메일 전송을 위해 좋은 방법은 자신만의 이메일 서버를 구축하거나, 제 3자(다른 서비스사)의 SMTP 이메일 발송서비스를 사용하는 방법등이 있습니다.

그럼에도 불구하고 방문자가 적은 개인블로그 같은 소규모 사이트의 서버에서는 이메일을 발송할 일이 적으므로 서버에 sendmail 라이브러리를 설치, 세팅하는 것만으로도 충분할 것입니다만, 뉴스레터 발송같은 대량 이메일 전송은 필히 다른 서비스를 사용해야할 것 임을 상기하시기 바랍니다. 그리고 sendmail을 이용한 메일 전송은 느리기도 합니다.

스팸함에 빠지거나 ISP가 이메일을 전달하지 않는 문제등은 발송 도메인과 이메일 내용에대한 신뢰성 문제이기도 하므로 사실상 자신의 서버에서의 최선은 도메인설정, HTTPS설정, 규격화된 이메일 전송(이메일 헤더, 암호화), 발송 이메일의 내용에 신경 쓰는 것 뿐입니다.

우분투 리눅스에서 apt로 sendmail 설치 준비

서버 백업

설치과정에서 잘못되거나 결과가 원하느대로 되지않는 상황이 올 수 있으므로 서버 데이털터를 백업을 해주고 시작하는게 좋습니다. 아마존 라이트세일 사용자는 인스턴스 스냅샷 기능으로 서버환경을 통채로 백업할 수 있습니다.

apt 리스트 업데이트

먼저 자신이 사용하는 CLI 프로그램을 통해 서버에 접속합니다

참고할 만한 사전 지식:
AWS 라이트세일 서버 인스턴스 접속 및 제어
리눅스 nano 편집기 사용 방법
리눅스 루트 사용자 명령어 sudo 와 #, $ 차이

그런다음 apt 프로그램을 통해서 설치를 할 건데, 먼저 리눅스 우분투 서버의 apt 리스트를 최신으로 업데이트 해줍니다.

sudo apt-get update

그리고 아래 명령어를 통해서 sendmail 설치 정보를 확인할 수 있습니다.

sudo apt-cache policy sendmail
sudo apt-get update 와 sudo apt-cache policy sendmail 명령어 입력
apt 리스트 업데이트 후 sendmai 설치정보 확인

위 그림처럼 Installed:none 이라고 나온다면 sendmail이 서버에 설치되지 않은 것이고,  Candidate: 항목에 표시된 버전을 apt 명령어로 설치할 수 있다는 것입니다.

만일 Candidate: 항목이 아래처럼 none이라면 우분투의 apt가 sendmail 설치파일을 어디에서 다운로드 받아야 할 지를 알 수 없는 상태인데요.Candidate: (none)

apt-get update 명령어 이후에도 위처럼 설치가능 버전이 나타나지 않는다면 수동으로 apt 리스트를 작성해줘야하지만, 우분투가 최신으로 업데이트되어있는 한 그럴 일은 없을 겁니다.

1) 비트나미 스택 워드프레스 설치 후 sendmail 설치하고 세팅하기

제 블로그 글을 따라 라이트세일에서 비트나미 스택 워드프레스 설치 했을 때는 아래 절차에 따라 sendmail 설치하고 세팅하면 됩니다.  

apt 명령어로 sendmail 설치

위 명령어를 입력 후 sendmail 설치정보가 나왔다면 이제 아래 명령어를 입력한 뒤, Do you want to continue? 질문에 Y를 입력후 엔터(리턴)키를 누르면 설치가 시작됩니다.

sudo apt-get install sendmail

리눅스 명령어 sudo apt-get install sendmail 입력

그리고 아래처럼 완료되면 무사히 설치된 겁니다.

sendmail 설치 완료 메시지설치가 끝나면 서버의 /etc/ 폴더아래 /mail/폴더와 그 또 하위에 /tls/ 폴더가 만들어지게 되고 각각의 폴더에는 각종 폴더와 설정 파일이 포함되어있습니다.

senmailconfig 설정

그 다음으론 sendmail 설정을 할 차례입니다. 아래 명령어를 입력해서 나오는 모든 질문에 Y를 입력해줍니다.

sudo sendmailconfig

sudo sendmailconfig 명령어 입력한 모습그러면 /etc/mail/ 폴더 하위에 여러가지 설정파일이 만들어집니다.

php.ini 파일 수정

이번엔 sendmail 환경 파일 위치를 지정해줄 차례인데요. sendmail 이라는 파일은 /usr/sbin/ 폴더 안에 있고, 그 위치를 php 설정파일인 php.ini 파일안에 작성해줘야합니다.

 php.ini 파일의 위치는 자신이 서버에 php-fpm을 설치할 때 어떻게 설치했느냐에 따라 다른데요. 아마존 라이트세일에서 설치했던 워드프레스 인스턴스에서는 비트나미 스택 전체가 /opt/bitnami/에 설치되어있고, 그에따라 php.ini 파일의 위치는 /opt/bitnami/php/etc/ 폴더 안에 있습니다. 아래 명령어처럼 nano 편집기를 이용해서 이 파일의 열어줍시다.

sudo nano /opt/bitnami/php/etc/php.ini 

그리고 열린 php.ini의 내용 중에 sendmail_path라고 적힌 부분을 찾아 이동합시다. control + w 키를 누르고 아래처럼 sendmail_path 라는 글자입력, 엔터키(리턴키)를 눌러 찾아주세요.

nano 에디터의 단어 찾기 기능 사용 모습아래 그림처럼 sendmail_path = “env -i /usr/sbin/sendmail -t -i” 라는 설정값이 적혀는 있지만 줄 앞에 세미콜론(;)으로 주석처리되어 있어서 적용되고 있지 않은 모습인데 줄 앞에 있는 세미콜론을 삭제해주세요.

sendmail_path = ... 앞에 세미콜론이 붙어있다

아래처럼 말이죠:

만일, php.ini 파일 전체 내용안에서 sendmail_path 라는 변수 자체를 찾을 수 없다면 파일 내용 맨 아래에 추가해주면 됩니다.

이제 php.ini 파일을 저장하고 nano 편집기를 끝내기 위해서 순서대로 control + x 키 > y 키 > 엔터키를 순서대로 눌러줍니다.

php.ini파일을 수정했다고해도 php-fpm을 재시작 하지 않으면 적용이 되지 않습니다. 아래 명령어를 입력해서 php-fpm과 아파치를 재시작해줍니다.

sudo /opt/bitnami/ctlscript.sh restart php-fpm
sudo /opt/bitnami/ctlscript.sh restart apache

각 명령어를 입력 할 때마다 Monitored php-fpm 그리고 Monitored apache가 나오면 재시작이 완료된 것이다

이제 이메일 전송기능이 잘 동작하는지 워드프레스에서 테스트해보세요.

2) LEMP 스택 워드프레스에서 sendmail 설치하고 세팅하기

제 블로그의 연재작인 LEMP 스택(nginx)에 설치한 워드프레스에 php sendmail 라이브러리를 설치하는 것은 크게 두가지로 설명하려고 하는데요. LEMP스택 HTTPS 설정 완료 후엔 sendmail을 설치하는데 방해되는 점 한가지 있어서이기도하고 HTTPS를 안쓰더라도 여전히 이메일 전송기능이 필요할 수도 있을 테니까요.

2-A) HTTPS 까지 설정을 끝난 상태에서 sendmail 설치 방법

본래 sendmail을 설치하는 과정에서 /etc/ 폴더 아래 /mail/ 폴더가 생기고 또 그아래 /tls/ 폴더가 생기며 그 아래에 암호화 파일 .prm을 만들게 되는데 LEMP스택에 HTTPS가 설정된 뒤에 sendmail을 설치한다면 그 과정이 막히게되더군요. 그래서 sendmail 설치전에 이 파일을 미리 만들어 줄 겁니다.

이 작업을 먼저 해주지않으면 LEMP스택에 HTTPS 설정이 된 상태에서는 apt install 명령어로 sendmail 설치하기 되면 아래같은 화면에서 멈추곤 합니다.

Creating SSL certificates for sendmail에서 멈춤

위처럼 멈추게 되면 shift + ` (~) + . 키를 눌러 서버와의 접속을 종료하고 재 접속해야합니다. 그래서 아래처럼 DSA 파라미터 파일을 미리 준비함으로써 이런 일을 방지할 수 있습니다.

DSA 파라미터 파일 준비 (sendmail-common.prm)

먼저 디렉토리(폴더)를 생성하는 mkdir 명령어(make directory)를 사용해서 /etc/ 아래에 /mail/과 /tls/ 폴더를 만들어주고, cd /etc/mail/tls 명령어를 써서 tls 폴더로 이동한 뒤 긍래 openssl 명령어로 2048비트 암호화 파라미터 파일인 sendmail-common.prm 파일을 생성해줍니다.

$ sudo mkdir /etc/mail
$ sudo mkdir /etc/mail/tls
$ cd /etc/mail/tls
$ sudo openssl dsaparam -out sendmail-common.prm 2048

sendmail-common: 2048비트 prm 파일

그리고 아래처럼 chmod 명령어로 이 파일에대한 권한을 640으로 해준뒤, 라이브러리의 dpkg 폴더아래에 있는 lock 파일을 삭제해준뒤 재설정해줍니다. 그리고 마지막으로 cd 명령어를 사용해 다시 ubuntu 홈폴더(~)로 돌아와 줍니다.

$ sudo chmod 0640 sendmail-common.prm
$ sudo rm /var/lib/dpkg/lock
$ sudo dpkg --configure -a
$ cd ~

dpkg 재설정

apt install 명령어로 sendmail 설치

준비단계에서 얘기했던대로 apt 리스트를 업데이트했다면 이제 아래 명령어를 입력하고 Do you want to continue? 질문에 Y를 입력해서 설치를 시작해주세요.

sudo apt-get install sendmail 

apt-get install 리눅스 명령어 입력

그러면 곧 설치가 완료 됩니다.

sendmail 암호화 파라미터 파일에 대한 사용자그룹을 smmsp로 설정

sendmail을 설치하고 나면 우분투 서버 컴퓨터에는 smmsp라는 새로운 사용자 그룹이 생성되는데, chown 명령어를 이용해 위에서 만들었던  sendmail-ccommon.prm 파일의 소유자:사용자그룹을 root:smmsp로 지정해줍시다. 그러기위해서는 아래 명령어를 입력해주면 됩니다.

sudo chown root:smmsp /etc/mail/tls/sendmail-common.prm

sendmail 설정하기

아래 명령어를 입력해서 나오는 모든 Y/N 질문에 Y를 입력해주면 sendmail의 설정파일이 작성됩니다.

sudo sendmailconfig

sendmail 설정파일 생성

php.ini 파일에 sendmail_path 지정하기

이번엔 sendmail 환경 파일 위치를 PHP 설정파일인 php.ini 파일안에 지정해줘야합니다. php.ini파일의 위치는 PHP를 서버에 설치할 때 7.2 버전을 설치했다면 /etc/php/7.2/fpm/php.ini 일 것입니다.

아래처럼 명령어를 입력해서 nano 편집기로 php.ini 파일을 열어줍니다.

sudo nano /etc/php/7.2/fpm/php.ini

그리고 나노 에디터 단어찾기 기능을 사용해 sendmail_path라고 적힌 부분을 찾아 이동해보세요.

주석처리되어있는 sendmail_path

위처럼 sendmail_path 라는 로 앞에 세미콜론이 있다면 주석문 처리된 것이니 아무런 기능을 하고 있지 않은 것입니다. 세미콜론은 삭제하고 아래의 값을 적어 넣습니다.
sendmail_path = "env -i /usr/sbin/sendmail -t -i"

sendmail_path = "env -i /usr/sbin/sendmail -t -i" 추가

혹시라도, php.ini 파일 내용안에서 sendmail_path 라는 변수 자체가 없다면 자신이 추가해주면 됩니다.

이제 php.ini의 내용을 저장하고 nano 에디터를 닫기위해 control + x  > Y > 엔터(리턴)키를 눌러줍니다.

php.ini가 수정되고 적용되려면 php-fpm을 재시작해줘야합니다.  php-fpm 재시작 명령어는 아래와 같은 식입니다. 자신이 사용하는 PHP 버전에 따라 재시작 해줍니다.

  • PHP FPM 재시작 명령어
    • sudo systemctl restart php7.2-fpm
    • sudo systemctl restart php-fpm

여기까지 하면 워드프레스가 이메일을 전송할 수 있게 될 겁니다. 이메일 발송 테스트를 통해 확인해보세요.

 

2-B) HTTP 도메인연결 또는 IP만 있을 때 sendmail 설치 방법

웹사이트에 HTTPS를 설정하기 전에 sendmail을 설치해 사용해야할 일이 있을 수도 있습니다. 이제 막 LEMP 스택만 설치를 완료했을 때거나, LEMP 스택 + 워드프레스에 도메인 연결까지만 했을 때 등등 말이죠.

apt로 sendmail 설치

앞서 얘기했던대로 apt 리스트를 업데이트했다면 이제 곧바로 아래처럼 설치명령어를 입력하고 나오는 질문에는 Y를 입력해 설치를 시작해주세요.

sudo apt-get install sendmail

apt-get install 리눅스 명령어 입력

그러면 아래와 같은 메시지가 나오면서 완료될 겁니다.

암호화 파라미터 파일을 포함해 모든 설치파일 완료

sendmailconfig 설정

그런 다음 sendmailconfig 명령어를 입력해서 sendmail 설정을 시작하고 나오는 모든 3가지 질문에 Y를 입력해줍니다.

sudo sendmailconfig

sendmail 설정파일 생성

설치가 끝나면 서버의 /etc/ 폴더아래 /mail/폴더와 그 또 하위에 /tls/ 폴더가 만들어지게 되고 각각의 폴더에는 각종 폴더와 설정 파일이 포함되어있습니다.

php.ini 파일 수정

이번엔 sendmail 환경 파일 위치를 PHP 설정파일인 php.ini 파일안에 지정해줘야합니다. 

php.ini파일의 위치는 php-fpm을 어떻게 설치했느냐에 따라 다른데요. 저 처럼 apt 리스트를 업데이트해서 PHP 버전을 지정해서 설치했다면 아래 경로에 있을겁니다만, 중간에 /7.2/폴더는 자신의 버전에따라 경로가 다를 수 있습니다. 그리고 저와는 다른 방식으로 설치했다며 다른 곳에서 찾아야하는데 보통 /etc/ 폴더 하위에 두는게 일반 적입니다.

  • php.ini 파일 위치 예:
    • /etc/php/7.2/fpm/php.ini
    • /etc/php/7.0/fpm/php.ini

nano 편집기에서 php.ini 파일을 수정하기 위해서 sudo nano /폴더/경로/php.ini 의 형식으로 명령어를 입력해줍니다. 아래같은 명령어가 되겠죠.

sudo nano /etc/php/7.2/fpm/php.ini 

그렇게 나노 편집기에 들어서면 sendmail_path 라는 문구가 있는 줄을 찾아보세요. (참고 – nano 편집기 사용법:단어 찾기)

;sendmail_path = 이라고 작성되어있음

그리고 앞에 세미콜론은 삭제하고 값을 아래처럼 작성해줍니다.

sendmail_path = "env -i /usr/sbin/sendmail -t -i"

sendmail_path 변수앞의 세미콜론을 삭제하고 값을 적어넣음

만일, php.ini 파일 내용안에서 sendmail_path 라는 변수가 없다면 파일 내용 맨 아래에 위처럼 추가해주면 됩니다.

수정이 끝나면 control + x  > y > 엔터(리턴)키를 순서대로 눌러 php.ini 파일내용을 저장하고 nano 에디터를 닫습니다.

php-fpm을 재시작해줘야 php.ini의 새로운 내요용이 반영됩니다. 자신이 사용하는 PHP 버전에 따라 php-fpm 재시작 명령어를 아래처럼 입력해줍니다.

  • PHP FPM 재시작 명령어 예:
    • sudo systemctl restart php7.2-fpm
    • sudo systemctl restart php-fpm

nginx 라우팅 설정파일에서 server_name의 값 확인하기

위에까지 설치하면 CLI에서 메일 전송 테스트나 콘택트폼 7등의 플러그인을 사용한 이메일 전송 같은 경우 동작하겠지만, 워드프레스 코어 자체의 이메일 전송기능(비번찾기, 가입환영, 사용자메일 변경등)은 동작하지 않을 수 있고 비번찾기의 경우 아래와 같은 오류메시지만 표시될 수 있는데요.

에러메시지
이메일을 보낼 수 없습니다. 가능성 있는 원인: 호스트가 mail()함수를 비활성화했을 수도 있습니다. The email could not be sent. Possible reason: your host may have disabled the mail() function.

이런경우 nginx 라우팅 설정파일에 도메인이 지정되지 않아서 일 겁니다. nginx 라우팅 설정파일의 server_name에 도메인주소 또는 IP주소가 지정되어야 워드프레스 코어의 비번찾기, 가입환영 이메일 알림등이 동작합니다. 

server_name _; 라고 설정되어있는 nginx 라우팅 설정파일

위 그림은 server_name에 도메인명이나 IP 주소 대신 디폴트인 _ (언더바)가 설정되어있는 경우입니다.

nginx 설정파일을 수정했다면 재시작 해줘야합니다. nginx -t 명령어로 설정파일 문법에 이상없이 OK 메시지가 나오는 걸 확인 후 restart 명령어로 재시작 해줍니다.

  • LEMP스택 nginx 문법 오류 확인 명령어:
    • sudo nginx -t
  • LEMP스택 nginx 재시작 명령어 (둘 중 하나):
    • sudo systemctl restart nginx
    • sudo service nginx restart

워드프레스 서버 이메일 발송 테스트 하기

sendmail 과 같은 PHP 라이브러리 설치를 통해 서버가 이메일 전송준비가 되었다면 아래처럼 여러가지 방법으로 테스트 해 볼 수 있습니다.

CLI – senmail 명령어로 테스트 메일 전송하기

CLI에서 아래 명령어로 sendmail을 시작해주고, 현재 상태를 확인해줄수있습니다. 

$ sudo service sendmail start
$ sudo service sendmail status

Active: active (running)

위 그림처럼 sendmail status를 입력해봐서 active (running) 상태이면 현재 동작 중인 겁니다. 화면 맨 아래는 lines 1-18(END) 형태로 나타나는데 로그 페이지가 길어지면 밑으로 더 내려볼 수 있게 되어있습니다. control + c 키를 눌러 다시 리눅스 명령어 입력상태로 빠져나올 수 있습니다.

여기까지 하면 sendmail로 이메일을 보낼 준비가 되었을 겁니다. 이렇게하면 php의 mail()함수가 동작하게 됩니다. CLI에서 곧바로 테스트 이메일을 보내 봅시다.아래 명령어 처럼 마지막에 수신할 이메일 주소를 넣고 보내봅니다. 

(echo "Subject: 테스트 제목"; echo ; echo "테스트 본문") | sendmail -i -v 나의이메일@주소

위처럼 Sent OK가 나오면 메일이 전송된 겁니다. 자신의 이메일을 열어서 확인해봅시다.스팸폴더에 들어있는 테스트메일신뢰할 수 없는 메일이라서 스팸함에 들어가긴 했지만 어쨌든 무사히 수신된걸 보니 PHP 서버의 mail()함수가 정상적으로 동작합니다.

워드프레스 코어 이메일 발송 테스트

앞서 말했듯, 워드프레스 코어 자체에는 이메일을 통한 몇가지 인증절차를 갖는 기능이 있습니다. 새로운 사용자 가입 이메일, 비밀번호 찾기, 사용자메일 및 관리자 이메일 주소 변경 승인이 그것이죠. 이 동작들이 정상 동작하는지 확인해볼 필요가 있겠죠?

사용자 가입환영 메시지 이메일 알림 테스트

워드프레스 사이트의 사용자 추가하기는 단순히 사용자를 추가하는 것 뿐만 아니라 사용자의 이메일 주소로 환영메시지와 함께 초기 비밀번호 변경 링크를 보내주는 기능을 합니다.

관리자로 로그인 후 워드프레스 관리자 페이지 > 사용자 > 사용자 추가하기 화면에 들어서서 ID와 이메일 주소를 포함한 정보를 입력하고 사용자 알림 전송하기에 있는 체크마크를 체크표시한 뒤 새로운 사용자를 추가 버튼을 누르면 사용자가 추가됩니다.

사용자 추가하기 입력화면
‘새로운 사용자에게 계정에 대한 이메일 전송하기’를 체크해주세요

그러면 입력했던 이메일주소로 아래와 같은 이메일이 수신됩니다. 없다면 스팸함도 확인해봐야합니다.

이메일: 사용자명과 비밀번호 변경 링크 주소가 나옴

메일 내용 중 <…> 사이에있는 주소를 복사해 접속하면 사용자는 자신의 초기 비밀번호를 바꿀 수 있게  됩니다.

워드프레스 비밀번호 찾기(변경) 테스트

워드프레스 코어에는 블로그, 사이트의 비밀번호를 잊었을 때 비밀번호를 변경할 수 있도록 이메일을 전송하는 기능이 있습니다.

테스트 해보려면 우선 로그아웃 한 뒤에 워드프레스 로그인 페이지에 접속합니다. 워드프레스 로그인 페이지는 별도로 바꾸지 않았다면 아래와 같은 형태입니다. 

  • https://나의도메인이름/wp-login.php

접속해서 아래처럼 ‘암호를 분실하셨나요‘ 링크를 클릭하고 나오는 화면에서 ID나 이메일 주소를 입력하고 새 암호 얻기 버튼을 눌러줍니다.

로그인 화면 아래쪽에 '암호를 분실하셨나요?'를 클릭 후 ID 입력

그렇게해서 ‘이메일에서 확인 링크를 클릭하세요.’ 메시지가 나오면 이메일 전송이 완료 된 것이고, 서버의 이메일 보내기에 문제가 있다면 아래처럼 오류메시지가 표시될 겁니다. 오류가 난다면 위에 sendmail을 다시 설치해보거나 다른 수단을 사용해야하겠습니다.

에러메시지
이메일을 보낼 수 없습니다. 가능성 있는 원인: 호스트가 mail()함수를 비활성화했을 수도 있습니다. The email could not be sent. Possible reason: your host may have disabled the mail() function.

정상적으로 보내졌다면 자신의 이메일을 열어서 확인해볼 수 있습니다. 스팸함에서도 찾아봐야겠습니다.

이메일에는 암호변경 시도알림 및 암호 변경 링크가 포함되어있다

워드프레스 사용자 및 관리자 이메일 주소 변경 승인 이메일 보내기 테스트

사용자나 관리자 이메일 주소를 변경하는 것은 단순히 변경할 수 있는 것이 아니라 실제 존재하는 이메일로 변경을 시도하는 것을 확인하기위해 이메일 주소에 메일을 보내서 링크를 통해 변경 승인과정을 거칩니다. 

사용자 이메일 주소변경은 로그인 후 아래 그림 왼쪽처럼 사용자 > 나의 프로필 화면에서 이메일 정보에 새로운 이메일을 입력하고 프로필을 업데이트할 수 있습니다.

나의 프로필에서 새로운 이메일을 입력하면 변경 대기상태가 된다

그러면 위그림 오른쪽 처럼 대기중 메시지가 나타납니다.

  • 이메일을 xxxx@xxxx.com로 변경하는 것이 대기중입니다. (There is a pending change of your email to xxxx@xxx.com)
  • 이메일 주소가 아직 업데이트 되지 않았습니다. xxx@xxx.com의 받은 편지함에서 이메일을 확인해주세요.

반면 워드프레스 사이트 관리자 이메일 주소 변경은 관리자페이지의 설정 > 일반 화면에 나오는 이메일 주소입력란에서 바꿀 수 있는데 아래와같은 메시지가 작성되어있습니다.

  • 이 주소는 관리 목적으로 사용됩니다. 만약 이것을 변경한다면 확인을 위해 새로운 주소로 이메일을 전송합니다.새로운 주소는 확인 전까지 활성화되지 않습니다. (This address is used for admin purposes. If you change this we will send you an email at your new address to confirm it. The new address will not become active until confirmed.)

그리고 이메일을 변경하면 아래와 같은 메시지와 함께 메일이 보내집니다.

  • 관리자 이메일이 xxxx@xxx.com로 변경 대기중입니다. (There is a pending change of the admin email to xxxx@xxx.com)

그리곤 이메일을 열어서 받은편지함 또는 스팸함에서 확인해보세요. 메일 본문에 나온는 변경링크를 클릭해 변경할 수 있습니다.

참고로 이렇게 워드프레스 기능을 사용하지 않고 DB에 입력된 값을 직접 변경해주는 방법도 있습니다.

 

워드프레스 플러그인을 통한 전송 테스트

워드프레스 플러그인 중에서도 자신의 서버(sendmail 같은 PHP라이브러리) 또는 제 3자 SMTP 서비스에 의존해 이메일을 보내는 것들이 있습니다.

이런 플러그인의 기능을 테스트해볼 수 있겠습니다. 

PHP sendmail 삭제 방법

sendmail을 삭제하고 싶다면 아래 명령어를 입력해서 삭제할 수 있습니다.

sudo apt-get autoremove --purge sendmail-base

또는

sudo apt-get purge sendmail*

 

그리고 필수는 아니지만 앞서 php.ini 파일내용에 작성했던 sendmail_path의 값도 줄 앞에 세미콜론(;)을 추가해 주석처리해주고 파일을 저장해주세요. 

Gmail 스팸함으로 빠지는 문제 방지

Gmail로 이메일을 받을 경우 스팸함으로 들어온 자신의 사이트 이메일을 구글주소록에 연락처로 추가해주면 스팸함으로 들어오는 일이 적어질 겁니다.

위처럼 콘택트폼 7을 통해 오는 이메일 주소는 보통 아래와 같은 형태이므로 추가하면 되겠습니다.

  • wordpress@자신의도메인명

17 댓글

  1. 오늘도 좋은 내용이네요! 안그래도 얼마전에 아마존 라이트세일에 우분투랑 워드프레스를 설치해놓고 contact form 플러그인을 사용할 때 메일이 전송 안되서 고생했었던 경험이 있었는데…

  2. 안녕하세요! 스위프트님 글 참고하면서 무사히 LEMP스택에 워드프레스를 설치했습니다! 근데 sendmail을 설치하는 중 로그에서 오류가 몇가지 나타나서 이렇게 글 납깁니다 ㅜㅜ(이제 오류를 보면 치가 떨립니다….)

    adduser: 경고: ‘/var/lib/sendmail’ 홈 디렉터리는 현재 생성하고 있는 사용자에게 속하지 않습니다.
    *** *** *** WARNING *** WARNING *** WARNING *** WARNING *** *** ***

    Everything you need to support STARTTLS (encrypted mail transmission
    and user authentication via certificates) is installed and configured
    but is NOT being used.

    To enable sendmail to use STARTTLS, you need to:
    1) Add this line to /etc/mail/sendmail.mc and optionally
    to /etc/mail/submit.mc:
    include(`/etc/mail/tls/starttls.m4′)dnl
    2) Run sendmailconfig
    3) Restart sendmail

    Warning: confCT_FILE source file not found: /etc/mail/trusted-users
    it was created
    Informational: confCT_FILE file empty: /etc/mail/trusted-users
    Warning: confCW_FILE source file not found: /etc/mail/local-host-names
    it was created
    Warning: access_db source file not found: /etc/mail/access
    it was created
    Updating /etc/mail/access…
    Linking /etc/aliases to /etc/mail/aliases
    Informational: ALIAS_FILE file empty: /etc/mail/aliases
    Updating /etc/mail/aliases…
    WARNING: local host name (wordpress) is not qualified; see cf/README: WHO AM I?
    /etc/mail/aliases: 0 aliases, longest 0 bytes, 0 bytes total

    Warning: 3 database(s) sources
    were not found, (but were created)

    이렇게 세가지 입니다!! 혼자 해결해보록 하겠지만 도와주신다면 감사하겠습니다!

    • 1, 2, 3 이 빠져서 구분 못하실 것 같아 다시 남깁니다!

      1.adduser~

      WARNING
      databases관련입니다!

    • 아래 경고는 메일 암호화 STARTTLS 설정에대한 내용인데 무시하고 넘어가도 메일이 보내질 겁니다.

      *** *** *** WARNING *** WARNING *** WARNING *** WARNING *** *** ***
      
      Everything you need to support STARTTLS (encrypted mail transmission
      and user authentication via certificates) is installed and configured
      but is NOT being used.
      
      To enable sendmail to use STARTTLS, you need to:
      1) Add this line to /etc/mail/sendmail.mc and optionally
      to /etc/mail/submit.mc:
      include(`/etc/mail/tls/starttls.m4′)dnl
      2) Run sendmailconfig
      3) Restart sendmail
      

      위 경고 내용을 풀이하자면
      STARTTLS 를 사용하려면 include('/etc/mail/tls/starttls.m4')dnl이라는 한 줄 코드를 /etc/mail/sendmail.mc 파일과 /etc/mail/submit.mc 파일 내용에 추가한뒤sendmailconfig` 명령어를 실행 후 sendmail을 재시작하라는 내용입니다.

      그리고 그 밑에 다른 에러는 저도 처음보네요.

      Warning: confCT_FILE source file not found: /etc/mail/trusted-users
      it was created
      Informational: confCT_FILE file empty: /etc/mail/trusted-users
      Warning: confCW_FILE source file not found: /etc/mail/local-host-names
      it was created
      Warning: access_db source file not found: /etc/mail/access
      it was created
      Updating /etc/mail/access…
      Linking /etc/aliases to /etc/mail/aliases
      Informational: ALIAS_FILE file empty: /etc/mail/aliases
      Updating /etc/mail/aliases…
      WARNING: local host name (wordpress) is not qualified; see cf/README: WHO AM I?
      /etc/mail/aliases: 0 aliases, longest 0 bytes, 0 bytes total
      

      위 경고는 host name에 관련된 에러같은데 서버 컴퓨터의 호스트이름을 바꾸신적 있으실 것같아요.

      CLI에서 hostname 을 입력해봐서 현재 호스트네임이 무엇인지 볼 수 있습니다. 라이트세일 인스턴스는 디폴트로 Private IP 주소에 맞추어 아래와같은 형태로 정해져있습니다.
      ip-172-xx-x-xxx
      호스트 이름을 바꾸려면 아래 형태로 명령어를 입력하고
      sudo hostnamectl set-hostname 새로운호스트네임

      그리고 /etc/hosts 파일을 수정합니다. 아래 명령어로 나노편집기로 열수 있습니다.
      sudo nano /etc/hosts
      이 파일 내용을 보면 맨위에 아래 내용대로 작성되어있을 겁니다.
      127.0.0.1 localhost
      이 값이 지금 localhost가 아닌 wordpress 되어있지 않나 싶네요.

      참고로 호스트네임을 바꾸고 나면 SSH에 재 접속해야 반영된걸 볼 수 있습니다.

      Warning: 3 database(s) sources
      were not found, (but were created)
      

      위 내용은 필요한 3개의 데이터베이스가 없어서 만들었다는 얘기 같네요.

  3. *** *** *** WARNING *** WARNING *** WARNING *** WARNING *** *** ***
    
    Everything you need to support STARTTLS (encrypted mail transmission
    and user authentication via certificates) is installed and configured
    but is NOT being used.
    
    To enable sendmail to use STARTTLS, you need to:
    1) Add this line to /etc/mail/sendmail.mc and optionally
    to /etc/mail/submit.mc:
    include(<code>/etc/mail/tls/starttls.m4′)dnl
    2) Run sendmailconfig
    3) Restart sendmail</code>
    

    이부분은 지시하신 사항대로 한줄 추가 해줬더니 더이상 발생하지 않습니다.

    Warning: confCT_FILE source file not found: /etc/mail/trusted-users
    it was created
    Informational: confCT_FILE file empty: /etc/mail/trusted-users
    Warning: confCW_FILE source file not found: /etc/mail/local-host-names
    it was created
    Warning: access_db source file not found: /etc/mail/access
    it was created
    Updating /etc/mail/access…
    Linking /etc/aliases to /etc/mail/aliases
    Informational: ALIAS_FILE file empty: /etc/mail/aliases
    Updating /etc/mail/aliases…
    WARNING: local host name (wordpress) is not qualified; see cf/README: WHO AM I?
    /etc/mail/aliases: 0 aliases, longest 0 bytes, 0 bytes total

    이부분도 알려주신

    sudo hostnamectl set-hostname 새로운호스트네임

    위 코드로 변경할 수 있었습니다.

    저는 처음에 라이트세일에 구축하려다가, vultr에 70$정도가 예치되어있어 vultr에서 구축을 하였습니다.
    다른 외국인이 만들어 준 사이트에서 구축을 하던 도중 SSL관련해서 오류가 생겨 스위프트님 블로그에서 도움을 받아 해결할 수 있었습니다.

    vultr에서 처음에 서버생성할 때 wordpress라는 이름으로 서버를 생성해서 hostname이 저렇게 설정되있던것 같습니다. 일러주신 명령어로 제 사이트 도메인 입력하니 더 이상의 오류는 발생하지 않습니다.

    vultr에서 SSH관련된 부분을 첫 블로그 포스팅으로 적어볼 예정인데 그때 스위프트님 블로그를 링크걸어서 사람들이 많이 참고하도록 하겠습니다. 감사합니다^^

  4. STARTTLS=server, error: cannot read DH parameters(/etc/mail/tls/sendmail-common.prm): error:0906

    선생님 , 이 오류가 sendmail status창에서 발생하였습니다.

    일러주신대로 처음부터 다시 셋팅했지만 똑같은 오류가 발생합니다 ㅠㅠ

  5. 소개해주셨던 아마존 라이트세일은 서버 PHP를 이용한 메일발송 지원하지 않는걸로 알고있는데요 맞나요?
    다른정보를 찾다보니 결국 타사 SMTP를 이용하는것밖에 답이없는듯한데..
    “인스턴스는 이메일 지원을 하지 않았다. 이런 경우 서버에서 자체적인 이메일 수신&발신이 불가능하기 때문에, 확인 이메일이라든지 플러그인 기능 등 본인의 이메일과 관련된 설정과 기능을 사용할 수 없다”

    • 네 타사 SMTP서비스를 받거나 아마존 SES 서비스를 연계하는 등의 방법이 필요할 거예요.

      본문에 나온 방법으로 소량 이메일은 가능합니다만 보내도 이메일 서비스사에서 전달을 안해주면 말짱 꽝입니다.

  6. 항상 너무 잘보고 있습니다.
    아마존 라이트 세일에도 php이용한 메일 발송이 되는군요. nginx 서버에 lemp 스택 워드프레스로 설치했구요. php버전이 7.3.6이고 nginx버전은 17입니다.
    사이트 모든 설정이 끝나고 https설정까지 전부 한후 sendmail하니 잘됩니다.
    그런데
    위의 강좌중 lemp스택설치시 php.ini수정이 sudo nano /etc/php/7.3/fpm/php.ini 만 나와있는데
    sudo nano /etc/php/7.3/cli/php.ini 여기도 설정을 해줘야 작동하네요. 7.3은 제 버전이고 다른버전 쓰면 바꿔주면 되구요.

    그리고 아마존 라이트세일 nginx lemp스택으로 워드프레스를 설치후 site health를 확인해보면 bcmath와 imagick설치를 하라고 나옵니다.
    그건 안나와있어서 추가 부탁드립니다.
    워드프레스 관리자 도구-site health에서 확인

    bcmath설치
    1.버전확인
    php –version
    2. 설치가능 패키지확인
    sudo apt search bcmath
    3. 자신의 php버전에 맞는것으로 설치(예 7.3)
    sudo apt install php7.3-bcmath
    4, 확인
    php -r ‘echo bcadd(“1”, “2”).PHP_EOL;’
    5. php 재시작
    sudo service php7.3-fpm restart
    6. 서버 재시작
    sudo service nginx restart

    imagick 설치(강좌 이상한거 보고 설치하면 사이트가 이상해집니다.)
    1.버전확인
    php –version
    2. 설치가능 패키지확인
    sudo apt search bcmath
    3. 설치
    sudo apt install php-imagick
    4.확인
    php -m | grep imagick
    5. php 재시작
    sudo service php7.3-fpm restart
    6. 서버 재시작
    sudo service nginx restart

  7. 좋은글 올려주셔서 감사합니다. 님 덕분에 안풀리던 문제를 쉽게 풀었네요. 고맙습니다~

  8. LEMP 스택 강좌 글 감사합니다. 한글로 된 문서 중에 이 곳의 글이 제일 좋은 것 같아요.

    여태 강좌를 따라 하다가 PHP sendmail 부분에서 계속 실패네요.

    처음에는 https 설정까지 했다가 sendmail 을 설치하는데 있어서 DSA 파라미터 파일 준비 (sendmail-common.prm)까지 강좌대로 따라 했는데, 설치 과정에서 Creating SSL certificates for sendmail에서 멈춤 현상이 발생해서 실패 했어요. (다시 시도하려다가 sendmail 을 삭제해버리는 바람에 망했어요)

    그래서, 인스턴스를 삭제하고 이번에는 다시 처음부터 따라하다가 https 설치 전에 sendmail 설치 과정을 따라해서 무사히 잘 된 것 같습니다.

    sendmail status를 입력해봐서 active (running) 상태까지 확인한 상태입니다.

    그런데 문제는 telnet 을 이용한 이메일 테스트나 워드프레스에서의 회원가입, 암호분실시 이메일 테스트를 하면 메일이 오지를 않네요.

    CLI 에서 강좌대로 이메일 테스트를 하면 아래와 같은 메세지를 끝으로 멈추는 현상이 발생합니다. ( 참고로 저는 PHP 7.4.2 / Nginx 1.10.3 우분투 입니다. )

    354 Enter mail, end with “.” on a line by itself

    그리고, mail.log 를 살펴보면 아래와 같은 오류 메세지가 찍혀 있습니다.


    mailer=esmtp, pri=30429, relay=alt4.gmail-smtp-in.l.google.com. [아이피 주소], dsn=4.0.0, stat=Deferred: Connection timed out with alt4.gmail-smtp-in.l.google.com.

    그래서, 구글에서 몇 시간 동안 찾아본 끝에 아마도 아래 링크의 글이 제가 지금 당면해 있는 문제에 대한 원인 / 해결법 인 것 같습니다.

    => https://m.blog.naver.com/jimlkom/220654805121

    그리고, 포스팅의 말미에 아래와 같이 조치를 하라고 하는데요. 제가 이것을 어떻게 적용을 해야될지 몰라 염치 없지만 도움을 구하고 싶습니다.


    sudo update-alternatives --install "/usr/sbin/sendmail" "mta" "sendmail의 위치" 5000 sudo update-alternatives --install "/usr/sbin/sendmail" "mta" "postfix의 위치" 5000 sudo update-alternatives --install "/usr/sbin/sendmail" "mta" "esmtp의 위치" 5000 sudo update-alternatives --config mta (사용할 에이전트를 선택)

    => sendmail, postfix, esmtp 의 위치, 사용할 에이전트 선택 부분을 어떻게 적어줘야 될 지 모르겠습니다.

    혹시 조언을 해주실 수 있으실까요? ㅠ

  9. 정말 잘 배우고 있습니다만,
    현재 마지막 단계에서 send mail 테스트를 진행할때에,
    (echo “Subject: 테스트 제목”; echo ; echo “테스트 본문”) | sendmail -i -v 나의이메일@주소

    이 명령어로 작성하니,
    354 Enter mail, end with “.” on a line by itself

    이런 오류가 발생합니다.
    어떻게 해결해야할까요?

    현재 저는 nginx로 웹서버를 구성한 상태이며,
    도메인 연결까지 완료하였습니다.

댓글은 익명이나 SNS, wordpress.com 로그인 지원). 마크다운 문법 사용가능(Shift+~ 키로 특정문구 혹은 위아래 ~~~으로감싸서 여러줄을 코드블락으로 작성)