다시:EC2 인스턴스에서 (PHP를 통해) 메일 보내기 [닫기]
-
13-12-2019 - |
문제
나는 PHP의 메일 기능을 사용하여 Amazon EC2 인스턴스에서 메일을 보내는 문제에 대해 많은 토론을 보았습니다.어떤 제안도 나에게 효과가 없었습니다.
내 설정은 다음과 같습니다.
- 우분투 EC2 인스턴스가 있습니다.
- Amazon SES의 단계에 따라 생성된 자격 증명을 사용하여 postfix를 설치했습니다.저는 stunnel 방식과 direct 방식을 모두 시도했습니다.
- 나는 Swiftmail 전송을 사용하여 다음과 같이 메일을 보냈습니다. 이것.메일을 보내는 전송 함수는 0이 전달됨을 반환합니다.
- 나는 PHP 메일을 단독으로 사용했는데 true를 반환했습니다.하지만 스팸이 아니어도 메일은 배달되지 않습니다.
그런데 저는 SES와 함께 프로덕션 서비스를 사용하지 않습니다.나에게는 한계가 없습니다. 단지 그것이 작동하기를 원합니다.
제대로 인증되지 않은 것 같은데 이유를 모르겠습니다.Telnet ...amazonaws.com 25에 접속해 보았는데 연결되었습니다.그러나 Mail From 명령을 시도했을 때 :...텔넷에서는 인증이 필요하다고 뜹니다.
나는 이미 대안을 생각했습니다.sendgrid.제가 사용하기에는 너무 비쌉니다.
이견있는 사람?
해결책
PHP :
를 사용하여 EC2 인스턴스에서 SendGrid를 사용한 방법은 다음과 같습니다.- SendGrid 계정에 가입하십시오.전자 메일을 보내는 데 사용할 사용자 이름과 암호를 받게됩니다.또한 SendGrid는 수동으로 계정을 확인합니다 (스팸 방지 가능).
- Ubuntu에 PHP 컬 라이브러리를 설치하십시오 :
sudo apt-get install php5-curl
. -
이 PHP 코드를 사용하여 전자 메일 보내기 :
$url = 'http://sendgrid.com/'; $user = 'sendgrid_user'; $pass = 'sendgrid_password'; $params = array( 'api_user' => $user, 'api_key' => $pass, 'to' => $dest_addr, 'subject' => $subject, 'html' => $body, //'text' => 'testing body', 'from' => $from_addr, ); $request = $url.'api/mail.send.json'; $session = curl_init($request); // Tell curl to use HTTP POST curl_setopt ($session, CURLOPT_POST, true); // Tell curl that this is the body of the POST curl_setopt ($session, CURLOPT_POSTFIELDS, $params); // Tell curl not to return headers, but do return the response curl_setopt($session, CURLOPT_HEADER, false); curl_setopt($session, CURLOPT_RETURNTRANSFER, true); // obtain response $response = curl_exec($session); //If the result is {"message":"success"}, then the mail is sent. curl_close($session);
다른 팁
postfix의 한 가지 대안은 "간단한 smtp"를 사용하는 것입니다(ssmtp) 작업을 제공합니다 메일을 보내다 다른 프로그램/프레임워크에서 사용할 수 있습니다.이 예에서 ssmtp는 Gmail 계정을 통해 이메일을 보냅니다.
- 아직 Gmail 계정이 없다면 먼저 Gmail 계정을 만드세요.
- 당신을 확인 절대적으로하지 xmail이나 postfix와 같은 동시 메일 앱이 이미 설치되어 있지 않으면 방해가 됩니다.
- 그런 다음 ssmtp를 설치하십시오.
sudo apt-get install ssmtp
- 그런 다음 편집
/etc/ssmtp/ssmtp.conf
(아래 참조) - 그런 다음 편집
/etc/ssmtp/revaliases
(아래 참조) - 그런 다음 테스트하십시오.
echo message content | sendmail -v test@something.com
- (선택 사항) 작동하지 않으면 로그를 살펴보십시오.
ll /var/log/mail.*
그리고cat ...
의 내용 ssmtp.conf 해야한다 :(내 꼭두각시 모듈에서 가져온 <%= %> 섹션을 데이터로 바꾸세요)
root=<%= email %>
mailhub=smtp.googlemail.com:465
AuthUser=<%= email %>
AuthPass=<%= password %>
FromLineOverride=YES
UseTLS=YES
경고 :conf 파일에는 unix eol이 있어야 합니다.
그리고 내용은 재평가 해야한다 :
root:<%= email %>:smtp.googlemail.com:465
이 기술은 매우 간단하지만 수백 통의 이메일을 보내야 한다면 확장되지 않을 것 같습니다.
또 다른 훌륭한 링크(프랑스어): http://doc.ubuntu-fr.org/ssmtp
제휴하지 않습니다 StackOverflow