Cómo preprocar mis correos electrónicos para tener enlaces a mis archivos adjuntos

StackOverflow https://stackoverflow.com/questions/7385694

  •  29-10-2019
  •  | 
  •  

Pregunta

Estoy usando Mutt sobre SSH como mi cliente de correo. Esto funciona muy bien, pero mirar los archivos adjuntos (principalmente imágenes) es un poco molesto. Ahora mi idea es analizar el correo electrónico, almacenar los archivos adjuntos en mi servidor y crear una URL para acceder al archivo adjunto y colocar esta URL dentro del correo electrónico. ¿Alguien ha hecho esto ya? ¿Cuál es una forma simple de lograr esto?

Ya estoy usando Procmail para filtrar cosas, ¿puedo usarlo para insertar texto en mi correo electrónico?

Gracias

¿Fue útil?

Solución

Seguro que puede. Sin embargo, no hay soporte directo para MIME, por lo que probablemente necesite algo más o menos inteligente para asegurarse de no estropear la estructura de MIME del mensaje que está procesando.

Como un simple ejemplo de inicio, suponga que ha extraído un accesorio a ~/public_html/prv/att000.jpg y haga que su servidor web esté configurado para servir esto en http://localhost:8080/~you/prv/att00.jpg, podrías agregar un encabezado como este;

:0fhw
| formail -I"X-Tracted: http://localhost:8080/~you/prv/att00.jpg"

Agregar algo en línea al mensaje en sí es más difícil, pero no es imposible.

Editar: Su script se puede simplificar para no usar un archivo temporal (y por el BY, evite los múltiples Usos inútiles del gato) Si extrae el ID de mensaje de su receta:

# Whitespace in [square brackets] is tab, space
:0c
* ^Message-Id:[   ]*<\/[^@>]+
| (mkdir -p "webserver path"/"$MATCH"; munpack -C "webserver path"/"$MATCH" )

... Pero tal vez desee mantener su script (sin los gatos inútiles) y modificarlo para que no solo extraiga los archivos adjuntos, sino que también cree un mensaje modificado en la salida estándar con los enlaces a los archivos adjuntos en línea.

Puedo sugerir tres opciones, todas las cuales son ligeramente engorrosas. Supongamos que su mensaje entrante es un (multipart/mixto (texto/simple (multipart/texto relacionado/imagen html/imagen png/png))); tú podrías

  1. Envuelva su mensaje en un (multipart/relacionado (texto/simple: su lista de enlaces aquí) (mensaje/RFC822: mensaje original aquí: (multipart/mixto (texto/simple (multipart/texto relacionado/imagen html/imagen png/png )))). Esto no requiere que analice el mensaje original, pero es incómodo de ver en la mayoría de los clientes.

  2. Suponga que siempre hay un texto/parte simple, y adjunte la lista de enlaces a su final. Esto requiere que la lógica busque y extienda el primer texto/parte simple, y algún tipo de alternativa si no hay un texto/parte simple como la primera parte.

  3. Suponga que todos sus mensajes son multipart/* y simplemente agregue un texto/parte simple cerca del comienzo, como la primera parte, o inmediatamente después del primer texto/parte simple. Esto requiere la misma lógica, y puede ser incómodo de ver en algunos clientes, pero hace menos suposiciones sobre el mensaje entrante, y por lo tanto podría ser más seguro.

Si puede codificar esto, invocar a Procmail en él es bastante simple; Solo omita el h Indicando de la receta anterior (que especifica solo filtrar en los encabezados).

:0fw
| replace-entire-message-with-a-different-message

Otros consejos

Por el momento tengo esto:

En Procmail hago una copia como esta:

:0c
| myscript.sh

luego en myscript.sh

path="webserver path"

tee _temp >& /dev/null # is there a different way of doing this?

# extract message-id
mid=$(cat _tempmail | formail -c -x message-id - | sed 's/ <\(.*\)@.*>/\1/')

mkdir $path/$mid

# extract all attachments into directory depending on the message id
cat _tempmail | munpack -C $path/$mid

Entonces, lo único que tengo que hacer es obtener el ID de mensaje del correo y crear mi URL.

Según lo sugerido por Tripleee, podría agregar esta URL como encabezado.

Sería genial si hay un enlace en el mensaje, tal vez lo haga en otro momento. Por el momento, estoy bien con esta solución.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top