PHP로 메일을 보내려면 어떻게해야합니까?


답변:


51

PHP의 메일 매뉴얼에서 :

요구 사항

메일 기능을 사용하려면 PHP가 설치되어 작동하는 이메일 시스템이 필요합니다. 사용되는 프로그램은 php.ini 파일의 구성 설정에 의해 정의됩니다.

이것은 일종의 메일 서버를 설치하고 그것을 사용하도록 php를 구성해야 함을 의미합니다. 보통이 메일 서버는 우분투에서 접미사입니다. 그러나 코딩중인 PHP 측이 결국 호스팅 서비스 측 (예 : xmission)에 저장되면 메일 서버가 이미 설치되어있을 것입니다. 이 경우 로컬 대신 사이트를 온라인으로 테스트하십시오.

자체 시스템에서 테스트하거나 홈 서버에서 호스팅해야하는 경우 다음을 수행하십시오.

접미사 설치

설치 : postfix 접미사 설치 / sudo apt-get install postfix 프로세스 중에 postfix를 설치하려는 모드가 표시됩니다. 네 가지 가능한 모드가 있습니다.

  • 인터넷 : 자신의 메일 서버.
  • 위성 : 외부 메일 제공 업체 (예 : Google)가 메일을 보내고받는 데 사용됩니다. 서버는 메일을받지 않습니다.
  • 스마트 호스트 : 둘 사이의 혼합물. 메일은 로컬로 저장되지만 외부 메일 공급자를 통해 전송됩니다.
  • 지역에만 해당 : 걱정하지 않습니다. 이것이 시스템 인턴 메일 서버입니다. 시스템의 사용자에게만 메일을 보낼 수 있습니다.

나머지 설치 옵션은 선택한 일반 구성에 따라 다릅니다.

대부분 위성 설치를 선택할 것입니다. 즉, extern 공급자를 사용하여 메일을 보냅니다. 그러면 smtp-server (발신 메일 서버)로 공급자 smtp를 지정해야합니다. 나머지 옵션은 자명하다.

설치 후 구성

대부분의 smtp 서버는 메일을 보내려면 비밀번호 인증이 필요합니다. 따라서 postfix는 해당 비밀번호를 알아야합니다. 또한 암호화와 같은 것들이 있습니다 (구글해야합니다). 다음은 비밀번호 인증 (sasl)을 사용하여 postfix를 구성하는 방법입니다.

  • Software Center 아이콘을 클릭하거나 다음을 사용하여 터미널에서 libsasl2-modules libsasl2 모듈 설치sasl2-bin sasl2-bin 설치 을 설치 하십시오 .

    sudo apt-get install libsasl2-2 libsasl2-modules sasl2-bin
    
  • 이 줄을 추가하여 sasl-auth를 활성화하십시오. /etc/postfix/main.cf

     # add to /etc/postfix/main.cf
     smtp_sasl_auth_enable = yes
     smtp_sasl_security_options = noplaintext noanonymous
     smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
    
  • 다음 /etc/postfix/sasl_password과 같은 줄로 파일 을 작성하십시오 .

     smtp.gmail.com USERNAME@gmail.com:USERPASSWORD
    

    실제 비밀번호, 사용자 이름 및 smtp- 주소를 대체하십시오.

  • 접미사 업데이트 :

     sudo chmod 600 /etc/postfix/sasl_password # for safety of your smtp password
     sudo postmap hash:/etc/postfix/sasl_password 
     sudo postmap /etc/postfix/sender_canonical
     sudo /etc/init.d/postfix restart   
    

    당신은 회피해야 할 수도 있습니다 '거부 권한을'버그 에 의해 chown postfix:postfix /etc/postfix사전.

대부분의 경우에 그렇게해야합니다. 그러나 일부 smtp 공급자는 발신자 또는 암호화와 같은 특정 주소를 요구합니다.

관련 : PEAR :: Mail 인터페이스도 관심이있을 수 있습니다.

Gmail (및 기타 서비스)은 표준에 의해 안전하지 않은 것으로 간주되어 이러한 방식으로 메일을 보내려고 시도하는 것을 좋아하지 않을 수 있으며, 시도를 차단합니다. 당신의 인증. 또한 POP3가 활성화되어 있어야합니다.

여기에 대응하기 위해. (안전한 편이 되려면 더미 Gmail 계정을 만드십시오)


