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 [email protected]
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.
fuente

mysqldumpy 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/htmlcon 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 sentmuttcomando, 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-aopciónmail: me confundí allí por un minuto;)-a, --append=HEADER: VALUE append given header to the message being sent-A, --attach=FILE attach FILEAl 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
sendemailysendEmailen/usr/bin/.SendEmailsendemail -f [email protected] [email protected] -m "Here are your files!" -a file1.jpg file2.zipYo 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
mailxno 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
base64comando en lugar de Perl para codificarPuede usar mutt para enviar el correo electrónico con el archivo adjunto
fuente
-aopción después del destinatario:mutt -s "Backup" [email protected] -a mysqldbbackup.sql < message.txto 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.txtdefinido 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 kshAsegú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/elPon el siguiente código en
test.sh: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.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.shVerifique 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]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.Aquí hay varias respuestas que sugieren
mailomailxmá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ó elmailcomando en minúsculas, lo que generó una nueva confusión. SVR3 (1986) incluyó un derivado que se llamómailx. Elxpresumiblemente 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
mailomailx. (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-mailxes relativamente simplemailxy 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 llamas-naily hace el envío de archivos adjuntos MIME con soporte-a. Consulte su página de manual y, en general, el proyecto Heirloommailutilstambién conocido como GNU Mailutils incluye unmail/mailxenvoltura de compatibilidad , que hace el envío de archivos adjuntos MIME con apoyo-ACon 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
shEs aún más omnipresente. Hay preguntas duplicadas con respuestas con buenos ejemplos; aquí esta el mio.mailxtiene una-aopción ahora para archivos adjuntos.fuente
mailxdo. Creo que hay dos implementaciones. En uno-aes 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 pushcomandos, 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
WHOAMIyHOSTNAMEdos veces?Si el archivo es texto, puede enviarlo más fácilmente en el cuerpo como:
fuente
usando el comando mailx
usando sendmail
fuente
uuencodea favor de MIME.evaly misteriosos comentarios en torno a todo el artilugio son completamente innecesarios aquí.Mailutils hace que esto sea pan comido
-A fileadjunta un archivo-Mhabilita 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
-Aopción es específica de lamailutilsversión GNU demailcomo se señaló en mi respuesta, así como en @ rumpel'sSi mutt no funciona o no está instalado, intente esto:
fuente