Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Web » Imágenes en el cuerpo de correo electrónico Responder al tema
Nuevo tema


Página 1 de 1  [ 3 mensajes ] 
 
Nota 2008-09-18 18:58 @832

Perlero Nuevo
Registrado: 2008-09-18 18:12 @800
Mensajes: 3
Imágenes en el cuerpo de correo electrónico
¡Qué tal amigos, saludos a todos!
En ésta ocasión y como primer post que pondré aquí, espero y pueda contar con su ayuda... Empecemos, he creado con la ayuda del mail sender y con ayuda de algunos scripts que de esta grandiosa página he encontrado lo que necesito, pero me surge una duda...

Al momento de enviar algún correo con una imagen en el cuerpo ésta aparece siempre y cuando yo la pongo con el botón envío de un archivo, pero si en algún momento no quisiera mandar, ninguna imagen, no tendría porqué aparecerme en el cuerpo del correo una X indicándome que se esperaba una imagen, y eso es lo que quiero evitar.

En pocas palabras, lo que hace mi cgi es lo siguiente, para que puedan entenderme un poco más.

1. de una base de datos obtengo los correos de destinatarios
2. al seleccionarlos los correos de la bd puedo enviarles imágenes en el cuerpo de correo (no como adjuntas), sino en el cuerpo del correo.
3. los destinatarios reciben el correo con éxito.

Lo que me inquieta es que si por ejemplo yo mando una imagen que aparecerá en el cuerpo del correo no hay problema, pero si quisiera enviar solo texto en vez de una imagen, sucede que, aparece el texto que enviaré pero aparece una X, como anteriormente lo había mencionado.

Espero contar con su ayuda.
De antemano muchas, gracias.

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
#!/usr/bin/perl -w
BEGIN
{
    # Declaramos la ruta de ubicacion del modulo 'comun'.
    @INC=(@INC,"/var/www/cgi-bin/comun");
}
use masivo_html;
use CGI;               # carga el modulo CGI.pm
use strict;
use Mail::Sender;
use vars qw( $table0 $nc $region $nombre $usuario $JSCRIPT1 $email $area $dbh1 $desc $table0 %FORM $act $f_act %mm $rs_nuV $fetch_nuV);

 if((trim($FORM{opcion}) eq 'Enviar')){ &enviar(); }
 &form();
 exit;

sub enviar {
my ($ip,$num, $sql,$remite,$asunto,$fichero4,$fichero3,$fichero2,$fichero,$mensaje,$para,@para);

# Comprobamos si el usuario nos ha pasado parametro

    $remite  = $FORM{remite};
    $para    = $FORM{destinatarios};
    $asunto  = $FORM{asunto};
    $fichero = $FORM{fichero};
    $mensaje = $FORM{mensaje};
    my @para= split(/,/, $para);
    $ip      = remote_host();

 ($rs_nuV,$fetch_nuV)=record(db=>"correosmasivos",
                   tabla=>"registros",
                   campos=>"MAX(num_consec)",
                   alias=>"maximo",
                   visible=>'no');
                   while($fetch_nuV->()){}
                   $$rs_nuV{maximo}=$$rs_nuV{maximo}+1;
                   $num=$$rs_nuV{maximo};

   $sql="INSERT INTO registros (num_consec,remite,destinatarios,asunto,mensaje,archivo,ip) values ($$rs_nuV{maximo},'$FORM{remite}','$FORM{destinatarios}','$FORM{asunto}','$FORM{mensaje}','$FORM{fichero}','$ip')";

  &ejecuta("correosmasivos",$sql);



    # Leemos el fichero para la IMAGEN 1
    my $fh = upload('fichero');
    my $fichero_contenidos;
    my $fichero_type = "";
    if ( defined $fh ) {
        binmode $fh;
        while ( <$fh> ) {
            $fichero_contenidos .= $_;
        }
        $fichero_type = uploadInfo($fichero)->{'Content-Type'};
    }
       

        # ----------------------------------    
        # Preparamos el correo electroniico
        # ----------------------------------


    foreach $para (@para) {

        my $msg = Mail::Sender->new({
            smtp      => '10.10.0.2',
            from      => $remite.'@'.$dominio,
            to        => $para.'@'.$dominio,
            subject   => $asunto,
            multipart => 'mixed',
        });

        $msg->OpenMultipart({});

        # si se adjunta una imagen se muestra con exito pero si no se adjunta, aparece una "X"
        $msg->Body({
            ctype => 'text/html',
            disposition => 'NONE',
            msg =>"
<html><body>
<p align=center>
<IMG src='cid:img1'>
</p>
<p align=justify>
<br><font face=verdana size=2 color=#666666>$mensaje</font>
</p></body></html>"

        });

        # IMAGEN 1
        if ( defined $fh ) {
            $msg->Part({
                ctype       => $fichero_type,
                description => 'Adjunto',
                encoding    => 'Base64',
                disposition => "inline; filename=$fichero; \r\nContent-ID: <img1>",
                msg         => $fichero_contenidos,
            });
        }

        $msg->Close();
    }

    &msj("","su ha enviado el correo con exito<br>”,"<button name=\"opc\" class = \"Bsbttn\" type=\"button\" value=\"Cerrar\" onClick=\"window.close();\"> Cerrar </button>");

    exit;
}


