¿Cómo puedo enviar un archivo adjunto por correo electrónico desde la línea de comandos?

26

¿Es posible enviar archivos adjuntos por correo electrónico desde la línea de comandos?

Si es posible, me gustaría algo tan simple como:

mail -a myfile.txt -t [email protected] -s "Here's my file"
conorgriffin
fuente
1
El agente de usuario de correo de línea de comando predeterminado de ubuntu mail(aka mailx) es ignorante de MIME, por lo tanto, no puede manejar archivos adjuntos de ninguna manera que no sea de 1980. Esta es una buena pregunta, estoy buscando el canónico canónico MUA; más por venir.
msw

Respuestas:

18

De todos los agentes de usuario de correo en el repositorio de Ubuntu, parece que mutt es el MUA de línea de comandos que está bendecido con soporte a largo plazo.

Según el manual , puede hacer algo exactamente como:

mutt -a myfile.txt -s "Here's my file" -- [email protected]

excepto que no irá a ningún lado ya que uno también necesita un Agente de transferencia de correo. Los populares son:

  • el venerable sendmail
  • sufijo
  • exim4
  • qmail
  • nullmailer

y los únicos que Canonical parece admitir son postfix (gracias por la corrección Steve) y exim4 .

También se podría decir que xdg-email también es un MUA de Ubuntu adecuado, pero es un front-end básico que solo ejecuta su MUA preferido en su nombre.

Si desea consejos sobre qué MTA podría ser adecuado para su uso, quizás abra otra pregunta aquí.

msw
fuente
Gran pregunta, gracias. Me pediste que recibiera correo en mi caja. Utilicé nullmailer MTA para retransmitir ciegamente a mi ISP, y el muttcomando de ejemplo funcionó como se anuncia. Por cierto, nullmailer tiene un front-end falso de sendmail para que la mayoría de los programas que esperan hablar con sendmail sean trasladados a un MTA real sin ningún esfuerzo de mi parte.
msw
msw, no estoy muy seguro de por qué afirmas que exim4 es el único soporte canónico, postfix también está en main y es lo que se habilita si seleccionas la selección de tareas del servidor de correo desde la instalación del servidor ubuntu. Creo que exim4 es el MTA predeterminado de Debian, y en el pasado, las preferencias de empaque pueden haber provocado que se introdujera de forma predeterminada, pero desde hace un tiempo, postfix es definitivamente el MTA preferido en Ubuntu.
Steve Beattie
Ah, y también tenga en cuenta que si fue con bsd mail / mailx como su MUA (no consciente de MIME), aún necesitaría un MTA de algún tipo para enviar el correo. Pero mutt es mejor para ti de todos modos. :-)
Steve Beattie
11

También tuve problemas para enviar archivos adjuntos. Cuando envié un correo electrónico sin archivo adjunto, fue exitoso pero no con el archivo adjunto. Este problema era inexistente con sendemail, mutt, mail, mailx, uuencodecomandos.

Afortunadamente, se resolvió de manera divertida. Yo uso Gmail para enviar correos electrónicos. Puede configurar su gmail para enviar correos electrónicos a través de comandos en la terminal como se declara en http://www.linuxandlife.com/2013/01/send-email-from-linux-terminal.html .

Puede enviar un correo electrónico de texto usando:

mail -s "hello" [email protected] < /home/masoud/YOURFILE.txt 

pero no puede enviar el mismo archivo como archivo adjunto que a continuación:

mail -s "hello" [email protected] -a /home/masoud/YOURFILE.txt

o:

mail -s "hello" -a /home/masoud/YOURFILE.txt [email protected]

Finalmente, entendí que solo este formato podía enviar un archivo adjunto:

echo "your message here" | mail -s "title" -a /home/masoud/YOURFILE.txt [email protected]

Curiosamente, la diferencia es la existencia del comando "echo".

Actualización: 201808

