
Configuré postfix en CentOS e intenté configurar phpmailer con autenticación smtp.
PHPMailersolo funcionarási pongo 0.0.0.0/0 debajomis redesen postfix main.conf
mynetworks = 127.0.0.0/8, [::ffff:127.0.0.0]/104, [::1]/128, 0.0.0.0/0
Pero en este hilo (¿Cómo configuro PostFix para permitir que otras máquinas envíen correos electrónicos a través de él?) Alguien dijoNo pongas 0.0.0.0/0 en mynetworks ya que puede causar problemas de spam, etc.
¿Alguien puede aconsejarme qué debo hacer para mantener mi servidor libre de problemas de spam y también para que funcione phpmailer?
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
myhostname = example.com
mydomain = example.com
myorigin = /etc/mailname
inet_interfaces = all
inet_protocols = all
mydestination = localhost.localdomain localhost $mydomain
virtual_alias_maps = hash:/etc/postfix/virtual
unknown_local_recipient_reject_code = 550
mynetworks = 127.0.0.0/8, [::ffff:127.0.0.0]/104, [::1]/128, 0.0.0.0/0
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, permit
relayhost =
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/postfix/virtual
mailbox_size_limit = 0
recipient_delimiter = +
home_mailbox = Maildir/
smtpd_use_tls = yes
#smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/pki/tls/private/my.key
smtpd_tls_cert_file = /etc/pki/tls/certs/my.crt
smtpd_tls_CAfile = /etc/pki/tls/certs/my.ca-bundle
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
#smtpd_tls_protocols = !SSLv2, !SSLv3
smtpd_tls_security_level = may
#SASL SMTP Authentication
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_authenticated_header = yes
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.6.6/samples
readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES
si elimino 0.0.0.0/0 y mantengo solo mynetworks = 127.0.0.0/8, [::ffff:127.0.0.0]/104, [::1]/128
phpmailer dice que no puede enviar correo.
depuración de phpmailer...
2014-11-23 04:57:10 SERVER -> CLIENT: 220 myhost.com ESMTP Postfix
2014-11-23 04:57:10 CLIENT -> SERVER: EHLO www.myhost.com
2014-11-23 04:57:10 SERVER -> CLIENT: 250-myhost.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
2014-11-23 04:57:10 CLIENT -> SERVER: AUTH LOGIN
2014-11-23 04:57:10 SERVER -> CLIENT: 334 VXNlcm5hbWU6
2014-11-23 04:57:10 CLIENT -> SERVER: XXXX
2014-11-23 04:57:10 SERVER -> CLIENT: 334 UGFzc3dvcmQ6
2014-11-23 04:57:10 CLIENT -> SERVER: XXXX
2014-11-23 04:57:10 SERVER -> CLIENT: 235 2.7.0 Authentication successful
2014-11-23 04:57:10 CLIENT -> SERVER: MAIL FROM: [email protected]
2014-11-23 04:57:10 SERVER -> CLIENT: 250 2.1.0 Ok
2014-11-23 04:57:10 CLIENT -> SERVER: RCPT TO: [email protected]
2014-11-23 04:57:10 SERVER -> CLIENT: 554 5.7.1 :Relay access denied
2014-11-23 04:57:10 SMTP ERROR: RCPT TO command failed: 554 5.7.1 : Relay access denied
2014-11-23 04:57:10 CLIENT -> SERVER: QUIT
2014-11-23 04:57:10 SERVER -> CLIENT: 221 2.0.0 Bye
2014-11-23 04:57:10 SMTP Error: The following recipients failed: [email protected] Mailer Error: SMTP Error: The following recipients failed: [email protected]
y registro de errores de postfix
myhost postfix/smtpd[8272]: connect from myhost.com[168.x.x.x]
myhost postfix/smtpd[8272]: NOQUEUE: reject: RCPT from myhost.com[168.x.x.x]:
554 5.7.1 <[email protected]>: Relay access denied; from=<[email protected]>
to=<[email protected]> proto=ESMTP helo=<www.myhost.com>Nov 22 23:57:10 myhost
postfix/smtpd[8272]: disconnect from myhost.com[168.x.x.x]
Configuración del correo php (solo he cambiado el índice del correo php. Los demás archivos se mantienen como están/sin modificar)
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>PHPMailer - SMTP email test</title>
</head>
<body>
<?php
//SMTP needs accurate times, and the PHP time zone MUST be set
//This should be done in your php.ini, but this is how to do it if you don't have access to that
date_default_timezone_set('Etc/UTC');
require 'PHPMailerAutoload.php';
//Create a new PHPMailer instance
$mail = new PHPMailer();
$mail->isSMTP();
$host = "myhost.com";
$username = "ara";
$password = "ara";
$Port = 25;
$mail->FromName = "Mail from gottsf3 ";
$mail->From = "[email protected]";
$mail->Host = $host;
$mail->Port = $Port;
//$mail->SMTPSecure = 'tls'; //optional
$mail->SMTPAuth = true;
$mail->Username = $username;
$mail->Password = $password;
$mail->AddAddress("[email protected]");
$mail->Subject = 'gottsf3PHPMailer - SMTP email test';
$mail->Body = 'This is a plain-text message body';
$mail->SMTPDebug = 2;
//send the message, check for errors
if (!$mail->send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}
?>
</body>
</html>
Respuesta1
Debería configurar phpmailer para conectarse localhost
, no al nombre de host de la máquina (que luego usará su dirección IP externa para conectarse).
Localhost puede retransmitir correo a través de postfix mediante mynetworks
, pero cuando se conecta con el nombre de host es a través de la dirección IP pública, que no puede retransmitir.
Respuesta2
Podría solucionarlo agregando lo siguiente en postfix /etc/postfix/master.cf
.
smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination
El acceso de retransmisión denegado no es solo para PHPmailer... es para cualquier cliente Outlook, Thunderbird, etc. Poner localhost es una solución alternativa, no una solución completa... por ejemplo, cuando PHPmailer/servidor web es un servidor diferente, que está aislado del correo electrónico postfix. servidor no puedes poner localhost..
Más información sobre smtpd_recipient_restrictions, por favor descarte esto https://stackoverflow.com/questions/18318789/linux-postfix-dovecot-554-relay-access-denied