Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Imágenes en el cuerpo de correo electrónico

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> CGI
Mensaje Jue Sep 18, 2008 5:58 pm
FeelOasis
Perlero Nuevo
Perlero Nuevo
Registrado: 18 Sep 2008
Mensajes: 3
Imágenes en el cuerpo de correo electrónico Responder citando

¡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.

Perl:
#!/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
}
Mensaje Sab Sep 20, 2008 8:05 am
Jenda
Perlero Frecuente
Perlero Frecuente
Registrado: 29 Oct 2007
Mensajes: 108
Ubicación: Praga, Republica Checa
Responder citando

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.

Ultima edición por Jenda el Sab Sep 20, 2008 2:27 pm, editado 1 vez
Mensaje Sab Sep 20, 2008 10:57 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4239
Ubicación: Valladolid, España
Responder citando

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.
Publicar nuevo tema   Responder al tema    Foros de discusión -> CGI Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group