Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   Mandar emails con D4php!! (https://www.clubdelphi.com/foros/showthread.php?t=72806)

verde_esmeralda 12-03-2011 19:43:23

Mandar emails con D4php!!
 
Hola un saludo,

El motivo por el cual doy esta molestia es pedir ayuda acerca de como poder enviar un email en D4php,por favor y muchas gracias.

Ñuño Martínez 14-03-2011 12:14:07

Supongo que tendrá componentes exprofeso (no uso Delphi4PHP), pero en una mala puedes hacerlo directamente, usando la función mail. Si no te funciona, comprueba los requisitos.

verde_esmeralda 14-03-2011 16:52:10

Muchas gracias por su atencion, he conseguido enviar email, ahora el siguiente paso es adjuntar archivos, disculpen la molestia, yo estoy investigando,pero necesito de su ayuda, muchas gracias.

Ñuño Martínez 15-03-2011 13:18:33

El tema de los adjuntos es algo más complicado. Existen varias bibliotecas que lo facilitan, pero supongo que Delphi4PHP las incluirá. ¿No dice nada la ayuda de Delphi4PHP?

aams01 25-03-2011 18:22:26

Hola yo tengo el mismo problema quisiera ver si podrias decir como lo solucionaste

roman 25-03-2011 19:24:11

Para enviar correo con PHP definitivamente recomiendo PHPMailer. Te facilita todo incluyendo adjuntos, correo en formato de texto, html y dual.

Lo que sí no tengo ni idea es de cómo usarlo con Delphi4PHP, pero supongo que tiene la capacidad de incluir bibliotecas externas.

// Saludos

aams01 25-03-2011 19:32:48

Hola si uso phpmailer lo tengo configurado de la sig manera.

Código PHP:

<?
  
require "class.phpmailer.php";
  
$mail = new phpmailer();
  
$mail->SetLanguage("es""language/"); 

  
//  $mail->mailer = "smtp";
  
$mail->IsSMTP();
  
$mail->SMTPDebug  2// para q muestre errorers de SMTP

  //Asignamos a Host el nombre de nuestro servidor smtp
  
$mail->SMTPAuth true
  
$mail->SMTPSecure "tls";
  
$mail->Host "smtp.gmail.com";//ssl://smtp.gmail.com";
  
$mail->Port 587;
  
  
//Le indicamos que el servidor smtp requiere autenticación
  //$mail->SMTPAuth = true;  
  //Le decimos cual es nuestro nombre de usuario y password
  
$mail->Username "angel.mendez.saucedo@gmail.com"
  
$mail->Password "angelmendezsaucedo01";

  
//Indicamos cual es nuestra dirección de correo y el nombre que 
  //queremos que vea el usuario que lee nuestro correo
  
$mail->From "angel.mendez.saucedo@gmail.com";
  
$mail->FromName "angel.mendez.saucedo";

  
//el valor por defecto 10 de Timeout es un poco escaso dado que voy a usar 
  //una cuenta gratuita, por tanto lo pongo a 30  
  
$mail->Timeout=30;

  
//Indicamos cual es la dirección de destino del correo
$direccion=  "dragondeagua01@gmail.com";
$mail->AddAddress($direccion);

  
//Asignamos asunto y cuerpo del mensaje
  //El cuerpo del mensaje lo ponemos en formato html, haciendo 
  //que se vea en negrita
  
$mail->Subject "Prueba de phpmailer";
  
$mail->Body "<b>Mensaje de prueba mandado con phpmailer en formato html</b>";

  
//Definimos AltBody por si el destinatario del correo no admite email con formato html 
  
$mail->AltBody "Mensaje de prueba mandado con phpmailer en formato solo texto";


  
//se envia el mensaje, si no ha habido problemas 
  //la variable $exito tendra el valor true
  
$exito $mail->Send();



  
//Si el mensaje no ha podido ser enviado se realizaran 4 intentos mas como mucho 
  //para intentar enviar el mensaje, cada intento se hara 5 segundos despues 
  //del anterior, para ello se usa la funcion sleep    
  
$intentos=1

  while ((!
$exito) && ($intentos 5)) {
    
sleep(5);
         
//echo $mail->ErrorInfo;
         
$exito $mail->Send();
         
$intentos=$intentos+1;    
    
   }

   if(!
$exito)
   {
    echo 
"Problemas enviando correo electrónico a ".  $direccion;
    echo 
"<br/>".$mail->ErrorInfo;    
   }
   else
   {
    echo 
"Mensaje enviado correctamente";
   } 
echo 
"<br> q paso";
?>


roman 25-03-2011 20:33:49

Cita:

Empezado por aams01 (Mensaje 394678)
Hola si uso phpmailer lo tengo configurado de la sig manera.

Y, ¿cuál es la duda? ¿Cómo mandar un attachment?

La clase PHPMailer tiene métodos para ello, por ejemplo, AddAttachment, al que especificas la ruta donde está el archivo que queres adjuntar.

También puedes mandar un adjunto a partir de un string. Por ejemplo, yo uso FPDF para crear un documento pdf:

Código PHP:

$pdf = new FPDF('P''in''Letter');

/*
  ...

  Líneas para crear el contenido

  ...
*/

$documento $pdf->Output('''S'); 

Entonces, utilizo AddStringAttachment:

Código PHP:

$mail->AddStringAttachment($documento'carta-registro.pdf''base64''application/octet-stream'); 

El nombre que pones ahí (carta-registro.pdf en el ejemplo) es el nombre con el que va el archivo adjunto.

// Saludos

aams01 25-03-2011 21:53:10

el problema en si esque no funciona manda errores de envio, ya e releido por todos lados y nomas no encuentro lo que este mal, ya configure el Gmail permitiendo el envio de IMAP SMTP y pop3, alguna sugerencia

roman 25-03-2011 21:54:04

Pues, si no dices cuáles son los errores que marca, poco se puede hacer.

// Saludos

aams01 27-03-2011 03:11:31

Hola el error es el siguienete.
No se puede enviar el correo a los siguientes destinatarios: CORREO
el error es provocado por SMTP su conexion siempre marca error, si lo pudieras correr seria de mucha ayuda los datos puestos son los de verdad ya que este archivo fue echo pára prueba de eso q son datos correctos.

verde_esmeralda 28-03-2011 03:19:57

HOLA aams01
 
Mira yo solucione lo del e-mail de la siguiente manera:

Código:


<?php
require_once("vcl/vcl.inc.php");
//Inclusiones
use_unit("comctrls.inc.php");
use_unit("Zend/zmail.inc.php");
use_unit("forms.inc.php");
use_unit("extctrls.inc.php");
use_unit("stdctrls.inc.php");
//Definición de clase
class Unidad4 extends Page
{
      public $Edit1 = null;
      public $ZMailTransportSendmail1 = null;
      public $zmCustom = null;
      public $zmtSMTP = null;
      public $reBody = null;
      public $edSubject = null;
      public $Label5 = null;
      public $cbIncludeAttachments = null;
      public $cbPlainTextOnly = null;
      public $meBcc = null;
      public $Label4 = null;
      public $meCC = null;
      public $Label3 = null;
      public $Label2 = null;
      public $meTo = null;
      public $edFrom = null;
      public $Label1 = null;
      public $Button1 = null;
      function zmCustomCustomizeAttachment($sender, $params)
      {
      $result=array();
        list($key, $attachment)=each($params);
        if ($attachment=='mail.php')
        {
            $result['mimetype']=Zend_Mime::TYPE_TEXT;
            $result['disposition']=Zend_Mime::DISPOSITION_INLINE;
        }
        return($result);
 
      }
      function Button1Click($sender, $params)
      {
            $this->zmtSMTP->Host=$this->Edit1->Text;
            $this->zmCustom->FromEmail=$this->edFrom->Text;
            $this->zmCustom->Subject=$this->edSubject->Text;
            $this->zmCustom->BodyText=strip_tags($this->reBody->Text);
            if (!$this->cbPlainTextOnly->Checked) $this->zmCustom->BodyHTML=$this->reBody->Text;
            else $this->zmCustom->BodyHTML='';
            if (count($this->meTo->Lines)>=1) $this->zmCustom->To=array_combine($this->meTo->Lines, array_fill(0,count($this->meTo->Lines),""));
            if (count($this->meCC->Lines)>=1) $this->zmCustom->Cc=array_combine($this->meCC->Lines, array_fill(0,count($this->meCC->Lines),""));
            if (count($this->meBcc->Lines)>=1) $this->zmCustom->Bcc=array_combine($this->meBcc->Lines, array_fill(0,count($this->meBcc->Lines),""));
            if ($this->cbIncludeAttachments->Checked)
            {
                $this->zmCustom->Attachments=array(0=>'mail.php',1=>'mail.xml.php');
            }
            else
            {
                $this->zmCustom->Attachments=array();
            }
            $this->zmCustom->send();
 
      }
}

En el formulario tengo los siguientes componentes:

ZMailTransportSendmail1

ZMailTransportSMTP: en sus propiedades tengo->Authentication:saLogin,host(lo que tienes en host),Username(nombre de tu usuario),UserPassword(Tu password).

ZMail: en la propiedad Transport:va ligado con ZMailTransportSMTP.

Espero te sea de ayuda.

aams01 28-03-2011 03:40:00

Cita:

Empezado por aams01 (Mensaje 394761)
Hola el error es el siguienete.
No se puede enviar el correo a los siguientes destinatarios: CORREO
el error es provocado por SMTP su conexion siempre marca error, si lo pudieras correr seria de mucha ayuda los datos puestos son los de verdad ya que este archivo fue echo pára prueba de eso q son datos correctos.

Lo que muestra es lo siguiente
SMTP -> FROM SERVER:220 mx.google.com ESMTP wo11sm2454916icb.20
SMTP -> FROM SERVER: 250-mx.google.com at your service, [189.231.222.45] 250-SIZE 35882577 250-8BITMIME 250-STARTTLS 250 ENHANCEDSTATUSCODES
SMTP -> ERROR: AUTH not accepted from server: 530 5.7.0 Must issue a STARTTLS command first. wo11sm2454916icb.20
SMTP -> FROM SERVER:250 2.1.5 Flushed wo11sm2454916icb.20
SMTP -> FROM SERVER:530 5.7.0 Must issue a STARTTLS command first. wo11sm2454916icb.20
SMTP -> ERROR: MAIL not accepted from server: 530 5.7.0 Must issue a STARTTLS command first. wo11sm2454916icb.20
SMTP -> FROM SERVER:250 2.1.5 Flushed wo11sm2454916icb.20
Problemas enviando correo electrónico a dragondeagua01@gmail.com
La(s) siguiente(s) direcciones de remitente fallaron: angel.mendez.saucedo@gmail.com

roman 28-03-2011 18:13:29

aams01,

Te pongo un ejemplo que uso:

Código PHP:

<?php
/*
 * Para ejecutar este ejemplo, hay que colocar la carpeta del phpmailer v5.1
 * en el mismo directorio que este script.
 *
 * Asignar a SMTP_USERNAME y SMTP_PASSWORD los valores de la cuenta
 * de gmail desde la que envian el correo.
 */

define('DIR_BASE'dirname(__FILE__) . DIRECTORY_SEPARATOR);
define('DIR_PHPMAILER'DIR_BASE 'phpmailer_v5.1' DIRECTORY_SEPARATOR);

define('SMTP_USERNAME''usuario');
define('SMTP_PASSWORD''password');

require_once(
DIR_PHPMAILER 'class.phpmailer.php');

$mail = new PHPMailer();

$mail->isSMTP(true);

$mail->SMTPAuth   true;
$mail->SMTPSecure "ssl";
$mail->Host       "smtp.gmail.com";
$mail->Port       465;
$mail->Username   SMTP_USERNAME;
$mail->Password   SMTP_PASSWORD;

$mail->Subject 'Prueba de correo';
$mail->Body 'Hola mundo';

// Agregar destinatario(s)
$mail->AddAddress('usuario@servidor');

return 
$mail->Send();

Nota que en SMTPSecure yo uso ssl en lugar de tls y que el puerto es 465 y no 587.

También debes asegurarte que tu servidor tiene instalada la extensión openssl de php.

// Saludos

aams01 29-03-2011 04:10:52

Hola ya logre solucionar el problema era como tu decias Roman era cuestion de configurar el php.ini faltaba retirar ";" extension=php_openssl.dll
Dejo el archivo y su configuracion por si a alguien le ayuda, tomando encuenta que se utilizo la clase de phpmailer tal cual se descargo sin modificar, la cuenta gmail fue configurada en su seccion configuracion (Reenvío y correo POP/IMAP) Solamente Habilitar IMAP:

Código PHP:

<?
  
include("include/class.phpmailer.php");
  include(
"include/class.smtp.php");
  
  
$mail = new phpmailer();
  
$mail->SetLanguage("es""include/language/"); 

  
$mail->mailer "smtp";
  
$mail->IsSMTP();
  
$mail->SMTPDebug  1// para q muestre errorers de SMTP

  //Asignamos a Host el nombre de nuestro servidor smtp
  
$mail->SMTPAuth true
 
// Lo siguiente es conforme a la configuracion dada por gmail 
  
$mail->SMTPSecure 'tls';
  
$mail->Host 'smtp.gmail.com';
  
$mail->Port 587;
  
  
//Le indicamos que el servidor smtp requiere autenticación
  //Le decimos cual es nuestro nombre de usuario y password
  
$mail->Username 'angel.mendez.saucedo@gmail.com'// Correo Gmail
  
$mail->Password 'angelmendezsaucedo01';       // Contraseña del correo

  //Indicamos cual es nuestra dirección de correo y el nombre que 
  //queremos que vea el usuario que lee nuestro correo
  
$mail->From 'angel.mendez.saucedo@gmail.com';      
  
$mail->FromName 'Angel Mendez';

  
//el valor por defecto 10 de Timeout es un poco escaso dado que voy a usar 
  //una cuenta gratuita, por tanto lo pongo a 30  
  
$mail->Timeout=30;

  
//Indicamos cual es la dirección de destino del correo
  
$direccion=  'dragondeagua01@gmail.com';
  
$mail->AddAddress($direccion);

  
//Asignamos asunto y cuerpo del mensaje
  //El cuerpo del mensaje lo ponemos en formato html, haciendo 
  //que se vea en negrita
  
$mail->Subject "Modificacion 27 Correo 4";
  
$mail->IsHTML(true);
  
$mail->Body "<b>Correo mandado mODIFICACION 27 Correo4 windraaaa</b>";

  
//Definimos AltBody por si el destinatario del correo no admite email con formato html 
  
$mail->AltBody "Correo mandado mODIFICACION 27 Correo4";

  
//se envia el mensaje, si no ha habido problemas 
  //la variable $exito tendra el valor true
  
$exito $mail->Send();

  
//Si el mensaje no ha podido ser enviado se realizaran 4 intentos mas como mucho 
  //para intentar enviar el mensaje, cada intento se hara 5 segundos despues 
  //del anterior, para ello se usa la funcion sleep    
  
$intentos=1

  while ((!
$exito) && ($intentos 5)) {
    
sleep(5);   
         
$exito $mail->Send();
         
$intentos=$intentos+1;    
   }

   if(!
$exito)
   {
        echo 
"Problemas enviando correo electrónico a ".  $direccion;
        echo 
"<br/>".$mail->ErrorInfo;    
   }
   else
   {
        echo 
"Mensaje enviado correctamente";
   } 
?>

Gracias a todos por su participacion y su apoyo.


La franja horaria es GMT +2. Ahora son las 06:17:44.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi