¿Cómo envío un archivo como archivo adjunto de correo electrónico utilizando la línea de comandos de Linux?


289

Creé un script que se ejecuta todas las noches en mi servidor Linux que usa mysqldumppara hacer una copia de seguridad de cada una de mis bases de datos MySQL en archivos .sql y los empaqueta como un archivo comprimido .tar. El siguiente paso que quiero lograr es enviar ese archivo tar por correo electrónico a un servidor de correo electrónico remoto para su custodia. He podido enviar un correo electrónico a la secuencia de comandos sin formato en el cuerpo haciendo clic en el archivo de texto de respaldo para que me mailxguste:

$ cat mysqldbbackup.sql | mailx backup@email.com

catrepite el texto del archivo de copia de seguridad que se canaliza en el mailxprograma con la dirección de correo electrónico del destinatario pasada como argumento.

Si bien esto logra lo que necesito, creo que podría ser un paso mejor. ¿Hay alguna forma, mediante el uso de scripts de shell o de otra manera, para enviar el archivo comprimido .tar a un mensaje de correo electrónico saliente como un archivo adjunto ? Esto superaría tener que lidiar con mensajes de correo electrónico muy largos que contienen datos de encabezado y a menudo tienen problemas de ajuste de palabras, etc.


1
¿Puedes compartir el script que respalda tus bases de datos MySQL?
Almino Melo

Lo siento, no he estado haciendo esto por un tiempo ahora. Sé que implicó invocar mysqldumpy luego adjuntar la salida a un correo electrónico (con mutt). Incluso podría haber tenido un paso que comprimió la salida a un archivo zip / tar.gz también ...
Kit Roed

1
Por pura curiosidad, ¿por qué enviar sus copias de seguridad por correo electrónico frente a scp o rsync?
jchook 05 de

Respuestas:


298

Ninguno de los perros callejeros trabajó para mí. Estaba pensando que la dirección de correo electrónico era parte del adjunto. Tuve que hacer:

echo "This is the message body" | mutt -a "/path/to/file.to.attach" -s "subject of message" -- recipient@domain.com

1
Estoy usando mutt 1.5.21 (2010-09-15) y requiere -un parámetro después del correo electrónico del destinatario
nurettin

Trabajó para mí usando Mutt 1.5.24 (2015-08-30) en openSUSE Leap 42.1.
Antonio Vinicius Menezes Medei

3
@fugitivo significa "fin de opciones". Echa un vistazo a unix.stackexchange.com/questions/11376/…
rynop

¿Hay alguna forma de verificar las excepciones y volver a intentar el envío?
ti034

79

O, en su defecto mutt:

gzip -c mysqldbbackup.sql | uuencode mysqldbbackup.sql.gz  | mail -s "MySQL DB" backup@email.com

26
Esto envía la parte sin codificar en línea y no como un archivo adjunto . Sin embargo, muchos clientes de correo reconocen esto y muestran la parte sin codificar como un archivo adjunto.
FuePi

44
No use uuencode en este día y edad. MIME es un poco más complejo pero mucho más fácil de usar.
tripleee

@DavidGiven: Vea por ejemplo (de un vistazo) todas las otras respuestas a esta pregunta.
tripleee

66
¡Ninguno de ellos usa el correo!
David dado el

Luego, por ejemplo, stackoverflow.com/questions/3317174/… y reemplácelo text/htmlcon el tipo MIME que tenga sentido para su archivo adjunto. (Para este ejemplo concreto, supongo application/gzip).
tripleee

43

Dependiendo de su versión de Linux, puede llamarse correo. Para citar a @David arriba:

mail -s "Backup" -a mysqldbbackup.sql backup@email.com < message.txt

o también:

cat message.txt | mail -s "Backup" -a mysqldbbackup.sql backup@email.com 

@ KarelBílek: ¿Qué tal la otra opción?
Nathan Fellman

Ambas soluciones no funcionan para mí. Recibí el correo electrónico con Outlook 2013 y el correo solo contiene el nombre del archivo
nickel715

2
mi página de manual dice:-a, --append=HEADER: VALUE append given header to the message being sent
exhuma

2
Nathan, parece que tu cita de David está equivocada: utilizó el muttcomando, no mail. Además, como otros han señalado, mutt ahora parece requerir un --argumento antes de la dirección. Y veo que @exhuma y yo estamos de acuerdo en lo que hace la -aopción mail: me confundí allí por un minuto;)
nealmcb

