我试图通过PHPMailer库在PHP脚本中发送邮件。 以下代码已成功发送过去的电子邮件,并且没有任何警告:
function mail_attachment($filename, $path, $mailto, $subject, $message) { include("PHPMailer_5.2.3/class.phpmailer.php"); include("PHPMailer_5.2.3/class.smtp.php"); $email_config = parse_ini_file('email.cfg'); $from = $email_config['sender']; $alias = $email_config['alias' ]; $smtp = $email_config['host' ]; $port = $email_config['port' ]; $mail = new PHPMailer(); $mail->SMTPDebug = 2; $mail->IsHTML(false); // send as HTML? $mail->WordWrap = 50; // set word wrap $mail->IsSMTP(); $mail->Host = $smtp; // set the host SMTP server $mail->Port = $port; // set the host SMTP port $mail->Subject = $subject; $mail->Body = $message; $mail->SetFrom( $from, $alias); $mail->AddReplyTo($from, $alias); $mail->AddAddress($mailto); $mail->AddAttachment($path, $filename); var_dump( $email_config ); $sent = $mail->Send(); if(!$sent) echo "Mailer Error: " . $mail->ErrorInfo ."\n"; else echo "Message has been sent\n"; return $sent; }
突然,自动报告电子邮件停止显示在人们的收件箱中,并生成了以下消息:
SMTP -> FROM SERVER:220 relay-8.dlfw.twtelecom.net ESMTP Postfix <br />SMTP -> FROM SERVER: 250-relay-8.dlfw.twtelecom.net 250-PIPELINING 250-SIZE 25600000 250-VRFY 250-ETRN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN <br />SMTP -> FROM SERVER:250 2.1.0 Ok <br />SMTP -> FROM SERVER:554 5.7.1 <localhost.localdomain>: Helo command rejected: Impossible, I am localhost <br />SMTP -> ERROR: RCPT not accepted from server: 554 5.7.1 <localhost.localdomain>: Helo command rejected: Impossible, I am localhost <br />SMTP Error: The following recipients failed: [email protected] Mailer Error: SMTP Error: The following recipients failed: [email protected]<p>SMTP server error: 5.7.1 <localhost.localdomain>: Helo command rejected: Impossible, I am localhost </p> Mail Was NOT Successfully Sent!
你有什么想法,为什么代码停止工作?
是我的问题或远程邮件服务器上的问题?
我有以下主机名configuration:
在/ etc /主机名
Dev07
/ etc / hosts文件
127.0.0.1 localhost 127.0.1.1 lamp #Required for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts
这似乎是远程服务器不喜欢的事实,你的服务器报告,它是您所发送的HELO localhost.localdomain 。
这可能是由于远程服务器configuration其SMTP服务拒绝无效的HELO 。 在本地服务器上更改某些内容也可能会导致主机名不再正确configuration。
我build议设置你的主机名 ,以便sendmail不报告为localhost.localdomain 。 而在这种情况下,使用服务器的IP地址,FQDN和主机名来更新/etc/hosts也是一个好主意。
这里有一个关于如何做的教程。
/etc/hostname: hostname.domain.tld /etc/hosts: 127.0.0.1 localhost localhost.localdomain ::1 localhost localhost.localdomain 1.2.3.4 hostname.domain.tld hostname
如果您有基于RedHat / CentOS的系统,请编辑/etc/sysconfig/network并设置:
HOSTNAME=hostname.domain.tld