sendmail con php

      • 628
      • mensajes
      • miembro desde
      • 20/02/02
    02/04/2002
    #1 sendmail con php

    hola yo pongo esto:

    mail("detino@mail.com", "d","sad");
    ?>

    y me da error.

    tengo el Apache 1.3.12 para win98

  1. ¿Este tema te pareció interesante? Compártelo!

    ¿No es lo que buscabas? Intenta buscar un tema similar

    6 comentarios / 28398 Visitas

      • 193
      • mensajes
      • miembro desde
      • 12/02/01
    03/04/2002
    #2

    guidoji, seguro el error que te da es que "no se pudo conectar".

    Pasa que PHP está configurado por defecto para enviar mails con un SMTP localizado en "localhost", pero como Win no tiene ningún server SMTP, entonces da error.

    Mi consejo, es que podés hacer dos cosas, o cambiar el SMTP de tu php.ini para que envie los mails a través de un SMTP externo, o podés bajarte un server SMTP para tu maquina y dejar el php.ini como está, y mandar los mails desde tu máquina.

    Saludos.

    • PoetaCamba
      Invitado
    03/04/2002
    #3

    muy bueno, eso no lo sabia.
    Gracias por el TIP

      • 628
      • mensajes
      • miembro desde
      • 20/02/02
    03/04/2002
    #4

    hice lo que me dijiste ocn el php.ini pero me tira
    "Warning: Server Error in C:\WINDOWS\Escritorio\index.php on line 2"

    yo puse ocmo SMTP: smtp.mail.yahoo.com

    pero donde ponfgo el nombre de usuario y la pass.. sino de donde sabe desde onde manaRR

    • PoetaCamba
      Invitado
    03/04/2002
    #5

    SMTP no necesita password.

    Algunos de los servers SMTP, los de los ISPs, droppean tu peticion si no estas usando sus servicios

      • 193
      • mensajes
      • miembro desde
      • 12/02/01
    04/04/2002
    #6

    Lo que sucede... es que a veces los SMTP te piden User y Pass, para hacer un login primero al POP3, después de esto, te dan unos 15 minutos para que puedas mandar mails desde tu cuenta con tu SMTP, y luego te vuelve a pedir contraseña de nuevo.

    en todo caso, probá com smtp.eqquinox.com que creo que no necesita autenticación.

      • 8,950
      • mensajes
      • miembro desde
      • 25/09/01
    04/04/2002
    #7

    El PHP.ini es el que tiene que se usa con el SMTP, si la funcion mail(); en PHP esta desactivada hay que rebuscarselas :
    class.smtp.inc

    Código PHP:
        define('SMTP_STATUS_NOT_CONNECTED'1TRUE);
        
    define('SMTP_STATUS_CONNECTED'2TRUE);

        class 
    smtp{

            var 
    $authenticated;
            var 
    $connection;
            var 
    $recipients;
            var 
    $headers;
            var 
    $timeout;
            var 
    $errors;
            var 
    $status;
            var 
    $body;
            var 
    $from;
            var 
    $host;
            var 
    $port;
            var 
    $helo;
            var 
    $auth;
            var 
    $user;
            var 
    $pass;

            
    /***************************************
            ** Constructor function. Arguments:
            ** $params - An assoc array of parameters:
            **
            **   host    - The hostname of the smtp server        Default: localhost
            **   port    - The port the smtp server runs on        Default: 25
            **   helo    - What to send as the HELO command        Default: localhost
            **             (typically the hostname of the
            **             machine this script runs on)
            **   auth    - Whether to use basic authentication    Default: FALSE
            **   user    - Username for authentication            Default: 
            **   pass    - Password for authentication            Default: 
            **   timeout - The timeout in seconds for the call    Default: 5
            **             to fsockopen()
            ***************************************/

            
    function smtp($params = array()){

                if(!
    defined('CRLF'))
                    
    define('CRLF'"\r\n"TRUE);

                
    $this->authenticated    FALSE;            
                
    $this->timeout            5;
                
    $this->status            SMTP_STATUS_NOT_CONNECTED;
                
    $this->host                'localhost';
                
    $this->port                25;
                
    $this->helo                'localhost';
                
    $this->auth                FALSE;
                
    $this->user                '';
                
    $this->pass                '';
                
    $this->errors           = array();

                foreach(
    $params as $key => $value){
                    
    $this->$key $value;
                }
            }

            
    /***************************************
            ** Connect function. This will, when called
            ** statically, create a new smtp object, 
            ** call the connect function (ie this function)
            ** and return it. When not called statically,
            ** it will connect to the server and send
            ** the HELO command.
            ***************************************/

            
    function &connect($params = array()){

                if(!isset(
    $this->status)){
                    
    $obj = new smtp($params);
                    if(
    $obj->connect()){
                        
    $obj->status SMTP_STATUS_CONNECTED;
                    }

                    return 
    $obj;

                }else{
                    
    $this->connection fsockopen($this->host$this->port$errno$errstr$this->timeout);
                    if(
    function_exists('socket_set_timeout')){
                        @
    socket_set_timeout($this->connection50);
                    }

                    
    $greeting $this->get_data();
                    if(
    is_resource($this->connection)){
                        return 
    $this->auth $this->ehlo() : $this->helo();
                    }else{
                        
    $this->errors[] = 'Failed to connect to server: '.$errstr;
                        return 
    FALSE;
                    }
                }
            }

            
    /***************************************
            ** Function which handles sending the mail.
            ** Arguments:
            ** $params    - Optional assoc array of parameters.
            **            Can contain:
            **              recipients - Indexed array of recipients
            **              from       - The from address. (used in MAIL FROM:),
            **                           this will be the return path
            **              headers    - Indexed array of headers, one header per array entry
            **              body       - The body of the email
            **            It can also contain any of the parameters from the connect()
            **            function
            ***************************************/

            
    function send($params = array()){

                foreach(
    $params as $key => $value){
                    
    $this->set($key$value);
                }

                if(
    $this->is_connected()){

                    
    // Do we auth or not? Note the distinction between the auth variable and auth() function
                    
    if($this->auth AND !$this->authenticated){
                        if(!
    $this->auth())
                            return 
    FALSE;
                    }

                    
    $this->mail($this->from);
                    if(
    is_array($this->recipients))
                        foreach(
    $this->recipients as $value)
                            
    $this->rcpt($value);
                    else
                        
    $this->rcpt($this->recipients);

                    if(!
    $this->data())
                        return 
    FALSE;

                    
    // Transparency
                    
    $headers str_replace(CRLF.'.'CRLF.'..'trim(implode(CRLF$this->headers)));
                    
    $body    str_replace(CRLF.'.'CRLF.'..'$this->body);
                    
    $body    $body[0] == '.' '.'.$body $body;

                    
    $this->send_data($headers);
                    
    $this->send_data('');
                    
    $this->send_data($body);
                    
    $this->send_data('.');

                    
    $result = (substr(trim($this->get_data()), 03) === '250');
                    
    //$this->rset();
                    
    return $result;
                }else{
                    
    $this->errors[] = 'Not connected!';
                    return 
    FALSE;
                }
            }
            
            
    /***************************************
            ** Function to implement HELO cmd
            ***************************************/

            
    function helo(){
                if(
    is_resource($this->connection)
                        AND 
    $this->send_data('HELO '.$this->helo)
                        AND 
    substr(trim($error $this->get_data()), 03) === '250' ){

                    return 
    TRUE;

                }else{
                    
    $this->errors[] = 'HELO command failed, output: ' trim(substr(trim($error),3));
                    return 
    FALSE;
                }
            }
            
            
    /***************************************
            ** Function to implement EHLO cmd
            ***************************************/

            
    function ehlo(){
                if(
    is_resource($this->connection)
                        AND 
    $this->send_data('EHLO '.$this->helo)
                        AND 
    substr(trim($error $this->get_data()), 03) === '250' ){

                    return 
    TRUE;

                }else{
                    
    $this->errors[] = 'EHLO command failed, output: ' trim(substr(trim($error),3));
                    return 
    FALSE;
                }
            }
            
            
    /***************************************
            ** Function to implement RSET cmd
            ***************************************/

            
    function rset(){
                if(
    is_resource($this->connection)
                        AND 
    $this->send_data('RSET')
                        AND 
    substr(trim($error $this->get_data()), 03) === '250' ){

                    return 
    TRUE;

                }else{
                    
    $this->errors[] = 'RSET command failed, output: ' trim(substr(trim($error),3));
                    return 
    FALSE;
                }
            }
            
            
    /***************************************
            ** Function to implement QUIT cmd
            ***************************************/

            
    function quit(){
                if(
    is_resource($this->connection)
                        AND 
    $this->send_data('QUIT')
                        AND 
    substr(trim($error $this->get_data()), 03) === '221' ){

                    
    fclose($this->connection);
                    
    $this->status SMTP_STATUS_NOT_CONNECTED;
                    return 
    TRUE;

                }else{
                    
    $this->errors[] = 'QUIT command failed, output: ' trim(substr(trim($error),3));
                    return 
    FALSE;
                }
            }
            
            
    /***************************************
            ** Function to implement AUTH cmd
            ***************************************/

            
    function auth(){
                if(
    is_resource($this->connection)
                        AND 
    $this->send_data('AUTH LOGIN')
                        AND 
    substr(trim($error $this->get_data()), 03) === '334'
                        
    AND $this->send_data(base64_encode($this->user))            // Send username
                        
    AND substr(trim($error $this->get_data()),0,3) === '334'
                        
    AND $this->send_data(base64_encode($this->pass))            // Send password
                        
    AND substr(trim($error $this->get_data()),0,3) === '235' ){

                    
    $this->authenticated TRUE;
                    return 
    TRUE;

                }else{
                    
    $this->errors[] = 'AUTH command failed: ' trim(substr(trim($error),3));
                    return 
    FALSE;
                }
            }

            
    /***************************************
            ** Function that handles the MAIL FROM: cmd
            ***************************************/
            
            
    function mail($from){

                if(
    $this->is_connected()
                    AND 
    $this->send_data('MAIL FROM:<'.$from.'>')
                    AND 
    substr(trim($this->get_data()), 02) === '250' ){

                    return 
    TRUE;

                }else
                    return 
    FALSE;
            }

            
    /***************************************
            ** Function that handles the RCPT TO: cmd
            ***************************************/
            
            
    function rcpt($to){

                if(
    $this->is_connected()
                    AND 
    $this->send_data('RCPT TO:<'.$to.'>')
                    AND 
    substr(trim($error $this->get_data()), 02) === '25' ){

                    return 
    TRUE;

                }else{
                    
    $this->errors[] = trim(substr(trim($error), 3));
                    return 
    FALSE;
                }
            }

            
    /***************************************
            ** Function that sends the DATA cmd
            ***************************************/

            
    function data(){

                if(
    $this->is_connected()
                    AND 
    $this->send_data('DATA')
                    AND 
    substr(trim($error $this->get_data()), 03) === '354' ){
     
                    return 
    TRUE;

                }else{
                    
    $this->errors[] = trim(substr(trim($error), 3));
                    return 
    FALSE;
                }
            }

            
    /***************************************
            ** Function to determine if this object
            ** is connected to the server or not.
            ***************************************/

            
    function is_connected(){

                return (
    is_resource($this->connection) AND ($this->status === SMTP_STATUS_CONNECTED));
            }

            
    /***************************************
            ** Function to send a bit of data
            ***************************************/

            
    function send_data($data){

                if(
    is_resource($this->connection)){
                    return 
    fwrite($this->connection$data.CRLFstrlen($data)+2);
                    
                }else
                    return 
    FALSE;
            }

            
    /***************************************
            ** Function to get data.
            ***************************************/

            
    function &get_data(){

                
    $return '';
                
    $line   '';
                
    $loops  0;

                if(
    is_resource($this->connection)){
                    while((
    strpos($returnCRLF) === FALSE OR substr($line,3,1) !== ' ') AND $loops 100){
                        
    $line    fgets($this->connection512);
                        
    $return .= $line;
                        
    $loops++;
                    }
                    return 
    $return;

                }else
                    return 
    FALSE;
            }

            
    /***************************************
            ** Sets a variable
            ***************************************/
            
            
    function set($var$value){

                
    $this->$var $value;
                return 
    TRUE;
            }

        } 
    // End of class
    ?>
    Lo pueden usar asi:
    Código PHP:
    /***************************************
    ** Filename.......: test.php
    ** Project........: SMTP Class
    ** Last Modified..: 30 September 2001
    ***************************************/

        /***************************************
        ** Include the class. The header() makes
        ** the output look lovely.
        ***************************************/
        
    include('class.smtp.inc');
        
    header('Content-Type: text/plain');

        
    /***************************************
        ** Setup some parameters which will be 
        ** passed to the smtp::connect() call.
        ***************************************/
        
    $params['host'] = '10.1.1.2';                // The smtp server host/ip
        
    $params['port'] = 25;                        // The smtp server port
        
    $params['helo'] = exec('hostname');            // What to use when sending the helo command. Typically, your domain/hostname
        
    $params['auth'] = TRUE;                        // Whether to use basic authentication or not
        
    $params['user'] = 'testuser';                // Username for authentication
        
    $params['pass'] = 'testuser';                // Password for authentication

        /***************************************
        ** These parameters get passed to the 
        ** smtp->send() call.
        ***************************************/

        
    $send_params['recipients']    = array('richard@[10.1.1.2]');                            // The recipients (can be multiple)
        
    $send_params['headers']        = array(
                                            
    'From: "Richard Heyes" ',    // Headers
                                            
    'To: richard@[10.1.1.2]''Subject: Test email'
                                           
    );
        
    $send_params['from']        = 'richard@[10.1.1.2]';                                    // This is used as in the MAIL FROM: cmd
                                                                                            // It should end up as the Return-Path: header
        
    $send_params['body']        = '.Test email.';                                        // The body of the email


        /***************************************
        ** The code that creates the object and
        ** sends the email.
        ***************************************/

        
    if(is_object($smtp smtp::connect($params)) AND $smtp->send($send_params)){
            echo 
    'Email sent successfully!'."\r\n\r\n";

            
    // Any recipients that failed (relaying denied for example) will be logged in the errors variable.
            
    print_r($smtp->errors);

        }else{
            echo 
    'Error sending mail'."\r\n\r\n";
            
            
    // The reason for failure should be in the errors variable
            
    print_r($smtp->errors);
        }

    ?>
    Todo esto esta sacado de http://phpguru.com.