sub form {
my ($table3,$table00,$rsReg,$fetchReg,@valX,%labX,@valX2,%labX2,$i,$table4,$table2);

        # -------------------
        # POP UP SOLICITANTES
        # -------------------


  $i = 0;

                 ($rsReg,$fetchReg) =
                        record(db=>"correos",
                        tabla=>"cuentas",
                        condicion=>"order by nombre",
                        campos=>"nombre,cuenta",
                        visible=>"no");

                                         while($fetchReg->())
                                                {
                                                        $valX[$i] = trim($rsReg->{cuenta});
                                                        $labX{$valX[$i]} = trim($rsReg->{nombre});
                                                        $i++;
                                                        #&msj($rsReg->{cuenta});

                                                }




 # ----------------------------------------------- #
 # - INICIO DE FORMULARIO EN PANTALLA PRINCICPAL - #
 # ----------------------------------------------- #


 $table4 = new HTML::Table(-rows=>10,-cols=>1,-bgcolor=>"#ffffeb",-padding=>0, -spacing=>0,-width=>600);
 
 $table4->setCell(2,1,
 "<tr>
 <td width=600  align=center>
<br>
 <p align=left>
 <font face=verdana size=2>
<b>De:</b></font> "

 .textfield(-id=>'remite',-name=>'remite',-size=>15,-maxlength=>100)."  \@midominio.com <br>
 <font face=verdana size=2>
<b>Para:</b></font>   "

 .textfield( -name=>'destinatarios', -id=>'destinatarios', -size=>50, -labels=>{%labX})." \@midominio.com <br>
&nbsp;"

 .popup_menu(-name=>'para',-values=>[@valX],-labels=>{%labX},-multiple=>'multiple',-size=>4)."<br>
&nbsp;"

 .button(-name=>'Agregar Usuarios', -id=>'Agregar', -onclick=>'javascript&#058;document.formu.destinatarios.value=add_values(document.formu.para);')."<br><br>
 <font face=verdana size=2>
<b>Asunto:</b></font> "

 .textfield(-id=>'asunto',-name=>'asunto',-size=>60,-maxlength=>100)."
 <font face=verdana size=2>
 <br><br>Adjuntar Imagenes en el cuerpo del correo</font><br>
 (Puedes adjuntar archivos JPG, GIF, BMP)<br><br>
&nbsp;"

 .filefield(-name=>'fichero',-default=>'Nombre del fichero a enviar',-size=>30,-maxlength=>80)."<br>
&nbsp;
<font face=verdana size=2>
<br><br>"

 .submit(-name=>'opcion',-value=>'Enviar')."
  </p></td></tr>
"
);
 


 #Creamos la tabla que contiene las 2 tablas anteriores.
 $table00 = new HTML::Table(-rows=>5,-cols=>1,-border=>0,-bgcolor=>"#ffffeb",-width=>600,-spacing=>-10,-padding=>10);
 $table00->setCell(6,1, $table4->getTable);

 #Creamos la tabla que contiene las 2 tablas anteriores.
 $table0 = new HTML::Table(-rows=>1,-cols=>1,-border=>0,-bgcolor=>"#ffffeb",-width=>600,-align=>"center",-spacing=>0, -padding=>0);

 $table0->setCell(1,1, $table00->getTable);
 $table0->setColAlign(1,"CENTER");



 print header;
 &js();
 &print_cabeza('');    # esta funcion se encuentra en el (pm)
 print start_multipart_form(-action=>'mail.cgi',
                            -name=>'formu',
                            -id  =>'formu',
                           );
 $table0->print;
 end_form();
}

sub js {
$JSCRIPT=<<EOT;
function add_values(objetoSelect)
            {
               var opt_selected = new Array();
               var index = 0;
               for (var i=0;i < objetoSelect.options.length;i++)
               {
                  if (objetoSelect.options[i].selected)
                  {
                     opt_selected[index] = objetoSelect.options[i].value;
                     index++;
                  }
               }
               return opt_selected;
             }

EOT

}


Nota 2008-09-20 09:05 @420

Perlero Frecuente
Registrado: 2007-10-29 06:31 @313
Ubicación: Praga, Republica Checa
Mensajes: 132
Es porque adjuntas una imagen vacía.

Update: Alguien me ha modificado la mensaje? Quise decir que tienes que adjuntar una imagen. Pequeña e transparente.

_________________
-------------------------------------------------------
- Estoy aquí para practicar español. Si te ayudó mi respuesta ayudame con un mensaje privado sobre mis faltas por favor. Seguramente habrá muchas :-)


Última edición por Jenda el 2008-09-20 15:27 @685, editado 1 vez en total

Nota 2008-09-20 11:57 @540
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10260
Debes componer el texto de la clave 'msg' antes del Body(). Con un 'if' podrás decidir si incluir o no la marca <img>.

En estos foros hay varios ejemplos con el módulo Mail::Sender. Usa el sistema de búsqueda.

_________________
JF^D Perl programming


Responder al tema  [ 3 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO