PHPMailer上的ValidateAddress行为很奇怪

时间:2011-10-17 16:59:05

标签: php phpmailer

我正在使用PHPMailer和$ mail-> Send()返回错误,我的问题是当我在$ mail-> SetFrom()中使用此电子邮件字符串“noreply@pleasenoreply.com”时,但是另一方面,它几乎可以与任何其他电子邮件一起使用,即“hello@hello.com”。

调试代码后,我发现问题出在文件class.phpmailer.php上的函数ValidateAddress()上。似乎电子邮件“noreply@pleasenoreply.com”无法通过FILTER_VALIDATE_EMAIL和preg_match

生效

PHPMailer - class.phpmailer.php - 第550行:

  public static function ValidateAddress($address) {
    if (function_exists('filter_var')) { //Introduced in PHP 5.2
      if(filter_var($address, FILTER_VALIDATE_EMAIL) === FALSE) {
        return false;
      } else {
        return true;
      }
    } else {
      return preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $address);
    }
  }

为什么会这样?有没有人知道发生了什么?为什么这封电子邮件“noreply@pleasenoreply.com”不被允许?

1 个答案:

答案 0 :(得分:1)

  

我的问题是当我在$ mail-> SetFrom()

中使用此电子邮件字符串“noreply@pleasenoreply.com”时

我不知道为什么特定的地址被拒绝而其他地址不被拒绝,但一般来说,您不仅需要指定有效的电子邮件地址作为发件人地址,还需要在您发送邮件的邮件服务器上处理。

否则,发送服务器将拒绝发送,或者接收服务器很可能将该邮件丢弃为垃圾邮件。

通常的政策是指定noreply@yourdomain.com(yourdomain.com是您的网站域名)。在某些服务器上,您需要实际设置允许从其发送邮件的地址。