Saltar al contenido

curl: envíe un correo electrónico html con una imagen incrustada y un archivo adjunto

este problema se puede abordar de diversas maneras, pero te mostramos la que para nosotros es la solución más completa.

Solución:

La solución que se me ocurrió es codificar en base64 todos los archivos adjuntos (imagen y archivo de texto) e incluirlos en el archivo cargado directamente en el multipart/mixed cuerpo como:

--MULTIPART-MIXED-BOUNDARY
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Disposition: inline
Content-Id: 
iVBORw0KGgoAAAANSUhEUgAAAIAAAACgCAIAAABL8POqAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA
B3RJTUUH4AQNDwEVouBdqAAAG2xJREFUeNrtfX9oHFe25jdDBU5BG25BG7pABhXEkDJjSIsYIs1m
WbfJA8ubhcjjgdiTQNJOYCInj0RKYGIl8CbyPF4iZSCxEkgsB5LIgWQlL2Pcfow3bdgw0mMzox6e
....


--MULTIPART-MIXED-BOUNDARY
Content-Type: text/plain
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename=log.txt
c29tZSBsb2cgaW4gYSB0eHQgZmlsZSB0byBhdHRhY2ggdG8gdGhlIG1haWwK


--MULTIPART-MIXED-BOUNDARY--

los Content-Id El encabezado se usa para identificar el recurso al que se puede hacer referencia en el html con: cid: me gusta :


Aquí hay un completo bash ejemplo para enviar un correo electrónico html con y admin.png imagen incrustada y una log.txt adjunto a :

#!/bin/bash

rtmp_url="smtp://smtp.gmail.com:587"
rtmp_from="[email protected]
" rtmp_to="[email protected]" rtmp_credentials="[email protected]:secretpassword" file_upload="data.txt" # html message to send echo "

Hello,

Please see the log file attached

Admin Team

" > message.html # log.txt file to attached to the mail echo "some log in a txt file to attach to the mail" > log.txt mail_from="Some Name <$rtmp_from>" mail_to="Some Name <$rtmp_to>" mail_subject="example of mail" mail_reply_to="Some Name <$rtmp_from>" mail_cc="" # add an image to data.txt : # $1 : type (ex : image/png) # $2 : image content id filename (match the cid:filename.png in html document) # $3 : image content base64 encoded # $4 : filename for the attached file if content id filename empty function add_file echo "--MULTIPART-MIXED-BOUNDARY Content-Type: $1 Content-Transfer-Encoding: base64" >> "$file_upload" if [ ! -z "$2" ]; then echo "Content-Disposition: inline Content-Id: <$2>" >> "$file_upload" else echo "Content-Disposition: attachment; filename=$4" >> "$file_upload" fi echo "$3 " >> "$file_upload" message_base64=$(cat message.html | base64) echo "From: $mail_from To: $mail_to Subject: $mail_subject Reply-To: $mail_reply_to Cc: $mail_cc MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="MULTIPART-MIXED-BOUNDARY" --MULTIPART-MIXED-BOUNDARY Content-Type: multipart/alternative; boundary="MULTIPART-ALTERNATIVE-BOUNDARY" --MULTIPART-ALTERNATIVE-BOUNDARY Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 Content-Disposition: inline $message_base64 --MULTIPART-ALTERNATIVE-BOUNDARY--" > "$file_upload" # add an image with corresponding content-id (here admin.png) image_base64=$(curl -s "https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_116x41dp.png" | base64) add_file "image/png" "admin.png" "$image_base64" # add the log file log_file=$(cat log.txt | base64) add_file "text/plain" "" "$log_file" "log.txt" # add another image #image_base64=$(curl -s "https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_116x41dp.png" | base64) #add_file "image/png" "something.png" "$image_base64" # end of uploaded file echo "--MULTIPART-MIXED-BOUNDARY--" >> "$file_upload" # send email echo "sending ...." curl -s "$rtmp_url" --mail-from "$rtmp_from" --mail-rcpt "$rtmp_to" --ssl -u "$rtmp_credentials" -T "$file_upload" -k --anyauth res=$? if test "$res" != "0"; then echo "sending failed with: $res" else echo "OK" fi

valoraciones y reseñas

Nos encantaría que puedieras dar difusión a esta sección si si solucionó tu problema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *