Pergunta

Este é um pouco confuso para explicar, então paciência comigo aqui ...

Eu quero criar um sistema onde um usuário pode enviar e-mails templated através do meu site, exceto na verdade não é enviado com o meu servidor - que ao invés de apenas abre seu próprio cliente de correio local com um e-mail pronto para ir. O aplicativo poderia preencher o corpo do email com as variáveis ??pré-definidas, para salvar o usuário ter que digitá-lo eles mesmos. Eles podem então editar a mensagem como desejado, caso não exatamente atender às suas finalidades.

Há uma série de razões que eu quero que ele vá via cliente de correio local do usuário, assim que começar o servidor para enviar o e-mail não é uma opção:. Tem que ser 100% do lado do cliente

Já tenho uma solução principalmente-trabalhando em execução, e eu vou postar os detalhes de que como uma resposta, eu estou querendo saber se há alguma maneira melhor?

Foi útil?

Solução

A maneira que eu estou fazendo isso agora é basicamente assim:

O HTML:

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

A 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;
}

Este, surpreendentemente, funciona muito bem. O único problema é que, se o corpo é particularmente longa (algo mais de 2000 caracteres), então ele só abre um novo e-mail, mas não há informações nele contidas. Eu suspeito que estaria a ver com o comprimento máximo do URL seja excedido.

Outras dicas

Aqui é a maneira fazê-lo usando jQuery e um "elemento" para clicar em:

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

Em seguida, você pode obter o seu conteúdo, quer, alimentando-o a partir de campos de entrada (ie. Utilizando $('#input1').val() ou por um script do lado do servidor com $.get('...'). Divirta-se

Você não precisa de nenhum javascript, você só precisa do seu href a ser codificado como este:

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

Que tal ter uma validação ao vivo na caixa de texto, e uma vez que vai ao longo de 2000 (ou qualquer que seja o limite máximo é), em seguida, exibir 'Este e-mail é muito longo para ser concluída no navegador, por favor <span class="launchEmailClientLink">launch what you have in your email client</span>'

Para que eu teria

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

e jQuery isso em seu onDomReady

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

Você pode usar este serviço gratuito: https://www.smtpjs.com

  1. Inclua o script:

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

  1. Envie um e-mail usando:

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

Se este é apenas vai abrir o cliente do usuário para enviar o e-mail, por que não deixá-los compô-lo lá também. Você perde a capacidade de controlar o que eles estão enviando, mas se isso não é importante, então é só recolher os endereços de e assunto e abrir o cliente para deixar o preenchimento de usuário no corpo.

O problema com a própria ideia é que o usuário tem que ter um cliente de email, o que não é o caso, se ele confiar em webmails, que é o caso de muitos usuários. (Pelo menos não havia turn-around para redirecionar para este webmail quando eu investiguei a questão de uma dúzia de anos atrás).

É por isso que a solução normal é que confiar em php mail () para o envio de e-mails (do lado do servidor, então).

Mas, se hoje em dia "cliente de email" é sempre definido, automaticamente, potencialmente a um cliente de webmail, eu vou ficar feliz em saber.

Enviar solicitação para 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top