Verzeichnisstruktur phpBB-2.0.0


Veröffentlicht
03.04.2002

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

      (Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

smtp.php

Zuletzt modifiziert: 09.10.2024, 12:51 - Dateigröße: 5.97 KiB


 001  <?php
 002  /***************************************************************************
 003   *                              smtp.php
 004   *                       -------------------
 005   *   begin                : Wed May 09 2001
 006   *   copyright            : (C) 2001 The phpBB Group
 007   *   email                : support@phpbb.com
 008   *
 009   *   $Id$
 010   *
 011   ***************************************************************************/
 012   
 013  /***************************************************************************
 014   *
 015   *   This program is free software; you can redistribute it and/or modify
 016   *   it under the terms of the GNU General Public License as published by
 017   *   the Free Software Foundation; either version 2 of the License, or
 018   *   (at your option) any later version.
 019   *
 020   ***************************************************************************/
 021   
 022  define('SMTP_INCLUDED', 1);
 023   
 024  //
 025  // This function has been modified as provided
 026  // by SirSir to allow multiline responses when 
 027  // using SMTP Extensions
 028  //
 029  function server_parse($socket, $response, $line = __LINE__) 
 030  {
 031      $server_response = '';
 032      while (substr($server_response, 3, 1) != ' ') 
 033      {
 034          if (!($server_response = fgets($socket, 256))) 
 035          { 
 036              message_die(GENERAL_ERROR, "Couldn't get mail server response codes", "", $line, __FILE__); 
 037          } 
 038      } 
 039   
 040      if (!(substr($server_response, 0, 3) == $response)) 
 041      { 
 042          message_die(GENERAL_ERROR, "Ran into problems sending Mail. Response: $server_response", "", $line, __FILE__); 
 043      } 
 044  }
 045   
 046  // Replacement or substitute for PHP's mail command
 047  function smtpmail($mail_to, $subject, $message, $headers = '')
 048  {
 049      global $board_config;
 050   
 051      // Fix any bare linefeeds in the message to make it RFC821 Compliant.
 052      $message = preg_replace("#(?<!\r)\n#si", "\r\n", $message);
 053   
 054      if ($headers != '')
 055      {
 056          if (is_array($headers))
 057          {
 058              if (sizeof($headers) > 1)
 059              {
 060                  $headers = join("\n", $headers);
 061              }
 062              else
 063              {
 064                  $headers = $headers[0];
 065              }
 066          }
 067          $headers = chop($headers);
 068   
 069          // Make sure there are no bare linefeeds in the headers
 070          $headers = preg_replace('#(?<!\r)\n#si', "\r\n", $headers);
 071   
 072          // Ok this is rather confusing all things considered,
 073          // but we have to grab bcc and cc headers and treat them differently
 074          // Something we really didn't take into consideration originally
 075          $header_array = explode("\r\n", $headers);
 076          @reset($header_array);
 077   
 078          $headers = '';
 079          while(list(, $header) = each($header_array))
 080          {
 081              if (preg_match('#^cc:#si', $header))
 082              {
 083                  $cc = preg_replace('#^cc:(.*)#si', '\1', $header);
 084              }
 085              else if (preg_match('#^bcc:#si', $header))
 086              {
 087                  $bcc = preg_replace('#^bcc:(.*)#si', '\1', $header);
 088                  $header = '';
 089              }
 090              $headers .= ($header != '') ? $header . "\r\n" : '';
 091          }
 092   
 093          $headers = chop($headers);
 094          $cc = explode(', ', $cc);
 095          $bcc = explode(', ', $bcc);
 096      }
 097   
 098      if (trim($subject) == '')
 099      {
 100          message_die(GENERAL_ERROR, "No email Subject specified", "", __LINE__, __FILE__);
 101      }
 102   
 103      if (trim($message) == '')
 104      {
 105          message_die(GENERAL_ERROR, "Email message was blank", "", __LINE__, __FILE__);
 106      }
 107   
 108      // Ok we have error checked as much as we can to this point let's get on
 109      // it already.
 110      if( !$socket = @fsockopen($board_config['smtp_host'], 25, $errno, $errstr, 20) )
 111      {
 112          message_die(GENERAL_ERROR, "Could not connect to smtp host : $errno : $errstr", "", __LINE__, __FILE__);
 113      }
 114   
 115      // Wait for reply
 116      server_parse($socket, "220", __LINE__);
 117   
 118      // Do we want to use AUTH?, send RFC2554 EHLO, else send RFC821 HELO
 119      // This improved as provided by SirSir to accomodate
 120      if( !empty($board_config['smtp_username']) && !empty($board_config['smtp_password']) )
 121      { 
 122          fputs($socket, "EHLO " . $board_config['smtp_host'] . "\r\n");
 123          server_parse($socket, "250", __LINE__);
 124   
 125          fputs($socket, "AUTH LOGIN\r\n");
 126          server_parse($socket, "334", __LINE__);
 127   
 128          fputs($socket, base64_encode($board_config['smtp_username']) . "\r\n");
 129          server_parse($socket, "334", __LINE__);
 130   
 131          fputs($socket, base64_encode($board_config['smtp_password']) . "\r\n");
 132          server_parse($socket, "235", __LINE__);
 133      }
 134      else
 135      {
 136          fputs($socket, "HELO " . $board_config['smtp_host'] . "\r\n");
 137          server_parse($socket, "250", __LINE__);
 138      }
 139   
 140      // From this point onward most server response codes should be 250
 141      // Specify who the mail is from....
 142      fputs($socket, "MAIL FROM: <" . $board_config['board_email'] . ">\r\n");
 143      server_parse($socket, "250", __LINE__);
 144   
 145      // Specify each user to send to and build to header.
 146      $to_header = '';
 147   
 148      // Add an additional bit of error checking to the To field.
 149      $mail_to = (trim($mail_to) == '') ? 'Undisclosed-recipients:;' : trim($mail_to);
 150      if (preg_match('#[^ ]+\@[^ ]+#', $mail_to))
 151      {
 152          fputs($socket, "RCPT TO: <$mail_to>\r\n");
 153          server_parse($socket, "250", __LINE__);
 154      }
 155   
 156      // Ok now do the CC and BCC fields...
 157      @reset($bcc);
 158      while(list(, $bcc_address) = each($bcc))
 159      {
 160          // Add an additional bit of error checking to bcc header...
 161          $bcc_address = trim($bcc_address);
 162          if (preg_match('#[^ ]+\@[^ ]+#', $bcc_address))
 163          {
 164              fputs($socket, "RCPT TO: <$bcc_address>\r\n");
 165              server_parse($socket, "250", __LINE__);
 166          }
 167      }
 168   
 169      @reset($cc);
 170      while(list(, $cc_address) = each($cc))
 171      {
 172          // Add an additional bit of error checking to cc header
 173          $cc_address = trim($cc_address);
 174          if (preg_match('#[^ ]+\@[^ ]+#', $cc_address))
 175          {
 176              fputs($socket, "RCPT TO: <$cc_address>\r\n");
 177              server_parse($socket, "250", __LINE__);
 178          }
 179      }
 180   
 181      // Ok now we tell the server we are ready to start sending data
 182      fputs($socket, "DATA\r\n");
 183   
 184      // This is the last response code we look for until the end of the message.
 185      server_parse($socket, "354", __LINE__);
 186   
 187      // Send the Subject Line...
 188      fputs($socket, "Subject: $subject\r\n");
 189   
 190      // Now the To Header.
 191      fputs($socket, "To: $mail_to\r\n");
 192   
 193      // Now any custom headers....
 194      fputs($socket, "$headers\r\n\r\n");
 195   
 196      // Ok now we are ready for the message...
 197      fputs($socket, "$message\r\n");
 198   
 199      // Ok the all the ingredients are mixed in let's cook this puppy...
 200      fputs($socket, ".\r\n");
 201      server_parse($socket, "250", __LINE__);
 202   
 203      // Now tell the server we are done and close the socket...
 204      fputs($socket, "QUIT\r\n");
 205      fclose($socket);
 206   
 207      return TRUE;
 208  }
 209   
 210  ?>