STARTTLS가 있는 SMTP가 제대로 작동하지 않습니다(접미사).

STARTTLS가 있는 SMTP가 제대로 작동하지 않습니다(접미사).

내가 사용할 때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하고 연결 매개변수를 사람이 읽을 수 있는 방식으로 표시할 수도 있습니다)

관련 정보