우분투 (로컬)에서 메일 보내기가 작동합니다. 그러나 Windows에서이 컴퓨터를 사용하여 메일을 보내려면 어떻게해야합니까 (PHP도)? 어떻게 구성합니까?
JM at Work

확실하지 않은 질문이 있습니다. 우분투 머신에서 모래를 뿌릴 수 있습니다. 이제 당신이하고 싶은 일은 PHP를 통해 Windows PC에서 해당 우분투 컴퓨터를 통해 mal을 보내는 것입니까? 그 맞습니까?
콘 - F-사용

2
이제 libsasl2 패키지 가 존재하지 않습니다. 11.04를 사용하고 있습니다. 그 libsasl2-2 업데이트 된 패키지에 따라 ...
mythicalcoder

61

이미 언급했듯이 집 컴퓨터에서 응용 프로그램을 개발하는 동안 PHP에서 전자 메일을 보내면 postfix가 과도합니다.

나는 개인적으로 매우 간단하고 가벼운 패키지 ssmtp를 사용합니다. 모든 smtp 서버를 사용하여 발신 이메일을 보냅니다. 다음을 실행하여 설치하십시오.

sudo apt-get install ssmtp

그런 다음 /etc/ssmtp/ssmtp.conf파일을 편집 하고 기존 mailhub 행을 주석 처리하고 다음 행을 추가하십시오 (이 예는 gmail smtp 서버용).

mailhub=smtp.gmail.com:587
UseSTARTTLS=YES
AuthUser=<YOUR-EMAIL>@gmail.com
AuthPass=<YOUR-PASSWORD>

(gmail 사용자 이름 및 비밀번호를 제공하십시오. 물론 다른 SMTP 서버를 사용할 수 있습니다).

이제 php.ini가 올바른지 확인하십시오 sendmail_path. 다음과 같이 읽어야합니다.

sendmail_path = /usr/sbin/sendmail -t

( @ dima-l 및 @ omar-sabic의 의견에서 : ssmtp설치가에 대한 심볼릭 링크를 만들었으므로 여기 에서 지정하지 않아도 /usr/sbin/sendmail됩니다 ssmtp. 그렇지 않으면을 지정해야합니다. sendmail_path = /usr/sbin/ssmtp -t)

아파치를 다시로드하면 PHP가 발신 전자 메일을 보낼 수 있습니다.


3
나는 당신이 의미하는 것 같아요 sendmail_path = /usr/sbin/ssmtp -t. 감사합니다
Omer Sabic

1
ssmtp는에 대한 symlink를 작성해야합니다.이 링크는 ssmtp /usr/sbin/sendmail를 올바르게 가리 킵니다. 그래서, 사용은 sendmail_path = /usr/sbin/sendmail -t잘 작동한다
디마 L.

2
구성에 대한 자세한 정보 ssmtp(유용한 참고 사항 포함) : 데비안에서 PHP 메일을 설정하는 방법 -이 질문 +이 링크는 프로그램을 설정하는 데 도움이되었습니다.
gskema

1
Gmail의 경우 "안전하지 않은 앱"이 작동하도록 Google 계정을 구성해야합니다. 참조 support.google.com/accounts/answer/6010255을
aesede

1
또한 다음 줄을 추가 FromLineOverride=YES해야했습니다. 다음 오류를 피하려면 :550 5.7.60 SMTP; Client does not have permissions to send as this sender
Caumons

29

PHP는 메일을 보내려면 SMTP 클라이언트가 필요합니다. 이 기능을 수행하기 위해 Postfix 와 같은 모든 기능을 갖춘 MTA (Mail Transfer Agent)를 설치할 수 있지만 PHP를 통해서만 메일을 보내야하는 경우에는 무리가 있습니다. 대신 msmtp를 설치 하십시오 . 가볍고 구성하기가 훨씬 간단합니다.

msmtp 설치

sudo apt-get install msmtp-mta ca-certificates

구성

새 구성 파일을 작성하십시오.

sudo vi /etc/msmtprc

... 다음 구성 정보 포함 :

# Set defaults.
defaults

# Enable or disable TLS/SSL encryption.
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt

# Set up a default account's settings.
account default
host <smtp.example.net>
port 587
auth on
user <username@example.net>
password <password>
from <address-to-receive-bounces@example.net>
syslog LOG_MAIL

