Avatar billede fire-fox Nybegynder
01. december 2006 - 19:39 Der er 11 kommentarer og
1 løsning

php mail ? hvordan

Hey

jeg har fået denne her laaaaaaaaaaaaaaaaaaaaaaang kode stukket i ansigtet og fik af vide den kunne afhjælpe mit problem med at user vil få deres mail igen :) har de nemli ik fået indtil vidre :)
men hvordan silvan virker det :-O

fik afvide man skulle rette mail(xxx til email(xxxx men det fatter jeg ik lige :(

/////Send mail start/////
/*
  ------------------------------------------------------------------------------
 
  Title      :    email()
  Version    :    0.9.2
  Author      :    Jason Jacques <jtjacques@users.sourceforge.net>
  URL        :    http://poss.sourceforge.net/email
 
  Description :    PHP mail() clone with build in MTA
                    Returns TRUE or FALSE depending on delivery status.

  Usage      :    email(to, subject, message [, headers [, parameters]])
                    Set $ev_verbose = TRUE in your PHP script for verbose error
                    output. See documentation for more details.
                     
  Copyright  :    2005, 2006 Jason Jacques
  License    :    MIT License
 
  Created    :    15/06/2005
  Modified    :    07/02/2006
 
  Key Updates :    * Changed to MIT License
 
                    + Fixed default DNS
                    + Removed requirement for internal str_pad() function
                    + Fixed faulty assumption of RFC 822 in address parsing
                    + Added header cleaning to prevent headers showing in
                      message
                    + Added chunk_split() as alternitive to wordwrap()
                    + Prevented time-out occuring due to DNS error
                    + Added X-Mailer: header
                    + Added Date: header
                   
                    + Fixed errors in Updates & Updated Email Address
                   
  Todo        :    - Create wordwrap() function to improve format checking on
                      PHP <= 4.0.2 installations.
                    - Investigate and impliment other applicable
                      "additional_parameters".
                   
  Notes      :    The default DNS server is 4.2.2.1 provided by Verizon via
                    Level 3 Communications, Inc. for the purpouse of testing
                    email() it is suggested that the default DNS is changed to
                    your DNS server if this script is to be utilised in a
                    production environment for both performance and [potential]
                    legal reasons.
 
  ------------------------------------------------------------------------------
  */
 
  // Set email() version
 
  $ev_version = "0.9.1";

  // Check functions have not been created before.
  if(!function_exists("email"))
  {
   
    // Main function - see documentation for useage details
    function email($to, $subject, $message, $headers="", $parameters="")
    {
      // Initialise variables to 0
      $user_no = 0; $ret_error = 0;
     
      // Import global variables
      global $ev_verbose;
     
      // Decode formatted user and sender data
      $sender  = esf_decode_param($parameters);
      $user    = esf_decode_to($to);
     
      // Clean up message data, prevent header injection
      $msg    = esf_clean_msg($message);
      $subject = esf_clean_subject($subject);
     
      // Create final message, RFC2822 complient
      $header  = esf_create_header($to, $sender, $subject, $headers);
      $msg    = esf_create_msg($header, $msg);
     
      // Send message to each user identified
      while(@$user[$user_no]['address'] != NULL)
      {
        // Send message, check return code for errors
        $errors[$user_no] = esf_send_msg($user[$user_no], $sender, $msg);
       
        // Check error
        if($errors[$user_no] > 0)
          $ret_error++;
         
        // Advance to next recipient
        $user_no++;
      }
     
      if($ev_verbose === TRUE)
        esf_verbose($user, $errors);
     
      if($ret_error == 0)
        return TRUE;
     
      //return $errors;
      return FALSE;
    }
   
    // email() support functions (esf_)

    // Decode parametes (get 'sendmail' envelope sender)
    function esf_decode_param($params)
    {
      // Import global variables
      global $HTTP_SERVER_VARS;
     
      // Check for 'sendmail' envelope sender option (-f) and extract address
      if(strpos($params, "-f") === TRUE)
      {
        $sender = substr($params, (strpos($params, "-f")+2),
                                (strpos($params, "-f") + strpos($params, " ")));
      }
      else
      {
        $sender = "feedback@" . $HTTP_SERVER_VARS['SERVER_NAME'];
      }
     
      return $sender;
    }
   
    // Seperate individual 'to' addresses
    function esf_decode_to($to)
    {
      // Initialise variables to 0
      $user_no = 0;

      // Sepeate 'to' user strings
      $to = explode(",", $to);
     
      while(@$to[$user_no] != NULL)
      {
        // Strip white space begining and end
        $to[$user_no] = trim($to[$user_no]);
       
        // Check if contains plain text name (and address in angled brackets)
        if(strpos($to[$user_no], "<") === FALSE)
        {
          // Assume email address
          $users[$user_no]['address'] = $to[$user_no];
        }
        else
        {
          // Seperate plain text name and email address
          $users[$user_no]['name']    =
                  trim(substr($to[$user_no], 0, strpos($to[$user_no], "<")));
          $users[$user_no]['address'] =
                  trim(substr($to[$user_no], strpos($to[$user_no], "<")+1, -1));
        }
       
        // Advance to next address
        $user_no++;
      }
     
      return $users;
    }
   
    // Clean up message in preperation to be sent
    function esf_clean_msg($msg)
    {
      // Convert '\r\n' into '\n' (prevent '\r\n.\r\n' error) and wordwrap
      $msg = str_replace("\r\n", "\n", $msg);
      if(function_exists("wordwrap"))
      {
        // Comply with reccomendations
        $msg = wordwrap($msg, 70, "\n");
      }
      else
      {
        // Prevent breach
        $msg = chunk_split($msg, 990, "\n");
      }
     
      return $msg;
    }
   
    // Clean up subject line (*Security related*)
    function esf_clean_subject($subject)
    {
      // Strip out '\r' and '\n' to prevent header injection
      $subject = str_replace("\r", "", str_replace("\n", "", $subject));
     
      return $subject;
    }
   
    // Create a RFC2822 complient header
    function esf_create_header($to, $sender, $subject, $header)
    {
      // Import global variables
      global $HTTP_SERVER_VARS; global $ev_version;
     
      // Clean user defined headers
      $header = trim($header);
     
      // Add 'X-Mailer:' header if missing
      if(strpos($header, "X-Mailer:") === FALSE)
        $header = "X-Mailer: POSS email() v " . $ev_version . " from " .
                          $HTTP_SERVER_VARS['SERVER_NAME'] . "\r\n" . $header;
     
      // Add 'Subject:' header if missing
      if(strpos($header, "Subject:") === FALSE)
        $header = "Subject: " . $subject . "\r\n" . $header;
     
      // Add 'From:' header if missing
      if(strpos($header, "From:") === FALSE)
        $header = "From: " . $sender . "\r\n" . $header;
     
      // Add 'To:' header if missing
      if(strpos($header, "To:") === FALSE)
        $header = "To: " . $to . "\r\n" . $header;
     
      // Add 'Date:' header if missing
      if(strpos($header, "Date:") === FALSE)
        $header = "Date: " . date("D, d M Y H:i:s O") . "\r\n" . $header;
       
      // Trim and finish header
      $header = trim($header) . "\r\n\r\n";   
     
      return $header;
    }
   
    // Create final RFC2822 compliant message
    function esf_create_msg($headers, $msg)
    {
      // Attach header to message and finalise
      $msg = $headers . $msg . "\r\n.\r\n";
     
      return $msg;
    }
   
    function esf_send_msg($to, $from, $msg)
    {
      // Initialise variables to 0
      $errors = 0;

      // Import global variables
      global $HTTP_SERVER_VARS;
     
      // Open socket connection to SMTP server
      @$rcv_server = fsockopen(esf_mxlookup($to['address']), 25,
                                                  $null, $null2, 5);
                                                       
      if(@$rcv_server)
      {
        socket_set_timeout($rcv_server, 5);
       
        // Handshake connection and prepare for message delivery
        $errors += (esf_read_response($rcv_server) * 1);
        fwrite($rcv_server, "HELO " . $HTTP_SERVER_VARS['SERVER_NAME']. "\r\n");
        $errors += (esf_read_response($rcv_server) * 2);
        fwrite($rcv_server, "MAIL FROM:<" . $from . ">\r\n");
        $errors += (esf_read_response($rcv_server) * 4);
        fwrite($rcv_server, "RCPT TO:<" . $to['address'] . ">\r\n");
        $errors += (esf_read_response($rcv_server) * 8);
        fwrite($rcv_server, "DATA\r\n");
        $errors += (esf_read_response($rcv_server) * 16);
       
        // Send message data
        fwrite($rcv_server, $msg);
        $errors += (esf_read_response($rcv_server) * 32);
       
        // Close connection
        fwrite($rcv_server, "QUIT\r\n");
        $errors += (esf_read_response($rcv_server) * 64);
        fclose($rcv_server);
      }
      else
      {
        // On connection error set all to 'Failed'
        return 127;
      }
     
      return $errors;
    }
   
    // Read response to data/command sent
    function esf_read_response($buffer)
    {
      // Get response code from the stream buffer
      $response_code = fgets($buffer);
     
      // If code's first digit is 4 or greater, and error has occured
      if((substr($response_code, 0, 1) > 3) || ($response_code == NULL))
        return 1;
     
      // Otherwise no error occured
      return 0;
    }
   
    // Give verbose output as to functions success
    function esf_verbose($address, $error)
    {
      // Initialise variables to 0
      $user_no = 0;
     
      // Write title
      echo "\r\n<p><strong>email() verbose output</strong><p>\r\n";
     
      while(@$address[$user_no]['address'] !== NULL)
      {
        // Write user email referance
        echo "<strong>User " . $user_no . " (" . $address[$user_no]['address']
                                                        . ")</strong><br>\r\n";
       
        // Convert string to sequencial 1 (error) & 0 (pass) string
        $binary = strrev(decbin($error[$user_no]));
        $binary = $binary . substr("00000000",0,8 - strlen($binary));
       
        // List results
        echo "Connect to " . esf_mxlookup($address[$user_no]['address']) . ": ";
        esf_verbose_check($binary, 0);
        echo "Sent 'HELO' command: ";
        esf_verbose_check($binary, 1);
        echo "Sent 'MAIL FROM:' command: ";
        esf_verbose_check($binary, 2);
        echo "Sent 'RCPT TO:' command: ";
        esf_verbose_check($binary, 3);
        echo "Sent 'DATA' command: ";
        esf_verbose_check($binary, 4);
        echo "Sent message content: ";
        esf_verbose_check($binary, 5);
        echo "Sent 'QUIT' command: ";
        esf_verbose_check($binary, 6);
        echo "&nbsp<br>\r\n";
       
        // Advance to next user
        $user_no++;
      }
     
      return 0;
    }
   
    // Echo status
    function esf_verbose_check($binary, $bit)
    {
        if($binary{$bit} == 1)
        {
          echo "<strong>Failed</strong><br>\r\n";
        }
        else
        {
          echo "Success<br>\r\n";
        }
       
        return 0;
    }
   
    // esf_send_msg support functions
   
    // Return one MX server address
    function esf_mxlookup($domain, $dns="4.2.2.1")
    {
      // Initialise variables
      $address_no = 0; $cur_priority=9999;
     
      // Strip user from email address if present
      if(strpos($domain, "@") !== FALSE)
        $domain = substr($domain, (strpos($domain, "@")+1));
     
      // Convert domain into RFC1035 complient DNS request
      $package = esf_mx_package_domain($domain);
     
      // Query DNS server
      $reply  = esf_mx_get_response($package, $dns);
     
      // Convert reply into address array
      $address  = esf_mx_decode_reply($reply);
     
      // Sort server with lowest priority
      while(@$address[$address_no]['address'] != NULL)
      {
        if($address[$address_no]['priority'] < $cur_priority)
        {
          $cur_priority = $address[$address_no]['priority'];
          $domain    = $address[$address_no]['address'];
        }
       
        // Advance to next address
        $address_no++;
      }
     
      return $domain;
    }
   
    // esf_mxlookup support functions (esf_mx_)
   
    // Convert domain into RFC1035 complient DNS request
    function esf_mx_package_domain($domain)
    {
      // Initialise variables to 0
      $part_no = 0; $question = NULL;
     
      // Create header see RFC1035 Section 4.1.1. for more information
      $header = chr(0) . chr(1) .
                chr(1) . chr(0) .
                chr(0) . chr(1) .
                chr(0) . chr(0) .
                chr(0) . chr(0) .
                chr(0) . chr(0) ;
     
      // Convert domain to RFC1035 message format
      $domain = explode(".", trim($domain));
      while(@$domain[$part_no] != NULL)
      {
        $question .= chr(strlen(trim($domain[$part_no])))
                                            . trim($domain[$part_no]);
       
        // Advance to next part
        $part_no++;
      }
      $question .= chr(0);
     
      // Set Question Type
      $qtype  = chr(0) . chr(15) .
                chr(0) . chr(1)  ;
     
      // Construct final packet
      $packet = $header . $question . $qtype;
     
      return $packet;
    }
   
    // Connect to and query DNS server
    function esf_mx_get_response($packet, $dns)
    {
      // Set type to UDP
      $dns = "udp://" . $dns;
     
      // Open connection to DNS server
      $dns_server = fsockopen($dns, 53);
      socket_set_timeout($dns_server, 10);
     
      // Send packet
      fwrite($dns_server, $packet);
     
      // Get 512 byte reply (maximum packet size over UDP connection)
      $reply = fread($dns_server, 512);
     
      // Close connection
      fclose($dns_server);
     
      return $reply;
    }
   
    // Decode DNS server reply - Refer to RFC1035 for explantaion
    function esf_mx_decode_reply($reply)
    {
      // Initialise variables
      $count = 0; $pointer = 16;
     
      // Read truncation bit
      $tc_bit = decbin(ord(substr($reply, 2, 1)));
     
      // Read question address
      $address[0] = esf_mx_read_domain($reply, 12);
      $pointer += $address[0]['bytes'];

      // Check number of answers
      $no_reply = ord(substr($reply, 7, 1));
     
      // If no mx server identified give domain benifit of doubt
      if($no_reply == 0)
      {
      $address[0]['priority'] = 0;
     
      return $address;
      }

      // Read replies into array
      while($count < $no_reply)
      {
        // Skip through abitary 'question' address
        $pointer_adv = esf_mx_read_domain($reply, $pointer);
        $pointer += $pointer_adv['bytes'] + 10;
       
        // Read address and priority
        $address[$count] = esf_mx_read_domain($reply, $pointer+2);
        $address[$count]['priority'] = ord(substr($reply, $pointer+1, 1));
        $pointer += $address[$count]['bytes'] + 2;
       
        // If list truncated run with what we have!
        if($tc_bit{6} == 1)
          return $address;
       
        // Advance to next reply
        $count++;
      }
     
      return $address;
    }
   
    // Read domain from labels
    function esf_mx_read_domain($reply, $pointer)
    {
      // Initialise variables
      $domain['address'] = NULL; $domain['bytes'] = 0;
     
      // Reconsruct domain
      while(ord(substr($reply, $pointer, 1)) > 0)
      {
        // Check to see if data is compressed
        if(ord(substr($reply, $pointer, 1)) > 63)
        {
          $domain['address'] .= esf_mx_uncompress($reply, ord(substr($reply,
                                                              $pointer+1, 1)));
          $domain['bytes'] += 2;
          return $domain;
        }
       
        // If uncompressed read label
        $domain['address'] .= substr($reply, $pointer+1,
                                      ord(substr($reply, $pointer, 1))) . ".";
        $domain['bytes']  += ord(substr($reply, $pointer, 1)) + 1;
        $pointer          += ord(substr($reply, $pointer, 1)) + 1;
      }
      $domain['bytes'] += 1;
     
      return $domain;
    }
   
    // Uncompress data (reuse read_domain but strip array)
    function esf_mx_uncompress($reply, $pointer)
    {
      $address = esf_mx_read_domain($reply, $pointer);
      return $address['address'];
    }
 
  }
/////Send mail end/////
Avatar billede coderdk Praktikant
01. december 2006 - 21:43 #1
Hvad med at bruge phpmailer? http://phpmailer.sf.net/ - Dokumentation er fin og den kan en masse sjove ting ;)
Avatar billede coderdk Praktikant
01. december 2006 - 21:44 #2
Hov, har du kigget på http://poss.sourceforge.net/email/ ? Der må da stå noget - Er i øvrigt ikke helt med på præcist hvad dit problem er.
Avatar billede fire-fox Nybegynder
01. december 2006 - 21:52 #3
Myyyyyyyy maaaaaaaaaaaaaaaaand Coderdk. jeg køre et system på en server som ikke sender mails ud som den skal jo min gmail modtager den find men min weebsped modtaget indtil og det skal jeg have rettet da det er en portal noget... så værgang der melder sig på siden skal jeg godkende dem da de ik får mail heller... så fik den laaang kode og fik af vide jeg skulle ligge den på serveren og til rette de steder der står mail(xxx til email(xxx
Avatar billede fire-fox Nybegynder
01. december 2006 - 21:54 #4
men hvis du kan give en forklaring ville det være værsat :) serveren / systemet skal sende en mail ud med noget info til en aktiverings link men man modtager den ik på webspeed hmmm
Avatar billede coderdk Praktikant
01. december 2006 - 21:57 #5
Der er ikke så meget at forklare :) Kig på eksemplerne: http://phpmailer.sourceforge.net/extending.html - Det er ret simpelt og let at implementere
Tutorial her: http://phpmailer.sourceforge.net/tutorial.html

:)
Avatar billede coderdk Praktikant
01. december 2006 - 21:58 #6
mht dit oprindelige spørgsmål så er det MEGET simpelt.

De beder dig om at require den fil du har fået, og bruge email() i stedet for mail()
Avatar billede fire-fox Nybegynder
01. december 2006 - 23:03 #7
hmmm har kigget på http://phpmailer.sourceforge.net/extending.html  så det vil sige sig den skal jeg så bare omskrive til det her så spille det ??? eller er jeg helt ude og skide i skovbunden ?? :D

$body = <<<EOD
You have requested a new user account on $SITENAME and you have
specified this address ($email) as user contact.

If you did not do this, please ignore this email. The person who entered your
email address had the IP address {$_SERVER["REMOTE_ADDR"]}. Please do not reply.

To confirm your user registration, you have to follow this link:



After you do this, you will be able to use your new account. If you fail to
do this, you account will be deleted within a few days. We urge you to read
the RULES and FAQ before you start using torrentbits.
EOD;
Avatar billede coderdk Praktikant
01. december 2006 - 23:44 #8
Du har nogle steder i din kode hvor du bruger mail(), ikke? Prøv til at starte med at gemme den kode du har fået i f.eks. email.inc.php, og så der hvor du bruger mail(), laver du en require("email.inc.php"); og så tilføjer du bare et "e" til mail(), så der står email() :) Det burde virke - Hvis det ikke gør, kan vi begynde at lege med phpmailer :-D
Avatar billede fire-fox Nybegynder
01. december 2006 - 23:59 #9
kan sq ik finde nogen mail() kan vi ik udveksle msn sq lidt nemmer :)
Avatar billede fire-fox Nybegynder
03. december 2006 - 01:13 #10
jeg fandt ud af det coderdk så smid et svar mester :D
Avatar billede coderdk Praktikant
03. december 2006 - 01:23 #11
cool :D
Avatar billede fire-fox Nybegynder
03. december 2006 - 07:40 #12
Ja det hjælper jo at åbne øjende og kigge i bunden af koden *LOL*
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester