PHP邮件程序:服务器不接受MAIL。以下发件人地址失败

时间:2014-03-10 20:01:51

标签: php imap phpmailer

我在使用PHP Mailer发送mil时遇到问题。我尝试了两种不同的邮件服务器。对于其中一个邮件服务器,我也可以通过本地IP访问。当我使用本地IP作为$server变量的值时,工作正常并且邮件会通过。 但是,当我使用外部IP作为邮件服务器时,事情不起作用,我得到如下所示的错误。使用其他邮件服务器的DNS时也是如此。两次完全相同的错误。

$mail = new PHPMailer;
$server = 'mail.xxxx.com';
$smtpPort = '25';
$username = 'xxxx@xxxx.com';
$password = 'xxxxx';

$mail->isSMTP();                                        // Set mailer to use SMTP
$mail->Host = $server;                      // Specify main and backup server
$mail->SMTPAuth = true;                                 // Enable SMTP authentication
$mail->Username = $username;                            // SMTP username
$mail->Password = $password;                                // SMTP password    
$mail->From = 'xxxx@xxxxxx.com';
$mail->addAddress('abijeet@xxxxx.asia', 'xxxxx');           // Add a recipient

$mail->WordWrap = 50;                          // Set word wrap to 50 characters
$mail->isHTML(true);                           // Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body    = 'This is the HTML message body <b>in bold!</b>';

if(!$mail->send()) {
   echo 'Message could not be sent.';
   echo 'Mailer Error: ' . $mail->ErrorInfo;
   exit;
}

echo 'Message has been sent';

这是使用外部IP或DNS时两台服务器的PHPMailer的调试输出 -

SMTP -> FROM SERVER:220 mail.xxxxxx.com ESMTP Postfix
SMTP -> FROM SERVER: 250-mail.xxxxxx.com 250-PIPELINING 250-SIZE 15728640 250-VRFY 250-ETRN 250-STARTTLS 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN
SMTP -> FROM SERVER:
SMTP -> ERROR: MAIL not accepted from server:
Message could not be sent.Mailer Error: The following From address failed: xxx@xxxxxx.comSMTP server error: 

SMTP -> FROM SERVER:220 xxxxx.com ESMTP Citadel server ready.
SMTP -> FROM SERVER: 250-Hello localhost (xxx.xxxxx.net [xxx.xxx.xxx.xxx]) 250-HELP 250-SIZE 10485760 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250 8BITMIME
SMTP -> FROM SERVER:
SMTP -> ERROR: MAIL not accepted from server:
Message could not be sent.Mailer Error: The following From address failed: abijeet@xxxx.comSMTP server error: 

另请注意,我能够使用Windows Live Mail成功连接到基于DNS的邮件服务器,因此这不是端口问题。

3 个答案:

答案 0 :(得分:1)

如果你连接到外部IP地址,你几乎肯定会得到一个外部源地址,我怀疑它是你的情况下的动态地址。配置良好的电子邮件服务器不允许随机外部IP地址通过它们发送邮件。

解决方案是使用SMTP authentication或内部地址。

答案 1 :(得分:0)

我在网上发现这个教程从本地服务器发送邮件。

此解决方案需要sendmail.exe(一个命令行界面(CLI)可执行文件,它接受来自PHP的电子邮件,连接到SMTP服务器并发送电子邮件)。您不需要按命令使用它,不要打扰它:-)下载sendmail.zip并按照以下步骤操作:

在“C:\ wamp \”中创建名为“sendmail”的文件夹。 在“sendmail”文件夹中解压缩这4个文件:“sendmail.exe”,“libeay32.dll”,“ssleay32.dll”和“sendmail.ini”。

打开“sendmail.ini”文件并将其配置为以下

    smtp_server=smtp.gmail.com
    smtp_port=465
    smtp_ssl=ssl
    default_domain=localhost
    error_logfile=error.log
    debug_logfile=debug.log
    auth_username=[your_gmail_account_username]@gmail.com
    auth_password=[your_gmail_account_password]
    pop3_server=
    pop3_username=
    pop3_password=
    force_sender=
    force_recipient=
    hostname=localhost

您无需为这些属性指定任何值:pop3_server,pop3_username,pop3_password,force_sender,force_recipient。如果您已经发送了成功的电子邮件,则error_logfile和debug_logfile设置应保持空白,否则此文件的大小将不断增加。如果您无法使用sendmail发送电子邮件,请启用这些日志文件设置。

Enable IMAP Access in your GMail’s Settings -> Forwarding and POP/IMAP -> IMAP Access:
Enable “ssl_module” module in Apache server:
Enable “php_openssl” and “php_sockets” extensions for PHP compiler:

从“C:\ wamp \ bin \ apache \ Apache2.2.17 \ bin”打开php.ini并将其配置如下(“C:\ wamp \ bin \ php \ php5.3.x”中的php.ini “不起作用)(你只需要在下面的代码中配置最后一行,在其他行之间加上分号(;)前缀):

[mail function]
; For Win32 only.
; http://php.net/smtp
;SMTP = 
; http://php.net/smtp-port
;smtp_port = 25

; For Win32 only.
; http://php.net/sendmail-from
;sendmail_from = you@domain.com

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
sendmail_path = "C:\wamp\sendmail\sendmail.exe -t -i"

重启WAMP服务器。 创建一个PHP文件并在其中编写以下代码:

<?php
$to       = 'recipient@yahoo.com';
$subject  = 'Testing sendmail.exe';
$message  = 'Hi, you just received an email using sendmail!';
$headers  = 'From: sender@gmail.com' . "\r\n" .
            'Reply-To: sender@gmail.com' . "\r\n" .
            'MIME-Version: 1.0' . "\r\n" .
            'Content-type: text/html; charset=iso-8859-1' . "\r\n" .
            'X-Mailer: PHP/' . phpversion();
if(mail($to, $subject, $message, $headers))
    echo "Email sent";
else
    echo "Email sending failed";
?>

在$ to和$ headers变量中进行适当的更改,以设置收件人,发件人和回复地址。将其另存为“send-mail.php”。 (您可以将它保存在“C:\ wamp \ www”中的任何子文件夹中。)

答案 2 :(得分:0)

我更新了PHP邮件程序的版本,现在似乎正在运行。不需要对代码进行任何更改。正在使用的旧版本是 5.1 。当前版本 5.2.7