如何让Phpmailer邮件发送带有返回路径到另一个域的邮件

时间:2011-08-25 00:32:21

标签: php phpmailer safe-mode return-path

我正在使用第三方SMTP服务发送我的简报。因此,我的ISP不接受退回,因为它们来自不是源自它们的电子邮件。好的。因此,我使用SMTP服务设置邮箱以接受退回。

但是,我的邮件列表程序拒绝发送返回路径与from字段不同的域的电子邮件。

我相信这是由phpmailer在它的mailsend例程中引起的:

关键代码似乎就是这样,但我不是那么多用PHP的专家来弄清楚如何绕过它做的任何检查,我认为这与safe_mode有关。我想要使​​用的返回路径值在变量中:$ this-> Sender

  /** 
   * Sends mail using the PHP mail() function. 
   * @param string $header The message headers 
   * @param string $body The message body 
   * @access protected 
   * @return bool 
   */ 
  protected function MailSend($header, $body) { 
    $toArr = array(); 
    foreach($this->to as $t) { 
      $toArr[] = $this->AddrFormat($t); 
    } 
    $to = implode(', ', $toArr); 
    $params = sprintf("-oi -f %s", $this->Sender); 
    if ($this->Sender != '' && strlen(ini_get('safe_mode'))< 1) { 
      $old_from = ini_get('sendmail_from'); 
      ini_set('sendmail_from', $this->Sender); 
      if ($this->SingleTo === true && count($toArr) > 1) { 
        foreach ($toArr as $key => $val) { 
          $rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params);
           // implement call back function if it exists 
          $isSent = ($rt == 1) ? 1 : 0; 
          $this->doCallback($isSent,$val,$this->cc,$this->bcc,$this->Subject,$ body);
         } 
      } else { 
        $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params);
         // implement call back function if it exists 
        $isSent = ($rt == 1) ? 1 : 0; 
        $this->doCallback($isSent,$to,$this->cc,$this->bcc,$this->Subject,$b ody);
       } 
    } else { 
      if ($this->SingleTo === true && count($toArr) > 1) { 
        foreach ($toArr as $key => $val) { 
          $rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params);
           // implement call back function if it exists 
          $isSent = ($rt == 1) ? 1 : 0; 
          $this->doCallback($isSent,$val,$this->cc,$this->bcc,$this->Subject,$ body);
         } 
      } else { 
        $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header);
         // implement call back function if it exists 
        $isSent = ($rt == 1) ? 1 : 0; 
        $this->doCallback($isSent,$to,$this->cc,$this->bcc,$this->Subject,$b ody);
       } 
    } 
    if (isset($old_from)) { 
      ini_set('sendmail_from', $old_from); 
    } 
    if(!$rt) { 
      throw new phpmailerException($this->Lang('instantiate'), self::STOP_CRITICAL);
     } 
    return true; 
  }

是否有人知道此代码中的内容阻止我为返回路径使用不同的域,或者更好的是,是否有人知道我如何修复(或破解)这样它会发送我的邮件?

2 个答案:

答案 0 :(得分:1)

@ Sanmai的评论让我看了参数。当我开始在phpmailer例程中测试其中一些时,我发现代码没有被执行。所以至少他帮我意识到问题在其他地方。

我还有问题。我现在试着更好地隔离它。那么也许我可以解决它,如果没有,我会修改这个问题再试一次。

感谢您给我一些信息。

答案 1 :(得分:0)

你得到什么错误?可能是您使用的邮件服务器不允许使用不同的返回地址域来阻止其服务用于发送垃圾邮件。