77
en lugar de -a deberías usar -A: -a, --append=HEADER: VALUE append given header to the message being sent -A, --attach=FILE attach FILE
Victor Perov

41

Al mirar man mailx, el programa mailx no tiene una opción para adjuntar un archivo. Podrías usar otro programa como mutt.

echo "This is the message body" | mutt -a file.to.attach -s "subject of message" recipient@domain.com

Las opciones de línea de comando para mutt se pueden mostrar con mutt -h.


¡Gracias! Eso funcionó, estaba teniendo problemas para que mutt hiciera la acción en silencio.
Kit Roed

10
Vea la respuesta a continuación ( stackoverflow.com/a/9524359/10608 ) porque aparentemente la sintaxis cambió para mutt, que ahora requiere a --.
Alexander Bird

29

Yo uso SendEmail, que fue creado para este escenario. Está empaquetado para Ubuntu, así que supongo que está disponible

sendemail -f sender@some.where -t receiver@some.place -m "Here are your files!" -a file1.jpg file2.zip

http://caspian.dotconf.net/menu/Software/SendEmail/


Creo que debería ser "sendEmail" en lugar de "sendemail" en su ejemplo.
Davit

1
Sí y no - la fuente (Caspian) utiliza una mayúscula E, mientras que esta estrategia es raro que los nombres de las herramientas de línea de comandos (en el mundo Unix), al menos el embalaje Ubuntu de este software ofrece tanto sendemaily sendEmailen /usr/bin/.
Fredrik Wendt

Mi Xubuntu 14.04.3 no se ha instaladoSendEmail
Vitaly Zdanevich

3
"sudo apt install sendemail" para instalar sendemail y agregar "-f obligatorios@email.com", un campo obligatorio desde para que el comando funcione. sendemail -f mandatory@email.com-t to@some.one -m "Here are your files!" -a file1.jpg file2.zip
Sailendra Pinupolu

28

Yo uso mpack.

mpack -s subject file user@example.com

Desafortunadamente, mpack no reconoce '-' como un alias para stdin. Pero el siguiente trabajo, y puede ser fácilmente envuelto en un alias (shell) o un script:

mpack -s subject /dev/stdin loser@example.com < file

Esto podría funcionar en bash para stdin. No tengo mpack, así que no lo he intentado:mpack -s subject /dev/stdin loser@example.com <(stdout_generating_program)
thomasa88

23
 echo 'These are contents of my mail' | mailx -s 'This is my email subject' -a /path/to/attachment_file.log email_id@example.com

44
Esta debería ser la respuesta aceptada. Utiliza mailx por defecto y funciona perfectamente. Mutt v1.5.21 se niega a enviar> 1 MB de archivos adjuntos cuando se usa cron.
Joseph

Estaba buscando algo que funcione en EC2 y esto funcionó bien.
singularidad

66
mailxno está correctamente estandarizado Cualquier respuesta que lo recomiende debe señalar esta advertencia. Hay al menos tres variantes incompatibles en uso común.
tripleee

13

Una vez escribí esta función para ksh en Solaris (usa Perl para la codificación base64):

# usage: email_attachment to cc subject body attachment_filename
email_attachment() {
    to="$1"
    cc="$2"
    subject="$3"
    body="$4"
    filename="${5:-''}"
    boundary="_====_blah_====_$(date +%Y%m%d%H%M%S)_====_"
    {
        print -- "To: $to"
        print -- "Cc: $cc"
        print -- "Subject: $subject"
        print -- "Content-Type: multipart/mixed; boundary=\"$boundary\""
        print -- "Mime-Version: 1.0"
        print -- ""
        print -- "This is a multi-part message in MIME format."
        print -- ""
        print -- "--$boundary"
        print -- "Content-Type: text/plain; charset=ISO-8859-1"
        print -- ""
        print -- "$body"
        print -- ""
        if [[ -n "$filename" && -f "$filename" && -r "$filename" ]]; then
            print -- "--$boundary"
            print -- "Content-Transfer-Encoding: base64"
            print -- "Content-Type: application/octet-stream; name=$filename"
            print -- "Content-Disposition: attachment; filename=$filename"
            print -- ""
            print -- "$(perl -MMIME::Base64 -e 'open F, shift; @lines=<F>; close F; print MIME::Base64::encode(join(q{}, @lines))' $filename)"
            print -- ""
        fi
        print -- "--${boundary}--"
    } | /usr/lib/sendmail -oi -t
}

