문제

나는 PHP의 메일 기능을 사용하여 Amazon EC2 인스턴스에서 메일을 보내는 문제에 대해 많은 토론을 보았습니다.어떤 제안도 나에게 효과가 없었습니다.

내 설정은 다음과 같습니다.

  • 우분투 EC2 인스턴스가 있습니다.
  • Amazon SES의 단계에 따라 생성된 자격 증명을 사용하여 postfix를 설치했습니다.저는 stunnel 방식과 direct 방식을 모두 시도했습니다.
  • 나는 Swiftmail 전송을 사용하여 다음과 같이 메일을 보냈습니다. 이것.메일을 보내는 전송 함수는 0이 전달됨을 반환합니다.
  • 나는 PHP 메일을 단독으로 사용했는데 true를 반환했습니다.하지만 스팸이 아니어도 메일은 배달되지 않습니다.

그런데 저는 SES와 함께 프로덕션 서비스를 사용하지 않습니다.나에게는 한계가 없습니다. 단지 그것이 작동하기를 원합니다.

제대로 인증되지 않은 것 같은데 이유를 모르겠습니다.Telnet ...amazonaws.com 25에 접속해 보았는데 연결되었습니다.그러나 Mail From 명령을 시도했을 때 :...텔넷에서는 인증이 필요하다고 뜹니다.

나는 이미 대안을 생각했습니다.sendgrid.제가 사용하기에는 너무 비쌉니다.

이견있는 사람?

도움이 되었습니까?

해결책

PHP :

를 사용하여 EC2 인스턴스에서 SendGrid를 사용한 방법은 다음과 같습니다.

  1. SendGrid 계정에 가입하십시오.전자 메일을 보내는 데 사용할 사용자 이름과 암호를 받게됩니다.또한 SendGrid는 수동으로 계정을 확인합니다 (스팸 방지 가능).
  2. Ubuntu에 PHP 컬 라이브러리를 설치하십시오 : sudo apt-get install php5-curl.
  3. 이 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 계정을 통해 이메일을 보냅니다.

  1. 아직 Gmail 계정이 없다면 먼저 Gmail 계정을 만드세요.
  2. 당신을 확인 절대적으로하지 xmail이나 postfix와 같은 동시 메일 앱이 이미 설치되어 있지 않으면 방해가 됩니다.
  3. 그런 다음 ssmtp를 설치하십시오. sudo apt-get install ssmtp
  4. 그런 다음 편집 /etc/ssmtp/ssmtp.conf (아래 참조)
  5. 그런 다음 편집 /etc/ssmtp/revaliases (아래 참조)
  6. 그런 다음 테스트하십시오. echo message content | sendmail -v test@something.com
  7. (선택 사항) 작동하지 않으면 로그를 살펴보십시오. 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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top