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.
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>
"
.popup_menu(-name=>'para',-values=>[@valX],-labels=>{%labX},-multiple=>'multiple',-size=>4)."<br>
"
.button(-name=>'Agregar Usuarios', -id=>'Agregar', -onclick=>'javascript: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>
"
.filefield(-name=>'fichero',-default=>'Nombre del fichero a enviar',-size=>30,-maxlength=>80)."<br>
<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
}
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>
"
.popup_menu(-name=>'para',-values=>[@valX],-labels=>{%labX},-multiple=>'multiple',-size=>4)."<br>
"
.button(-name=>'Agregar Usuarios', -id=>'Agregar', -onclick=>'javascript: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>
"
.filefield(-name=>'fichero',-default=>'Nombre del fichero a enviar',-size=>30,-maxlength=>80)."<br>
<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.006 segundos, usando GeSHi 1.0.8.4