PHP mail() 함수와 함께 Gmail 또는 Yahoo를 사용하는 방법


빨간색의 의미

사용자가 입력하거나 사용자 지정해야 하는 줄은 이 자습서에서 빨간색으로 표시됩니다!

나머지는 대부분 복사하여 붙여넣을 수 있어야 합니다.

PHP 메일() 정보

이메일을 보내기 위한 PHP sendmail_path 구성 지시어. 이것은 기본적으로 sendmail로 설정됩니다.

대부분의 Linux 설치에는 sendmail이 미리 설치되어 있지만 SPF/PTR 레코드를 설정하고 DKIM 키를 생성하는 등 PHP 스크립트에서 보낸 이메일이 스팸으로 표시되지 않도록 하기 위해 항상 번거로움이 있습니다. MSMTP라는 SMTP 클라이언트는 타사 SMTP 서버를 사용하여 전자 메일을 보내는 데 사용할 수 있으며 sendmail 대신 PHP의 mail()에서 사용할 수도 있습니다.

설치

Fedora Linux에 MSMTP를 설치하려면 yum을 사용하십시오.

yum install msmtp

CentOS 리포지토리에는 MSMTP용 RPM 패키지가 없으므로 소스에서 설치해야 합니다.

yum install make gcc pkgconfig
wget http://sourceforge.net/projects/msmtp/files/msmtp/1.4.31/msmtp-1.4.31.tar.bz2/download
tar -xvf msmtp-1.4.31.tar.bz2
cd msmtp-1.4.31
./configure
make
make install

이 글을 쓰는 시점의 최신 버전은 1.4.31이지만 향후 변경될 수 있으므로 최신 버전을 얻으려면 이 sourceforge 페이지를 방문하십시오.

Ubuntu/Debian 배포에서는 apt-get을 사용합니다.

apt-get install msmtp

아치 리눅스 사용자:

sudo pacman -S msmtp

MSMTP 구성

MSMTP의 구성 파일은 각 사용자의 ~/.msmtprc에 저장되며 /etc/msmtprc는

vi ~/.msmtprc

Yahoo 계정에 대해 다음 줄을 추가합니다.

account yahoo
tls on
tls_starttls off
tls_certcheck off
auth on
host smtp.mail.yahoo.com
user user1
from user1@yahoo.com
password yourYahooPa5sw0rd

Gmail의 경우 다음 설정을 사용하십시오.

account gmail
tls on
tls_certcheck off
auth on
host smtp.gmail.com
port 587
user user1@gmail.com
from user1@gmail.com
password yourgmailPassw0rd

이 파일에는 둘 이상의 계정이 있을 수도 있습니다. \계정\ 값이 각 섹션에 대해 고유한지 확인하십시오.

chmod 600 ~/.msmtprc

이것을 PHP에서 구현하기 전에 명령줄에서 제대로 작동하는지 확인하십시오. 이렇게 하려면 간단한 이메일이 포함된 일반 텍스트 파일을 만듭니다.

echo -e "From: alice@example.com \n\
To: bob@domain.com \n\
Subject: Hello World \n\
\n\
This email was sent using MSMTP via Gmail/Yahoo." >> sample_email.txt

이제 다음 이메일을 보내십시오.

cat sample_email.txt | msmtp --debug -a gmail bob@domain.com

\gmail\이라는 단어를 \yahoo\ 또는 \계정\ 옵션에 입력한 내용으로 바꾸십시오. 때문에 많은 메시지를 볼 수 있습니다.

cp -p ~/.msmtprc /etc/.msmtp_php

소유권을 웹 서버가 실행 중인 사용자 이름으로 변경합니다. 설치된 VPS 및 웹 서버의 Linux 배포판에 따라 apache, www-data 또는 nobody가 될 수 있습니다.

chown www-data:www-data /etc/.msmtp_php

PHP 구성

php.ini 파일을 엽니다. 해당 위치는 설치된 OS 및 PHP 유형(PHP CGI, mod_php, PHP-FPM 등)에 따라 다릅니다.

vi /etc/php5/php.ini

다음 줄을 찾으십시오.

sendmail_path =

msmtp 명령에 경로를 추가하여 수정합니다.

sendmail_path = "/usr/bin/msmtp -C /etc/.msmtp_php --logfile /var/log/msmtp.log -a gmail -t"

수동으로 로그 파일을 만들고 소유권을 웹 서버가 실행 중인 사용자 이름으로 변경합니다.

touch /var/log/msmtp.log
chown www-data:www-data /var/log/msmtp.log

변경 사항을 적용하려면 웹 서버를 다시 시작하십시오.

service httpd restart

Arch Linux에서는 systemctl 명령을 사용하여 이 작업을 수행합니다.

systemctl restart httpd

OS 및 웹 서버에 따라 \httpd\를 적절한 이름으로 바꿉니다. PHP가 별도의 프로세스(예: PHP-FPM)로 실행 중인 경우 대신 다시 시작합니다.

service php5-fpm restart

간단한 mail()로 PHP 스크립트를 만들어 이 설정을 테스트합니다.

<?php
if(mail("receipient@domain.com","A Subject Here","Hi there,\nThis email was sent using PHP's mail function."))
print "Email successfully sent";
else
print "An error occured";
?>

웹 브라우저에서 이 파일에 액세스하십시오.

http://www.example.com/file.php

이 이메일이 전송되지 않은 경우 msmtp 로그 파일에서 오류를 확인할 수 있습니다.

tail /var/log/msmtp.log

일반적인 오류

PHP 스크립트를 사용할 때 이메일이 전송되지 않으면 다음과 같이 문제를 해결하십시오.

  • Check if you edited the correct php.ini file. This can be confirmed by creating a phpinfo(); file and checking the "Loaded Configuration File" section.
  • The path to the msmtp configuration file might be wrong or the web server doesn't have permission to read this file.
  • Check if an email is sent by running the script using command-line PHP:
    php /var/www/html/file.php