50 require_once 
'Net/SMTP.php';
 
  150         'not_connected' => array(
 
  152             'msg'   => 
'Could not connect to any mail server ({HOST}) at port {PORT} to send mail to {RCPT}.' 
  154         'failed_vrfy_rcpt' => array(
 
  156             'msg'   => 
'Recipient "{RCPT}" could not be veryfied.' 
  158         'failed_set_from' => array(
 
  160             'msg'   => 
'Failed to set sender: {FROM}.' 
  162         'failed_set_rcpt' => array(
 
  164             'msg'   => 
'Failed to set recipient: {RCPT}.' 
  166         'failed_send_data' => array(
 
  168             'msg'   => 
'Failed to send mail to: {RCPT}.' 
  172             'msg'   => 
'No from address has be provided.' 
  174         'send_data' => array(
 
  176             'msg'   => 
'Failed to create Net_SMTP object.' 
  180             'msg'   => 
'No MX-record for {RCPT} found.' 
  182         'no_resolver' => array(
 
  184             'msg'   => 
'Could not start resolver! Install PEAR:Net_DNS or switch off "netdns"' 
  186         'failed_rset' => array(
 
  188             'msg'   => 
'RSET command failed, SMTP-connection corrupt.' 
  216         if (isset($params[
'mailname'])) {
 
  217             $this->mailname = $params[
'mailname'];
 
  220             if (function_exists(
'posix_uname')) {
 
  221                 $uname = posix_uname();
 
  222                 $this->mailname = $uname[
'nodename'];
 
  227         if (isset($params[
'port'])) {
 
  228             $this->_port = $params[
'port'];
 
  230             $this->_port = getservbyname(
'smtp', 
'tcp');
 
  233         if (isset($params[
'timeout'])) $this->timeout = $params[
'timeout'];
 
  234         if (isset($params[
'verp'])) $this->verp = $params[
'verp'];
 
  235         if (isset($params[
'test'])) $this->test = $params[
'test'];
 
  236         if (isset($params[
'peardebug'])) $this->test = $params[
'peardebug'];
 
  237         if (isset($params[
'netdns'])) $this->withNetDns = $params[
'netdns'];
 
  250         register_shutdown_function(array(&$this, 
'__destruct'));
 
  259         if (is_object($this->_smtp)) {
 
  260             $this->_smtp->disconnect();
 
  274     function send($recipients, $headers, $body)
 
  276         if (!is_array($headers)) {
 
  281         if (is_a(
$result, 
'PEAR_Error')) {
 
  287         if (is_a($headerElements, 
'PEAR_Error')) {
 
  288             return $headerElements;
 
  290         list($from, $textHeaders) = $headerElements;
 
  293         if (!empty($headers[
'Return-Path'])) {
 
  294             $from = $headers[
'Return-Path'];
 
  302         if (is_a($recipients, 
'PEAR_Error')) {
 
  306         foreach ($recipients as $rcpt) {
 
  307             list(
$user, $host) = explode(
'@', $rcpt);
 
  309             $mx = $this->
_getMx($host);
 
  310             if (is_a($mx, 
'PEAR_Error')) {
 
  315                 $info = array(
'rcpt' => $rcpt);
 
  320             foreach ($mx as $mserver => $mpriority) {
 
  321                 $this->_smtp = 
new Net_SMTP($mserver, $this->port, $this->mailname);
 
  325                     $this->_smtp->setDebug(
true);
 
  329                 $res = $this->_smtp->connect($this->timeout);
 
  330                 if (is_a(
$res, 
'PEAR_Error')) {
 
  344                     'host' => implode(
', ', array_keys($mx)),
 
  345                     'port' => $this->port,
 
  353                 $res = $this->_smtp->vrfy($rcpt);
 
  354                 if (is_a(
$res, 
'PEAR_Error')) {
 
  355                     $info = array(
'rcpt' => $rcpt);
 
  356                     return $this->
_raiseError(
'failed_vrfy_rcpt', $info);
 
  362             $res = $this->_smtp->mailFrom($from, $args);
 
  363             if (is_a(
$res, 
'PEAR_Error')) {
 
  364                 $info = array(
'from' => $from);
 
  365                 return $this->
_raiseError(
'failed_set_from', $info);
 
  369             $res = $this->_smtp->rcptTo($rcpt);
 
  370             if (is_a(
$res, 
'PEAR_Error')) {
 
  371                 $info = array(
'rcpt' => $rcpt);
 
  372                 return $this->
_raiseError(
'failed_set_rcpt', $info);
 
  377                 $result = $this->_smtp->rset();
 
  378                 $res = $this->_smtp->rset();
 
  379                 if (is_a(
$res, 
'PEAR_Error')) {
 
  383                 $this->_smtp->disconnect();
 
  389             $res = $this->_smtp->data(
"$textHeaders\r\n$body");
 
  390             if (is_a(
$res, 
'PEAR_Error')) {
 
  391                 $info = array(
'rcpt' => $rcpt);
 
  392                 return $this->
_raiseError(
'failed_send_data', $info);
 
  395             $this->_smtp->disconnect();
 
  415         if ($this->withNetDns) {
 
  417             if (is_a(
$res, 
'PEAR_Error')) {
 
  421             $response = $this->resolver->query($host, 
'MX');
 
  426             foreach ($response->answer as $rr) {
 
  427                 if ($rr->type == 
'MX') {
 
  428                     $mx[$rr->exchange] = $rr->preference;
 
  435             if (!getmxrr($host, $mxHost, $mxWeight)) {
 
  438             for ($i = 0; $i < count($mxHost); ++$i) {
 
  439                 $mx[$mxHost[$i]] = $mxWeight[$i];
 
  455         if (is_object($this->resolver)) {
 
  459         if (!include_once 
'Net/DNS.php') {
 
  463         $this->resolver = 
new Net_DNS_Resolver();
 
  465             $this->resolver->test = 1;
 
  483         $code = $this->errorCode[$id][
'code'];
 
  484         $msg = $this->errorCode[$id][
'msg'];
 
  491             foreach ($info as $key => $value) {
 
  492                 array_push($search, 
'{' . strtoupper($key) . 
'}');
 
  493                 array_push($replace, $value);
 
  496             $msg = str_replace($search, $replace, $msg);