2010-04-01 9 views
6

me gusta ver las diferencias existentes en los archivos de origen que estoy trabajando con un comando como:¿Es posible enviar por correo electrónico el contenido de vim utilizando HTML

vim <(svn diff -dub) 

Lo que realmente me gustaría estar capaz de hacer es enviar por correo electrónico esa diferencia coloreada. Sé que vim puede exportar HTML con: TOhtml, pero ¿cómo canalizo esta salida en un correo electrónico html? Idealmente. Me gustaría poder enviar un html diff con un solo comando de script de shell.

Respuesta

10

La siguiente de una sola línea produce un archivo HTML denominado email.html:

diff file1 file2 | vim - +TOhtml '+w email.html' '+qall!' 

Ahora puede utilizar el código de Pekka para enviar el correo electrónico.

Sin embargo,, creo en usar la herramienta adecuada para el trabajo correcto, y VIM puede no ser la herramienta adecuada aquí. Existen otros marcadores y su uso es más apropiado aquí.

Por ejemplo, Pygments puede aprovecharse para producir el mismo resultado, mucho más eficiente y libre de problemas:

diff -u report.log .report.log | pygmentize -l diff -f html > email.html 

Tenga en cuenta que esto produce única el cuerpo del texto actual, no la hoja de estilo, ni el andamio HTML circundante. Esto debe agregarse por separado, pero eso tampoco es difícil. Aquí hay un script bash completa para producir un archivo HTML mínima válida:

echo '<!DOCTYPE html><html><head><title>No title</title><style>' > email.html 
pygmentize -S default -f html >> email.html 
echo '</style></head><body>' >> email.html 
diff -u report.log .report.log | pygmentize -l diff -f html >> email.html 
echo '</body></html>' >> email.html 

EDITAR En caso de que el código de Pekka no trabajar - en cuanto a mí - porque no tiene las versiones requeridas de mail y mutt instalado, puede utilizar sendmail de la siguiente manera para enviar el correo electrónico HTML:

(echo 'To: [email protected]' 
    echo 'Content-Type: text/html' 
    echo 'Subject: test' 
    echo '' 
    cat email.html) | sendmail -t 

es importante dejar una línea en blanco entre el encabezado y el cuerpo del correo electrónico. Además, observe que, por supuesto, no es necesario crear el archivo temporal email.html. Simplemente pegue el resto de los comandos en el lugar correcto de arriba y elimine los redireccionamientos al archivo.

+0

tiene una definición interesante de "más eficiente y sin problemas". +1 sobre cómo hacer que vim escriba y salga de la línea de comando. – rampion

+0

puedes cambiar el "+ w email.html" por el de "+%! Mutt" o lo que sea para que vim invoque el comando de correo directamente – rampion

+0

@rampion: Lanzar Vim de esa manera es bastante ineficiente. Pygments lo supera fácilmente.Sin complicaciones me refiero simplemente a que el flujo de trabajo de Pygments es conceptualmente más fácil ("sintaxis-resaltar un diff", en oposición a "abrir un diff en un editor, ejecutar un comando, cerrar el editor") aunque sea más texto para escribir. Ambos métodos tienen sus méritos, creo. –

1

No soy un Linux Guru, pero esto parece que debería servir a sus necesidades a la tubería de su salida en:

Send an HTML file as email from the command line. (utiliza mail)

También hay una sola línea de mutt ejemplo here:

mutt -e "my_hdr Content-Type: text/html" 
    -s "my subject" [email protected] < message.html 

esto generará un código HTML puro E-mail con otra alternativa de texto puro - para eso se tendría que construir electrónico de varias partes ... Pero a lo mejor va a hacer por lo que necesita.

+0

¿Desea explicar el voto a favor? ¿Hay algo técnicamente incorrecto aquí? –

Cuestiones relacionadas