0

我正在使用第 3 方 SMTP 服务来发送我的时事通讯。正因为如此,我的 ISP 不接受退回邮件,因为它们来自不是来自他们的电子邮件。好的。所以我用我的 SMTP 服务设置了一个邮箱来接受退回邮件。

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

我相信这是由 phpmailer 在它的邮件发送例程中引起的:

关键代码似乎是这样,但我不是 PHP 专家,无法弄清楚如何绕过它正在执行的任何检查,我认为这与安全模式有关。我要使用的返回路径值在变量中:$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; 
  }

有谁知道这段代码中的什么阻止我使用不同的域作为我的返回路径,或者更好的是,有没有人知道我可以如何修复(或破解)它以便发送我的邮件?

4

2 回答 2

1

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

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

谢谢你给了我一些东西。

于 2011-08-25T02:42:05.683 回答
0

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

于 2011-08-25T00:44:54.850 回答