8
En GNU / Linux, uno puede usar el base64comando en lugar de Perl para codificar
MestreLion

12

Puede usar mutt para enviar el correo electrónico con el archivo adjunto

mutt -s "Backup" -a mysqldbbackup.sql backup@email.com < message.txt

2
Al menos a partir de mutt 1.5.21 (Ubuntu de confianza), debe colocar la -aopción después del destinatario: mutt -s "Backup" backup@email.com -a mysqldbbackup.sql < message.txto usar la --opción antes del destinatario como se muestra en la respuesta de rynop.
nealmcb

10

Envíe un correo electrónico con texto sin formato con un archivo adjunto de texto sin formato con mailx:

(
  /usr/bin/uuencode attachfile.txt myattachedfilename.txt; 
  /usr/bin/echo "Body of text"
) | mailx -s 'Subject' youremail@gmail.com

A continuación se muestra el mismo comando que el anterior, sin las nuevas líneas.

( /usr/bin/uuencode /home/el/attachfile.txt myattachedfilename.txt; /usr/bin/echo "Body of text" ) | mailx -s 'Subject' youremail@gmail.com

Asegúrese de tener un archivo /home/el/attachfile.txtdefinido con este contenido:

<html><body>
Government discriminates against programmers with cruel/unusual 35 year prison
sentences for making the world's information free, while bankers that pilfer 
trillions in citizens assets through systematic inflation get the nod and 
walk free among us.
</body></html>

Si no tiene uuencode, lea esto: /unix/16277/how-do-i-get-uuencode-to-work

En Linux, envíe el correo electrónico del cuerpo HTML con un archivo adjunto PDF con sendmail:

Asegúrese de tener instalado ksh: yum info ksh

Asegúrese de tener sendmail instalado y configurado.

Asegúrese de tener uuencode instalado y disponible: /unix/16277/how-do-i-get-uuencode-to-work

Crea un nuevo archivo llamado test.shy ponlo en tu directorio personal:/home/el

Pon el siguiente código en test.sh:

#!/usr/bin/ksh
export MAILFROM="el@defiant.com"
export MAILTO="youremail@gmail.com"
export SUBJECT="Test PDF for Email"
export BODY="/home/el/email_body.htm"
export ATTACH="/home/el/pdf-test.pdf"
export MAILPART=`uuidgen` ## Generates Unique ID
export MAILPART_BODY=`uuidgen` ## Generates Unique ID

(
 echo "From: $MAILFROM"
 echo "To: $MAILTO"
 echo "Subject: $SUBJECT"
 echo "MIME-Version: 1.0"
 echo "Content-Type: multipart/mixed; boundary=\"$MAILPART\""
 echo ""
 echo "--$MAILPART"
 echo "Content-Type: multipart/alternative; boundary=\"$MAILPART_BODY\""
 echo ""
 echo "--$MAILPART_BODY"
 echo "Content-Type: text/plain; charset=ISO-8859-1"
 echo "You need to enable HTML option for email"
 echo "--$MAILPART_BODY"
 echo "Content-Type: text/html; charset=ISO-8859-1"
 echo "Content-Disposition: inline"
 cat $BODY
 echo "--$MAILPART_BODY--"

 echo "--$MAILPART"
 echo 'Content-Type: application/pdf; name="'$(basename $ATTACH)'"'
 echo "Content-Transfer-Encoding: uuencode"
 echo 'Content-Disposition: attachment; filename="'$(basename $ATTACH)'"'
 echo ""
 uuencode $ATTACH $(basename $ATTACH)
 echo "--$MAILPART--"
) | /usr/sbin/sendmail $MAILTO

Cambie las variables de exportación en la parte superior test.shpara reflejar su dirección y nombres de archivo.

Descargue un documento pdf de prueba y póngalo en /home/elpdf-test.pdf

Cree un archivo llamado /home/el/email_body.htm y ponga esta línea en él:

<html><body><b>this is some bold text</b></body></html>

