Pregunta

Esto es un poco confuso de explicar, así que tengan paciencia conmigo aquí ...

Quiero configurar un sistema en el que un usuario pueda enviar correos electrónicos con plantillas a través de mi sitio web, excepto que en realidad no se envían utilizando mi servidor, sino que simplemente abre su propio cliente de correo local con un correo electrónico listo para usar. La aplicación completaría el cuerpo del correo electrónico con variables predefinidas, para evitar que el usuario tenga que escribirlo. Luego pueden editar el mensaje como lo deseen, en caso de que no se adapte exactamente a sus propósitos.

Hay una serie de razones por las que quiero que se envíe a través del cliente de correo local del usuario, por lo que hacer que el servidor envíe el correo electrónico no es una opción: debe ser 100% del lado del cliente.

Ya tengo una solución que funciona principalmente, y publicaré los detalles de eso como respuesta. Me pregunto si hay una mejor manera.

¿Fue útil?

Solución

La forma en que lo estoy haciendo ahora es básicamente así:

El HTML:

<textarea id="myText">
    Lorem ipsum...
</textarea>
<button onclick="sendMail(); return false">Send</button>

El Javascript:

function sendMail() {
    var link = "mailto:me@example.com"
             + "?cc=myCCaddress@example.com"
             + "&subject=" + escape("This is my subject")
             + "&body=" + escape(document.getElementById('myText').value)
    ;

    window.location.href = link;
}

Esto, sorprendentemente, funciona bastante bien. El único problema es que si el cuerpo es particularmente largo (más de 2000 caracteres), simplemente abre un nuevo correo electrónico, pero no contiene información. Sospecho que tendría que ver con que se superara la longitud máxima de la URL.

Otros consejos

Aquí está la manera de hacerlo usando jQuery y un " elemento " para hacer clic en:

$('#element').click(function(){
    $(location).attr('href', 'mailto:?subject='
                             + encodeURIComponent("This is my subject")
                             + "&body=" 
                             + encodeURIComponent("This is my body")
    );
});

Luego, puede obtener su contenido alimentándolo desde los campos de entrada (es decir, utilizando $('#input1').val() o mediante un script del lado del servidor con $.get('...'). Diviértase

No necesita ningún javascript, solo necesita que su href se codifique así:

<a href="mailto:me@me.com">email me here!</a>

¿Qué pasa con tener una validación en vivo en el cuadro de texto, y una vez que supera 2000 (o sea el umbral máximo), muestra 'Este correo electrónico es demasiado largo para completarlo en el navegador, por favor <span class="launchEmailClientLink">launch what you have in your email client</span>'

A lo que tendría

.launchEmailClientLink {
cursor: pointer;
color: #00F;
}

y jQuery esto en tu onDomReady

$('.launchEmailClientLink').bind('click',sendMail);

Puede utilizar este servicio gratuito: https://www.smtpjs.com

  1. Incluir el script:

<script src="https://smtpjs.com/v2/smtp.js"> </script>

  1. Enviar un correo electrónico usando:

    Email.send("from@you.com", "to@them.com", "This is a subject", "this is the body", "smtp.yourisp.com", "username", "password");

Si esto solo va a abrir el cliente del usuario para enviar el correo electrónico, ¿por qué no dejar que lo redacte allí también? Pierde la capacidad de rastrear lo que están enviando, pero si eso no es importante, simplemente recopile las direcciones y el asunto y abra el cliente para que el usuario complete el cuerpo.

El problema con la idea misma es que el usuario debe tener un cliente de correo electrónico, que no es el caso si confía en los correos web, como es el caso para muchos usuarios. (al menos no hubo un cambio para redirigir a este correo web cuando investigué el problema hace una docena de años).

Es por eso que la solución normal es confiar en php mail () para enviar correos electrónicos (del lado del servidor, entonces).

Pero si hoy en día " cliente de correo electrónico " siempre está configurado, de forma automática, potencialmente para un cliente de correo web, estaré encantado de saberlo.

Enviar solicitud a mandrillapp.com :

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (xhttp.readyState == 4 && xhttp.status == 200) {
        console.log(xhttp.responseText);
    }
}
xhttp.open('GET', 'https://mandrillapp.com/api/1.0/messages/send.json?message[from_email]=mail@7995.by&message[to][0][email]=zdanevich.vitaly@yaa.ru&message[subject]=Заявка%20с%207995.by&message[html]=xxxxxx&key=oxddROOvCpKCp6InvVDqiGw', true);
xhttp.send();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top