Как я могу получить рассылки Phpmailer для отправки сообщения с обратным путем в другой домен - PullRequest
0 голосов
/ 25 августа 2011

Я использую стороннюю службу SMTP для отправки своих информационных бюллетеней.Из-за этого мой интернет-провайдер не принимает отказов, потому что они приходят из электронной почты, не с ними.Хорошо.Поэтому я настроил почтовый ящик с моей службой SMTP для приема отказов.

Однако моя программа списков рассылки отказывается отправлять электронные письма, чей обратный путь имеет домен, отличный от поля from.

Я полагаю, что это вызвано phpmailer в его процедуре отправки почты:

Код ключа, по-видимому, таков, но я не настолько разбираюсь в 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 ]

1 голос
/ 25 августа 2011

@ Комментарий Санмая заставил меня взглянуть на параметры. Когда я начал тестировать некоторые из них в процедуре phpmailer, я обнаружил, что код не был выполнен. Поэтому, по крайней мере, он помог мне понять, что проблема в другом месте.

У меня все еще есть проблема. Я сейчас попробую лучше его изолировать. Тогда, возможно, я смогу решить эту проблему, а если нет, я изменю этот вопрос и попробую еще раз.

Спасибо, что дали мне кое-что для продолжения.

0 голосов
/ 25 августа 2011

Какую ошибку вы получаете?Возможно, используемый вами почтовый сервер не позволяет использовать разные домены обратного адреса, чтобы предотвратить использование их службы для рассылки спама.

...