1

PHPMail을 사용하여 이메일을 보내는 PHP 스크립트를 설정하고 있습니다. "보낸 사람"주소는 Amazon의 콘솔에서 이미 확인되었으며 IAM 사용자 및 SMTP 자격 증명을 만들었습니다. 그것들을 생성 할 때 아마존은 포트 25, 465 또는 587을 사용하라고 지시합니다. Here's 아마존의 문서에있는 PHP 예제는 PHPMail을 사용하지 않지만 아이디어는 동일해야합니다. 그런 그 스크립트가 작동하지 않습니다Amazon SES SMTP가 포트 443에서만 작동하는 이유는 무엇입니까?

$mail = new PHPMailer; 

$mail->SMTPDebug = 3;        // Enable verbose debug output 
$mail->Timeout = 20; 
$mail->CharSet = 'UTF-8'; 

$mail->isSMTP();          // Set mailer to use SMTP 
$mail->Host = 'ssl://email-smtp.us-east-1.amazonaws.com'; // Specify main and backup SMTP servers 
$mail->SMTPAuth = true;        // Enable SMTP authentication 
$mail->Username = 'my_username';     // SMTP username 
$mail->Password = 'my_password';       // SMTP password 
$mail->SMTPSecure = 'tls';       // Enable TLS encryption, `ssl` also accepted 
$mail->Port = 587;         // TCP port to connect to 

$mail->setFrom('[email protected]', 'My email name'); 
$mail->addAddress('[email protected]', 'Test');  // Add a recipient 
$mail->addReplyTo('[email protected]', 'My email name'); 

$mail->isHTML(true);         // Set email format to HTML 

$mail->Subject = 'Amazon SES SMTP test with PHPMailer'; 
$mail->Body = 'This is the HTML message body <b>in bold!</b>'; 
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; 

if(!$mail->send()) { 
    echo 'Message could not be sent.'; 
    echo 'Mailer Error: ' . $mail->ErrorInfo; 
} else { 
    echo 'Message has been sent'; 
} 

, 나는 연결 시간 제한 오류 :

내 스크립트입니다. 그러나 포트를 443으로 변경하면 제대로 작동합니다. 왜 그런가요? 아마존에 의해 나열된 포트가 아니므로 지금은 작동하지만 향후 다른 문제가 발생할 수도 있음을 걱정합니다. 내가 여기서 뭔가를 놓치고 있니? 그런데 포트 465는 작동하지 않습니다.

편집 그냥 설명을 위해, 나는 그러나 왜 그들이 제안 포트 작동하지 않습니다, 이것이 내가 언급 같은 포트 443를 사용하여 작동 실현? 그게 내가 이해하려고하는 것입니다. 이 스크립트에 빠진 내용이 있습니까? 또한 "ssl : //"(예제에서 호스트가 어떻게 표시되는지) 및 제안 된 포트를 사용하여 호스트를 사전 수정하지 않고도 테스트 해 보았습니다.

+0

하하하'https : // email-smtp.us-east-1.amazonaws.com'는 실제로'220 email-smtp.amazonaws.com ESMTP SimpleEmailService'에 응답합니다. 진지하게. 그건 이해가되지 않지만 포트 443에서 TLS 래퍼를 사용하여 SMTP를 말하고있는 것 같습니다. 그래도 맞습니다 - ** 잘못된 것입니다 **. 명령 프롬프트에서,'telnet email-smtp.us-east-1.amazonaws.com 587'. SMTP 배너가 있습니까? 그렇지 않은 경우, NAT 게이트웨이/인스턴스의 보안 그룹에서 뭔가 차단하고있는 것입니다. –

답변

0

문제는 우리의 CSF 방화벽에 SMTP_BLOCK이라는 설정이 있다는 것이 었습니다. 우리는 이것을 끄고 이제는 포트 587이 잘 작동합니다 (호스트 주소에서 ssl://도 제거해야했습니다).

아마도이 문제는 향후에 동일한 문제가있는 사용자에게 도움이 될 것입니다.

0

TCP 포트 443은 SSL을 사용하는 웹 사이트에 사용되는 표준 TCP 포트입니다. 귀하의 주소는

ssl://email-smtp.us-east-1.amazonaws.com 

입니다. 제게 이것은 잘 작동합니다.

+0

포트를 사용하지 않을 이유가 있어야합니다. 내 스크립트에서 포트 587 또는 465에서 작동하지 않는 이유는 무엇입니까? 나는 "ssl : //"없이 시도했다. – Albert

+0

@ATechGuy 이것은 HTTPS가 아닌 SMTP/MSA 연결입니다. –