Creé un script que se ejecuta todas las noches en mi servidor Linux que usa mysqldump
para 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 mailx
guste:
$ cat mysqldbbackup.sql | mailx [email protected]
cat
repite el texto del archivo de copia de seguridad que se canaliza en el mailx
programa 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.
fuente
mysqldump
y luego adjuntar la salida a un correo electrónico (conmutt
). Incluso podría haber tenido un paso que comprimió la salida a un archivo zip / tar.gz también ...Respuestas:
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:
fuente
O, en su defecto mutt:
fuente
text/html
con el tipo MIME que tenga sentido para su archivo adjunto. (Para este ejemplo concreto, supongoapplication/gzip
).Dependiendo de su versión de Linux, puede llamarse correo. Para citar a @David arriba:
o también:
fuente
-a, --append=HEADER: VALUE append given header to the message being sent
mutt
comando, nomail
. 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-a
opciónmail
: me confundí allí por un minuto;)-a, --append=HEADER: VALUE append given header to the message being sent
-A, --attach=FILE attach FILE
Al mirar
man mailx
, el programa mailx no tiene una opción para adjuntar un archivo. Podrías usar otro programa como mutt.Las opciones de línea de comando para mutt se pueden mostrar con
mutt -h
.fuente
--
.Yo uso SendEmail, que fue creado para este escenario. Está empaquetado para Ubuntu, así que supongo que está disponible
http://caspian.dotconf.net/menu/Software/SendEmail/
fuente
sendemail
ysendEmail
en/usr/bin/
.SendEmail
sendemail -f [email protected] [email protected] -m "Here are your files!" -a file1.jpg file2.zip
Yo uso mpack.
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:
fuente
mpack -s subject /dev/stdin [email protected] <(stdout_generating_program)
fuente
mailx
no está correctamente estandarizado Cualquier respuesta que lo recomiende debe señalar esta advertencia. Hay al menos tres variantes incompatibles en uso común.Una vez escribí esta función para ksh en Solaris (usa Perl para la codificación base64):
fuente
base64
comando en lugar de Perl para codificarPuede usar mutt para enviar el correo electrónico con el archivo adjunto
fuente
-a
opción después del destinatario:mutt -s "Backup" [email protected] -a mysqldbbackup.sql < message.txt
o usar la--
opción antes del destinatario como se muestra en la respuesta de rynop.Envíe un correo electrónico con texto sin formato con un archivo adjunto de texto sin formato con mailx:
A continuación se muestra el mismo comando que el anterior, sin las nuevas líneas.
Asegúrese de tener un archivo
/home/el/attachfile.txt
definido con este contenido: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.sh
y ponlo en tu directorio personal:/home/el
Pon el siguiente código en
test.sh
:Cambie las variables de exportación en la parte superior
test.sh
para reflejar su dirección y nombres de archivo.Descargue un documento pdf de prueba y póngalo en
/home/el
pdf-test.pdfCree un archivo llamado /home/el/email_body.htm y ponga esta línea en él:
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á.
fuente
(echo 'Email Body'; uuencode filename filename) | mailx -s 'Subject' [email protected]
uuencode
no 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.Aquí hay varias respuestas que sugieren
mail
omailx
más, esto es más un trasfondo para ayudarlo a interpretarlas en contexto.Notas historicas
Los orígenes de Unix
mail
se 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)mail
y 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ó
Mail
con una M mayúscula en 2BSD (1978); pero en 3BSD (1979), también reemplazó elmail
comando en minúsculas, lo que generó una nueva confusión. SVR3 (1986) incluyó un derivado que se llamómailx
. Elx
presumiblemente 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
/mailx
historia 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
mail
omailx
. (Puedes buscarProvides: mailx
).(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-mailx
es relativamente simplemailx
y 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-mailx
que ahora se llamas-nail
y hace el envío de archivos adjuntos MIME con soporte-a
. Consulte su página de manual y, en general, el proyecto Heirloommailutils
también conocido como GNU Mailutils incluye unmail
/mailx
envoltura 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
.fuente
Otra alternativa: Swaks ( navaja suiza para SMTP).
fuente
metamail tiene la herramienta metasend
fuente
solía
y esto funcionó bien para mí ...
fuente
Por lo general, solo uso el comando de correo en RHEL. He intentado mailx y es bastante eficiente.
fuente
el camino más corto para mí es
así que para su ejemplo será
Lo bueno es que puedo recordarlo con Ctrl + r para enviar otro archivo ...
fuente
De la máquina de origen
En la máquina de destino. Guarde el cuerpo del correo recibido como db.sql.gz.b64 ; luego..
fuente
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.
fuente
sh
Es aún más omnipresente. Hay preguntas duplicadas con respuestas con buenos ejemplos; aquí esta el mio.mailx
tiene una-a
opción ahora para archivos adjuntos.fuente
mailx
do. Creo que hay dos implementaciones. En uno-a
es para archivos adjuntos, en el otro es para encabezados.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 push
comandos, y todas las versiones se almacenarán de forma comprimida y organizada.fuente
Así es como lo estoy haciendo con un archivo de registro grande en CentOS:
fuente
WHOAMI
yHOSTNAME
dos veces?Si el archivo es texto, puede enviarlo más fácilmente en el cuerpo como:
fuente
usando el comando mailx
usando sendmail
fuente
uuencode
a favor de MIME.eval
y misteriosos comentarios en torno a todo el artilugio son completamente innecesarios aquí.Mailutils hace que esto sea pan comido
-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
fuente
Dependiendo de sus opciones de comando de correo (verifíquelo
man mail
) y la versión que podría hacerecho yourBody|mail -s yoursubject -A /your/attachment/file [email protected]
fuente
-A
opción es específica de lamailutils
versión GNU demail
como se señaló en mi respuesta, así como en @ rumpel'sSi mutt no funciona o no está instalado, intente esto:
fuente