dovecot sasl 및 TLS를 사용하여 postfix 서버를 설치했습니다. PHP 코드에서 메일을 보내려고 할 때 문제가 발생합니다. 로그인 인증 유형을 "smtp"로 사용하면 서버가 자격 증명 없이 연결을 수락합니다. 이를 "로그인"으로 변경하면 서버는 내 자격 증명을 확인하고 사용자 또는 비밀번호가 잘못된 경우 경고합니다.
SMTP 인증이란 무엇이며 인증된 사용자만 허용하도록 postfix를 구성하는 방법은 무엇입니까?
내 main.cf 파일의 관련 코드
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_local_domain =
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtp_tls_note_starttls_offer = yes
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
virtual_alias_domains = $mydomain
virtual_alias_maps = hash:/etc/postfix/virtual
zend mail 비밀번호가 틀리거나 비밀번호가 틀리더라도 메일을 보낼 수 있는 PHP 코드의 일부입니다.
$options = new SmtpOptions([
'host' => 'mail.host.com',
'port' => '25',
'connection_class' => 'smtp',
'connection_config' => [
'username' => 'user',
'password' => 'bad-password',
'ssl' => 'tls'
]
]);
답변1
다음 이메일 스크립트는 SMTP 인증을 사용하여 PHP 이메일을 보내는 데 사용됩니다. SMTP 인증으로 이메일을 보내려면 포트 465 또는 587을 사용해야 합니다.
SMTP 기본 포트는 포트 25입니다. 포트 25를 사용하면 SMTP 인증 없이 서버에서 이메일을 보낸다는 의미입니다.
여기에서 phpmailer를 다운로드하세요https://github.com/PHPMailer/PHPMailer그런 다음 아래 인코딩을 사용하십시오.
<?php
require_once "vendor/autoload.php";
$mail = new PHPMailer;
//Enable SMTP debugging.
$mail->SMTPDebug = 3;
//Set PHPMailer to use SMTP.
$mail->isSMTP();
//Set SMTP host name
$mail->Host = "smtp.gmail.com";
//Set this to true if SMTP host requires authentication to send email
$mail->SMTPAuth = true;
//Provide username and password
$mail->Username = "[email protected]";
$mail->Password = "super_secret_password";
//If SMTP requires TLS encryption then set it
$mail->SMTPSecure = "tls";
//Set TCP port to connect to
$mail->Port = 587;
$mail->From = "[email protected]";
$mail->FromName = "Full Name";
$mail->addAddress("[email protected]", "Recepient Name");
$mail->isHTML(true);
$mail->Subject = "Subject Text";
$mail->Body = "<i>Mail body in HTML</i>";
$mail->AltBody = "This is the plain text version of the email content";
if(!$mail->send())
{
echo "Mailer Error: " . $mail->ErrorInfo;
}
else
{
echo "Message has been sent successfully";
}