"<"및 ">"내의 모든 항목으로 표시되는 구성 데이터를 교체해야합니다 (이를 포함하여 제거). 호스트 / 사용자 이름 / 비밀번호의 경우 메일 제공 업체를 통해 메일을 발송하려면 일반 자격 증명을 사용하십시오.

PHP에게 사용하도록 지시하십시오

sudo vi /etc/php5/apache2/php.ini

이 한 줄을 추가하십시오 :

sendmail_path = /usr/bin/msmtp -t

물론 php.ini가없는 'sudo vi /etc/php5/conf.d'는 작동하지 않습니다. 필자의 경우 (우분투), '/etc/php5/apache2/php.ini'를 편집하고 아파치 'sudo /etc/init.d/apache2 reload'를 다시 시작해야 작동했습니다.
Dejan

1
BTW, 다음을 사용하여 msmtprc 구성을 테스트 할 수 있습니다.cat <<EOF | msmtp <receiver@test.com> Subject: test This is a test! EOF
Dejan

좋을 것이지만 그것은 나를 위해 작동하지 않습니다. 로그에 아무것도 나타나지 않습니다. 완전히 괜찮아 보이지만 주사위는 없습니다.
제임스 T 스넬

2
msmtp를 시스템 전체에서 사용할 수있게하려면 "msmtp-mta"를 설치하십시오.
colan

1
다음 지침에 나와 같이 너무 리터럴 인 경우 실제로 구성 파일에 <> 괄호를 유지하지 않습니다. 그 사실을 알아 내기 위해 20 분의 시간을
보냈

4

간단한 수정해야합니다. 실제 이메일 전송을 수행하는 Postfix 만 설치하면됩니다.

sudo apt-get install postfix

몇 가지 설정 질문이 필요하기 때문에 소프트웨어 센터가 아닌 터미널에서 터미널을 실행하려고합니다. 모든 기본값 (로컬 전용 등) 만 수락해야합니다.


2

이것은 오래된 질문이며 위의 가치있는 답변이 있지만 exim환경에 필요 했습니다. 또한 sendmail이 처음에 설치되어 있는지 확인하십시오 ( $ which sendmail--usr / sbin / sendmail과 같은 것을 반환해야 함). linode.com 에서 좋은 가이드를 찾았 지만 요점은 다음과 같습니다.

apt-get install exim4-daemon-light mailutils

뒤에 :

dpkg-reconfigure exim4-config

대화식 편집기로 연결됩니다.


1

좋은 대답 , 혼동.

"더미 Gmail 계정"에 대해 추가해야 할 것이 있습니다.

https://www.google.com/settings/u/0/security/lesssecureapps 보다 덜 안전한 애플리케이션을 허용하도록 Gmail 계정을 구성해야하기 때문에이 방법을 사용하는 것이 좋습니다. 그렇지 않으면 "웹 브라우저를 사용하여 로그인하십시오. /var/log/mail.log파일에 오류가 있습니다 "오류가 발생했습니다 .

또한 루트 인증서를 gmail smtp 서버에 보내지 않으면 시간 초과 오류가 발생합니다. 이것을하기 위해:

sudo nano /etc/postfix/main.cf

파일의 맨 아래에 다음을 추가하십시오

smtp_tls_CAfile = /etc/postfix/cacert.pem

그런 다음 thawte 루트 인증서를 cacert.pem파일로 복사 하십시오.

cat /etc/ssl/certs/thawte_Primary_Root_CA.pem | sudo tee -a /etc/postfix/cacert.pem

내가 사용한 링크는 다음과 같습니다 . Ubuntu에서 Gmail SMTP를 사용하도록 Postfix 구성 | EasyEngine

잘하면 이것은 모낭 몇 개를 구합니다 ...


0

Dima L. 이 제공하는 솔루션 이 시스템에서 가장 쉬운 방법이며 경량 이라는 것을 알았습니다 .

더 명확하게 설정하기 위해 추가하십시오. 당신은 논평한다 hostname/etc/ssmtp/ssmtp.conf파일. 샘플 ssmtp.conf파일은 다음과 같습니다.

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

# 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.yourdomain.com
UseSTARTTLS=YES
AuthUser=mail@yourdomain.com
AuthPass=YOUREMAILPASSWORD

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

# The full hostname
#hostname=

# 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.