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