Asegúrese de que el archivo pdf tenga suficientes 755 permisos.

Ejecute el script ./test.sh

Verifique su bandeja de entrada de correo electrónico, el texto debe estar en formato HTML y el archivo pdf debe interpretarse automáticamente como un archivo binario. Tenga cuidado de no usar esta función más de 15 veces en un día, incluso si se envía los correos electrónicos a usted mismo, los filtros de spam en gmail pueden incluir en la lista negra un dominio que arroja correos electrónicos sin darle la opción de dejarlos pasar. Y descubrirá que esto ya no funciona, o solo deja pasar el archivo adjunto, o el correo electrónico no llega en absoluto. Si tiene que hacer muchas pruebas sobre esto, extiéndalas durante días o se lo etiquetará como spammer y esta función ya no funcionará.


1
Para mí funcionó al revés. (echo 'Email Body'; uuencode filename filename) | mailx -s 'Subject' user@domain.com
Vicky

uuencodeno es correctamente un archivo adjunto. Simplemente incrusta un blob de texto legible por computadora en el medio de algún otro texto. Solía ​​funcionar bien cuando no había ningún mecanismo mejor, pero eso fue hace más de 20 años.
tripleee

9

Aquí hay varias respuestas que sugieren mailo mailxmás, esto es más un trasfondo para ayudarlo a interpretarlas en contexto.

Notas historicas

Los orígenes de Unix mailse remontan a las brumas de la historia temprana de Bell Labs Unix ™ (¿1969?), Y probablemente no podamos esperar entrar en su genealogía completa aquí. Baste decir que hay muchos programas que heredan código o se vuelven a implementar (o heredan código de una reimplementación de) maily que no hay una base de código única que pueda identificarse sin ambigüedades como "la" mail.

Sin embargo, uno de los contendientes a esa posición es ciertamente "Berkeley Mail", que originalmente se llamó Mailcon una M mayúscula en 2BSD (1978); pero en 3BSD (1979), también reemplazó el mailcomando en minúsculas, lo que generó una nueva confusión. SVR3 (1986) incluyó un derivado que se llamó mailx. El xpresumiblemente fue agregado para hacerlo único y distinto; pero esto también se ha copiado, reimplementado y mutilado para que no haya una única versión individual que sea definitiva.

En el pasado, el estándar de facto para enviar binarios a través del correo electrónico era uuencode. Todavía existe, pero tiene numerosos problemas de usabilidad; si es posible, debe enviar archivos adjuntos MIME en su lugar, a menos que se esfuerce específicamente por comunicarse con fines de la década de 1980.

MIME se introdujo a principios de la década de 1990 para resolver varios problemas con el correo electrónico, incluido el soporte para varios tipos de contenido que no sean texto sin formato en un solo conjunto de caracteres que solo es realmente adecuado para un subconjunto de inglés (y, según nos dicen, hawaiano ) Esto introdujo soporte para mensajes multiparte, internacionalización, tipos de contenido enriquecido, etc., y rápidamente ganó popularidad a lo largo de la década de 1990.

(Las notas de la herencia mail/ mailxhistoria fueron más útiles al componer esto, y ciertamente vale la pena leerlas si te gusta ese tipo de cosas).

Ofertas actuales

A partir de 2018, Debian tiene tres paquetes que incluyen un comando mailo mailx. (Puedes buscar Provides: mailx).

debian$ aptitude search ~Pmailx
i   bsd-mailx                       - simple mail user agent
p   heirloom-mailx                  - feature-rich BSD mail(1)
p   mailutils                       - GNU mailutils utilities for handling mail

(No estoy señalando a Debian como una recomendación; es lo que uso, así que estoy familiarizado con él; y proporciona un medio para distinguir las diversas alternativas sin ambigüedades al referirme a sus respectivos nombres de paquete. Obviamente también es la distribución de qué Ubuntu obtiene estos paquetes).

  • bsd-mailxes relativamente simple mailxy no parece admitir el envío de archivos adjuntos MIME. Consulte su página de manual y tenga en cuenta que este es el que esperaría encontrar en un sistema * BSD, incluido MacOS, de forma predeterminada.
  • heirloom-mailxque ahora se llama s-naily hace el envío de archivos adjuntos MIME con soporte -a. Consulte su página de manual y, en general, el proyecto Heirloom
  • mailutilstambién conocido como GNU Mailutils incluye un mail/ mailxenvoltura de compatibilidad , que hace el envío de archivos adjuntos MIME con apoyo-A

Con estas inquietudes, si necesita que su código sea portátil y pueda depender de un paquete algo complejo, la forma más sencilla de enviar archivos adjuntos MIME de forma portátil es utilizarlo mutt.


Originalmente publiqué esto como respuesta a una pregunta duplicada moderadamente popular stackoverflow.com/questions/902591/…
tripleee

4

Otra alternativa: Swaks ( navaja suiza para SMTP).

swaks -tls \
    --to ${MAIL_TO} \
    --from ${MAIL_FROM} \
    --server ${MAIL_SERVER} \
    --auth LOGIN \
    --auth-user ${MAIL_USER} \
    --auth-password ${MAIL_PASSWORD} \
    --header "Subject: $MAIL_SUBJECT" \
    --header "Content-Type: text/html; charset=UTF-8" \
    --body "$MESSAGE" \
    --attach mysqldbbackup.sql

2

metamail tiene la herramienta metasend

metasend -f mysqlbackup.sql.gz -t backup@email.com -s Backup -m application/x-gzip -b

Esto solía instalarse en casi todas partes, pero casi nunca se usaba. Debido a que no se mantuvo durante mucho tiempo (y todavía es AFAIK), se ha eliminado del conjunto de herramientas estándar de facto en muchas plataformas.
tripleee

2

solía

echo "Start of Body" && uuencode log.cfg readme.txt | mail -s "subject" "a@b.c" 

y esto funcionó bien para mí ...


1

Por lo general, solo uso el comando de correo en RHEL. He intentado mailx y es bastante eficiente.

mailx -s "Sending Files" -a First_LocalConfig.conf -a
Second_LocalConfig.conf Recipient@myemail.com

This is the content of my msg.

.

1

el camino más corto para mí es

file=filename_or_filepath;uuencode $file $file|mail -s "optional subject" email_address

así que para su ejemplo será

file=your_sql.log;gzip -c $file;uuencode ${file}.gz ${file}|mail -s "file with magnets" ph.gachoud@gmail.com

Lo bueno es que puedo recordarlo con Ctrl + r para enviar otro archivo ...


Las llaves no te harán mucho bien, pero para ser completamente portátil debes usar comillas dobles alrededor de las variables. Ver también stackoverflow.com/questions/10067266/…
tripleee

1

De la máquina de origen

mysqldump --defaults-extra-file=sql.cnf database | gzip | base64 | mail me@myemail.com

En la máquina de destino. Guarde el cuerpo del correo recibido como db.sql.gz.b64 ; luego..

base64 -D -i db.sql.gz.b64 | gzip -d | mysql --defaults-extra-file=sql.cnf

0

Solo para agregar mis 2 centavos, escribiría mi propio script PHP:

http://php.net/manual/en/function.mail.php

Hay muchas formas de hacer el archivo adjunto en los ejemplos de esa página.


2
No todos los servidores pueden tener PHP instalado. Si realmente desea ir por el camino de "escriba su propio script", entonces Perl o Python son mucho más adecuados, ya que generalmente están disponibles de forma predeterminada.
exhuma

shEs aún más omnipresente. Hay preguntas duplicadas con respuestas con buenos ejemplos; aquí esta el mio.
tripleee

0

mailxtiene una -aopción ahora para archivos adjuntos.


2
La opción "-a" es para encabezados
Yves Martin

man mail [x], versión 12.5 del 10/9/10 (hace unos años) dice claramente -a archivo Adjunte el archivo dado al mensaje.`
fche

44
Algunas versiones de mailxdo. Creo que hay dos implementaciones. En uno -aes para archivos adjuntos, en el otro es para encabezados.
exhuma

1
La versión de mailx en Ubuntu proviene de GNU y allí -a significa agregar un encabezado. manpages.ubuntu.com/manpages/lucid/en/man1/mailx.1.html ¿Qué sistema y qué mailx hace un archivo adjunto?
nealmcb

3
En la nueva implementación "-a" es para Encabezados y "-A" es para archivos adjuntos
Avi Mehenwal

0

No es un método para enviar correos electrónicos, pero puede usar un servidor Git en línea (por ejemplo, Bitbucket o un servicio similar) para eso.

De esta manera, puede usar git pushcomandos, y todas las versiones se almacenarán de forma comprimida y organizada.


0

Así es como lo estoy haciendo con un archivo de registro grande en CentOS:

MAIL="`whereis mail | awk '{print $2}'`"
WHOAMI="`whoami`"
HOSTNAME="`hostname`"
EMAIL"your@email.address"
LOGDIR="/var/log/aide"
LOGNAME="`basename "$0"`_`date "+%Y%m%d_%H%M"`"
# Arhiveerime ning kui hästi, saadame edasi:
/bin/tar -zcvf ${LOGDIR}/${LOGNAME}.tgz "${LOGDIR}/${LOGNAME}.log" > /dev/null 2>&1
if [ $? -eq 0 ]; then
    cd ${LOGDIR}
    # This works too. The message content will be taken from text file below
    # echo 'Hello!' >/root/scripts/audit_check.sh.txt
    # echo "Arhiivifail manuses" | ${MAIL} -s "${HOSTNAME} Aide report" -q /root/scripts/audit_check.sh.txt -a ${LOGNAME}.tgz -S from=${WHOAMI}@${HOSTNAME} ${EMAIL}
    echo "Arhiivifail manuses" | ${MAIL} -s "${HOSTNAME} Aide report" -a ${LOGNAME}.tgz -S from=${WHOAMI}@${HOSTNAME} ${EMAIL}
    /bin/rm "${LOGDIR}/${LOGNAME}.log"
fi

¿Por qué estás definiendo WHOAMIy HOSTNAME dos veces?
David C. Rankin

Esto tiene varios errores de estilo de codificación de shell. shellcheck.net señalará algunos, pero no todos, de ellos.
tripleee

0

Si el archivo es texto, puede enviarlo más fácilmente en el cuerpo como:

sendmail recipient@example.com < message.txt

1
Esto no lo envía como un archivo adjunto, o incluso como el cuerpo del mensaje. Sendmail espera que su entrada sea un mensaje de correo electrónico RFC5322 completo y bien formado, y puede fallar de maneras interesantes si no lo es.
tripleee

0

usando el comando mailx

 echo "Message Body Here" | mailx -s "Subject Here" -a file_name user@example.com

usando sendmail

#!/bin/ksh

fileToAttach=data.txt

`(echo "To: user@company.com"
  echo "Cc: user@company.com"
  echo "From: Application"
  echo "Subject: your subject"
  echo  your body
  uuencode $fileToAttach $fileToAttach
  )| eval /usr/sbin/sendmail -t `;

1
sendmail es un buen ejemplo, me alegro de haberlo encontrado aquí.
Honza P.

Tenga en cuenta que necesita una línea vacía al comienzo de "su cuerpo", de lo contrario, el cuerpo desaparecerá en los encabezados o posiblemente romperá el mensaje por completo. También vea notas en otra parte sobre evitar uuencodea favor de MIME.
tripleee

Y los monstruosos evaly misteriosos comentarios en torno a todo el artilugio son completamente innecesarios aquí.
tripleee

0

Mailutils hace que esto sea pan comido

echo "Body" | mail.mailutils -M -s "My Subject" -A attachment.pdf mail@example.org
  • -A file adjunta un archivo
  • -M habilita MIME, para que pueda tener un archivo adjunto y cuerpo de texto sin formato.

Si aún no está instalado, ejecute

sudo apt install mailutils

0

Dependiendo de sus opciones de comando de correo (verifíquelo man mail) y la versión que podría hacer

echo yourBody|mail -s yoursubject -A /your/attachment/file john@doe.com


Esto parece duplicar las respuestas existentes sin agregar nada nuevo, sobre todo la -Aopción es específica de la mailutilsversión GNU de mailcomo se señaló en mi respuesta, así como en @ rumpel's
tripleee

-1

Si mutt no funciona o no está instalado, intente esto:

*#!/bin/sh

FilePath=$1
FileName=$2
Message=$3
MailList=$4

cd $FilePath

Rec_count=$(wc -l < $FileName)
if [ $Rec_count -gt 0 ]
then
(echo "The attachment contains $Message" ; uuencode $FileName $FileName.csv ) | mailx -s "$Message" $MailList
fi*
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.