..png)
내가 사용할 때PHP메일러Postfix를 통해 메일을 보내려면 다음과 같이 수정한 기본 구성을 사용합니다.
# SMTP from other servers to yours
smtpd_tls_key_file = /etc/postfix/myletsencryptcert.key
smtpd_tls_cert_file = /etc/postfix/myletsencryptcert.crt
smtpd_tls_CAfile = /etc/postfix/myletsencryptcert.crt
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3
smtpd_tls_protocols=!SSLv2,!SSLv3
smtpd_tls_loglevel = 1
smtpd_tls_session_cache_database =
btree:/var/lib/postfix/smtpd_tls_session_cache
이 구성을 사용하고 실행하면PHP메일러, 명령을 내린 직후에 연결 실패라고 표시됩니다 STARTTLS
. 나의PHP메일러구성은
$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->Host = 'localhost';
//$mail->SMTPAuth = true;
$mail->Username = '[email protected]';
//$mail->Password = 'passwordwhichissecretobviously';
$mail->SMTPSecure = 'tls';
$mail->Port = 25;
$mail->SMTPAutoTLS = false;
$mail->setFrom("[email protected]", "Some person");
$mail->addAddress("[email protected]");
$mail->isHTML(true);
$mail->Subject = "Web Development";
$mail->Body = "
Some random HTML message
";
$mail->AltBody = "some normal message without HTML";
$mail->XMailer = "0";
$mail->CharSet = 'UTF-8';
$mail->Encoding = 'base64';
$mail->DKIM_domain = 'example.com';
$mail->DKIM_private = '/right/path/to/dkimkey/which/works/properly/dkim.key';
$mail->DKIM_selector = 'default';
$mail->DKIM_passphrase = '';
$mail->DKIM_identity = $mail->From;
$mail->DKIM_copyHeaderFields = false;
그리고 텔넷을 써서 해도 STARTTLS 명령을 실행하고 나면 뜹니다.
나는 이것을 사용하면 다음과 같은 메일을 보낼 수 있다는 것을 알았습니다.PHP메일러:
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer_name' => false
)
);
하지만 그건 보안 문제가 될 것 같아요. 이 일을 또 어떻게 할 수 있나요?
답변1
피어 이름 확인은 피어 이름이 알려진 경우에만 작동합니다.
서버 이름을 Host
.
// this is a name not mentioned in the cert
$mail->Host = 'localhost';
// better: a full domain name
$mail->Host = 'mx8.mydomain.example';
메일 서버 이름에 대한 인증서가 있어야 합니다. 인증서에 있는 해당 이름을 비교하는 것만으로는 localhost
인증서가 적절한지 판단하기에 충분하지 않습니다. 인증서를 확인하려는 모든 메일 클라이언트 또는 테스트 도구는 비교 대상 이름을 알아야 합니다.
니트픽:SMTPSecure 값에는 const 변수(문자열)의 값이 포함되어 있습니다. 설명서를 살펴보지 않으면 값 자체가 의미를 설명하지 않으므로 "tls"
이름( )을 사용하십시오 .PHPMailer::ENCRYPTION_STARTTLS
에 대한텔넷: 다음과 같은 간단한 테스트 도구를 사용합니다.텔넷문제를 파악하는 데는 좋은 선택이지만 telnet
여기서는 사용할 수 없습니다. 이 프로그램은 (일반적으로) TLS 암호화를 인식하지 못합니다. 나는 다음과 같은 유틸리티를 사용하고 싶습니다.openssl대신에:
openssl s_client -connect hostname:25 -starttls smtp
(예, 철자를 입력 STARTTLS
하고 연결 매개변수를 사람이 읽을 수 있는 방식으로 표시할 수도 있습니다)