• Publicidad

Imágenes en el cuerpo de correo electrónico

Todo lo relacionado con el desarrollo Web con Perl: desde CGI hasta Mojolicious

Imágenes en el cuerpo de correo electrónico

Notapor FeelOasis » 2008-09-18 18:58 @832

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

Sintáxis: [ Descargar ] [ Ocultar ]
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

}
Coloreado en 0.031 segundos, usando GeSHi 1.0.8.4
FeelOasis
Perlero Nuevo
Perlero Nuevo
 
Mensajes: 3
Registrado: 2008-09-18 18:12 @800

Publicidad

Notapor Jenda » 2008-09-20 09:05 @420

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.
Última edición por Jenda el 2008-09-20 15:27 @685, editado 1 vez en total
-------------------------------------------------------
- Estoy aquí para practicar español. Si te ayudó mi respuesta ayudame con un mensaje privado sobre mis faltas por favor. Seguramente habrá muchas :-)
Jenda
Perlero Frecuente
Perlero Frecuente
 
Mensajes: 132
Registrado: 2007-10-29 06:31 @313
Ubicación: Praga, Republica Checa

Notapor explorer » 2008-09-20 11:57 @540

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 Language
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 12934
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Web

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados