puede - ¿Cómo adjuntar un archivo usando el comando de correo en Linux?
mandar un correo desde linux (13)
Con mailx puedes hacer:
mailx -s "My Subject" -a ./mail_att.csv -S [email protected] [email protected] < ./mail_body.txt
Esto funcionó muy bien en nuestros servidores GNU Linux, pero desafortunadamente mi entorno de desarrollo es Mac OsX, que solo tiene una vieja versión BSD de mailx. Normalmente uso Coreutils para obtener mejores versiones de comandos Unix que los Mac BSD, pero mailx no está en Coreutils.
Encontré una solución de notpeter en un hilo no relacionado ( https://serverfault.com/questions/196001/using-unix-mail-mailx-with-a-modern-mail-server-imap-instead-of-mbox-files ) que era descargar el paquete binario Heirloom mailx OSX de http://www.tramm.li/iWiki/HeirloomNotes.html . Tiene un mailx más destacado que puede manejar la sintaxis del comando anterior.
(Disculpas por los enlaces cruzados o la atribución, soy nuevo en el sitio).
Esta pregunta ya tiene una respuesta aquí:
Estoy en un servidor que ejecuta un shell de Linux. Necesito enviar un archivo simple a un destinatario. ¿Cómo hacer esto, preferiblemente usando solo el comando de correo ?
ACTUALIZACIÓN : obtuve una buena solución, usando mutt en su lugar:
$ echo | mutt -a syslogs.tar.gz [email protected]
Ejemplo usando uuencode:
uuencode surfing.jpeg surfing.jpeg | mail [email protected]
y artículo de referencia:
El viejo mail
simple puede hacerlo. Sin necesidad de otro software:
matiu@matiu-laptop:~$ mail -a doc.jpg [email protected]
Subject: testing
This is a test
EOT
ctrl + d cuando hayas terminado de escribir.
En Linux sugeriría,
# FILE_TO_BE_ATTACHED = abc.gz
uuencode abc.gz abc.gz > abc.gz.enc # This is optional, but good to have
# to prevent binary file corruption.
# also it make sure to get original
# file on other system, w/o worry of endianness
# Sending Mail, multiple attachments, and multiple receivers.
echo "Body Part of Mail" | mailx -s "Subject Line" -a attachment1 -a abc.gz.enc "[email protected] [email protected]"
Al recibir el archivo adjunto, si ha usado uuencode, necesitaría uudecode
uudecode abc.gz.enc
# Esto generará un archivo como original con el mismo nombre que el segundo argumento para uuencode.
Hay muchas respuestas aquí usando mutt o mailx o personas que dicen que el correo no admite "-a"
Primero, el correo de Ubuntu 14.0.4 de Mailutils soporta esto:
correo -un nombre-archivo -s "asunto" [email protected]
En segundo lugar, encontré que al usar el comando "man mail" y buscar "adjuntar"
La siguiente es una solución decente en instalaciones Unix / Linux, que no depende de ninguna característica inusual del programa. Esto admite un cuerpo de mensaje de múltiples líneas, múltiples archivos adjuntos y todas las otras características típicas de mailx
.
Desafortunadamente, no cabe en una sola línea.
#!/bin/ksh
# Get the date stamp for temporary files
DT_STAMP=`date +''%C%y%m%d%H%M%S''`
# Create a multi-line body
echo "here you put the message body
which can be split across multiple lines!
woohoo!
" > body-${DT_STAMP}.mail
# Add several attachments
uuencode File1.pdf File1.pdf > attachments-${DT_STAMP}.mail
uuencode File2.pdf File2.pdf >> attachments-${DT_STAMP}.mail
# Put everything together and send it off!
cat body-${DT_STAMP}.mail attachments-${DT_STAMP}.mail > out-${DT_STAMP}.mail
mailx -s "here you put the message subject" [email protected] < out-${DT_STAMP}.mail
# Clean up temporary files
rm body-${DT_STAMP}.mail
rm attachments-${DT_STAMP}.mail
rm out-${DT_STAMP}.mail
Mi respuesta necesita base64 además del correo, pero algunas versiones de uuencode también pueden hacer base64 con -m, o puedes olvidarte de mime y usar la salida de uuencode simple ...
[email protected]
[email protected]
SUBJECT="Auto emailed"
MIME="application/x-gzip" # Adjust this to the proper mime-type of file
FILE=somefile.tar.gz
ENCODING=base64
boundary="---my-unlikely-text-for-mime-boundary---$$--"
(cat <<EOF
From: $FROM
To: $REPORT_DEST
Subject: $SUBJECT
Date: $(date +"%a, %b %e %Y %T %z")
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="$boundary"
Content-Disposition: inline
--$boundary
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
This email has attached the file
--$boundary
Content-Type: $MIME;name="$FILE"
Content-Disposition: attachment;filename="$FILE"
Content-Transfer-Encoding: $ENCODING
EOF
base64 $FILE
echo ""
echo "--$boundary" ) | mail
Uso mailutils y la parte confusa es que para adjuntar un archivo necesita usar el parámetro A mayúscula. a continuación hay un ejemplo.
echo ''here you put the message body'' | mail -A syslogs.tar.gz [email protected]
Si desea saber si su comando de correo proviene de mailutils, simplemente ejecute "mail -V".
root@your-server:~$ mail -V
mail (GNU Mailutils) 2.99.98
Copyright (C) 2010 Free Software Foundation, inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Utilizando ubuntu 10.4, así es como se escribe la solución mutt
echo | mutt -a myfile.zip -- [email protected]
mpack -a -s "Oye: ¿podría servir como tu informe?" -m 0 -c application / x-tar-gz survey_results.tar.gz [email protected]
mpack y munpack funcionan junto con metamail para extender mailx y hacerlo útil con correos electrónicos modernos repletos de marcas de HTML y archivos adjuntos.
Esos cuatro paquetes en conjunto le permitirán manejar cualquier correo electrónico que pueda en un cliente de correo gui.
mailx podría ayudar. De la página man de mailx:
-a file
Attach the given file to the message.
Bastante fácil, ¿verdad?
$ echo | mutt -a syslogs.tar.gz [email protected]
Pero usa mutt, no mail (o mailx).
mailx -a /path/to/file email@address
Puede pasar al modo interactivo (le indicará "Asunto:" y luego una línea en blanco), ingrese un asunto, luego ingrese un cuerpo y presione Ctrl + D (EOT) para finalizar.