Parece que la -aopción se ha cambiado con mayúsculas -A para adjuntar ahora. El -aparece ser para cambiar el encabezado de acuerdo con el documento

Masoud
fuente
¡Excelente! Gracias. Estaba tratando de enviar mi .zshrcarchivo a alguien y, aunque uso mailmucho para enviar mensajes rápidos, intentar enviar un archivo adjunto no funcionaba. Solo necesitaba confirmación de que era posible darse cuenta de que el orden de los argumentos es muy importante. Esto funcionó para mí: mail -s "zshrc" -a ~/.zshrc [email protected]... por supuesto, aún tenía que escribir el cuerpo del mensaje y presionar ctrl+dla última línea en blanco.
Karl Wilbur
El uso mail [email protected] -a ~/.zshrc"funcionó" en el sentido de que envió el mensaje pero no envió el archivo. Si lo hubiera intentado mail [email protected] -a ~/.zshrc -s 'zshrc', habría sido obvio que se ignoraron los parámetros después de la dirección del destinatario.
Karl Wilbur
@Masoud lnk está roto ... quería actualizarlo, pero sabes mejor qué documentación proporcionaste, así que te lo dejé
Philippe Gachoud
6

Descubrí que el comando y los parámetros se han cambiado recientemente.

Si desea enviar sus archivos adjuntos con este comando:

mail -s "your subject" [email protected] -A /your/attachment/absolute/path < /home/you/message.txt

La opción attachmentdebería ser -Acuál es CAPITAL A.

Alex
fuente
3

Es posible que desee enviar un archivo desde el shell , pero de lo contrario utilice Thunderbird .

En este caso, try thunderbird -remote ...es útil, suponiendo que thunderbird generalmente se esté ejecutando:

El comando abre una ventana de redacción de correo de una instancia de Thunderbird en ejecución.
La dirección "De" es su dirección predeterminada configurada en Thunderbird.
Además, se utilizan las configuraciones de cuenta existentes , no se necesita una configuración por separado.

Para un correo dirigido a [email protected], con el asunto "S", el cuerpo "B" y un archivo adjunto /some/absolute/file.txt, el comando es

thunderbird -remote "xfeDoCommand(composeMessage,subject='S',to='[email protected]',body='B',attachment='/some/absolute/file.txt')"

Hay dos problemas:

El archivo adjunto debe ser proporcionado por una ruta absoluta , que es tediosa en la práctica. Eso se puede manejar usando readlink -fpara resolver rutas relativas:

thunderbird -remote "xfeDoCommand(composeMessage,subject='S',to='[email protected]',body='B',attachment='$(readlink -f file.txt)')"

Además, el comando es demasiado largo. Utilice un script de shell o una función de shell, con cuatro argumentos:

thunderbird-compose () {
    thunderbird -remote "xfeDoCommand(composeMessage,subject='$1',to='$2',body='$3',attachment='$(readlink -f $4)')"
}

Con esta función, el comando se vuelve legible:

thunderbird-compose 'Some Subject' [email protected] 'Body of message' file1

abrirá una ventana de "Escritura" de Thunderbird con el archivo adjunto , y el texto De, Para, Asunto y cuerpo completo. Se puede editar antes de enviarlo.

Volker Siegel
fuente
2

heirloom-mailxEl paquete en Debian proporciona el mailxcomando para enviar archivos adjuntos MIME fácilmente. siguientes trabajos para mí;

 mailx -a attachment.zip -s subject [email protected]
Furkan Mustafa
fuente
1
Esta era la pieza que faltaba que necesitaba; el maile mailxincluido con RH -alikes tiene -apara los archivos adjuntos, pero la incluida en Debian -alikes no.
DopeGhoti
0

Deseo agregar otra respuesta que se utiliza para agregar texto del cuerpo junto con el archivo adjunto. ¡¡Aclamaciones!!

echo "This is the message body" | mutt -a "/path/to/file.to.attach" -s "subject of message" -- [email protected]
Anandu M Das
fuente