Quiero preparar un correo electrónico para enviar con mailto: este correo electrónico contiene algunas palabras y un script js. Este script no necesita ser ejecutado. Es solo para que el receptor copie y pegue.
La secuencia de comandos :
<script id="myID">var script = document.createElement("script");script.src="script-to-inject.js?id=myID&type=0&name=Name&size=120";document.head.appendChild(script); </script>
Y mi correo a:
window.location.href = "mailto:"+email+"?subject="+subject+"&body=FewWords"+ script;
Cuando mi correo está abierto, tengo algo así:
<script id="myID">var script = document.createElement("script");script.src="script-to-inject.js?id=myID
No aparece el final del script (después del primer &
)
Cómo puedo arreglar esto ? Gracias !
Olvidó codificar los parámetros de la URL, por lo que &
inicia el siguiente parámetro.
Puede utilizar la función encodeURIComponent
:
window.location.href = "mailto:" + encodeURIComponent(email) + "?subject=" + encodeURIComponent(subject) + "&body=" + encodeURIComponent("FewWords" + script);
Otra forma más limpia sería usar URLSearchParams
:
const url = new URL(`mailto:${encodeURIComponent(email)}`) url.searchParams.set('subject', subject) url.searchParams.set('body', 'FewWords' + script) window.location.href = url
Debe escapar el correo electrónico, el asunto y la secuencia de comandos correctamente al configurar el atributo href. ¿Qué sucede si estas variables contienen los caracteres &
o =
? Puedes ver cómo esto sería malinterpretado.
Prueba esto:
window.location.href = "mailto:" + encodeURIComponent(email) + "?subject=" + encodeURIComponent(subject) + "&body=FewWords" + encodeURIComponent(script);
(No estoy seguro de que pueda pasar HTML en el parámetro del body
; por cierto, podría interpretarse como texto sin formato).
También puede usar URLSearchParams
:
const params = new URLSearchParams(); params.append('subject', subject); params.append('body', 'FewWords' + script); window.location.href = 'mailto:' + encodeURIComponent(email) + '?' + params.toString();