Estou usando ASP.Net para manipular o clique de um botão, realizar algumas atualizações de dados no code-behind e, em seguida, abrir uma janela mailto do Outlook usando ClientScript.RegisterStartupScript. Gostaria de saber se o e-mail foi enviado ou o pop-up fechado . Existe alguma maneira de capturar o resultado de "parent.location='mailto:" e usá-lo no code-behind?
Preciso saber se o usuário clicou em "Enviar" no pop-up ou apenas fechou o pop-up, para que eu possa atualizar os dados informando que o e-mail foi enviado ou descartar a atualização dos dados porque não foi enviado (se o usuário clicar em "Enviar", vamos ignorar o caso extremo de "algo deu errado ao transmitir o e-mail"). Respostas em C# ou VB funcionam bem.
Meu evento de clique de botão no código-behind tem este VB, junto com o código para atualizar os dados em SQL:
ClientScript.RegisterStartupScript(Me.GetType(), name, "parent.location='" + emailStr + "'; ", True)
Se você estiver acionando isso usando um link padrão
mailto
, como parece no exemplo do título, assim que o sistema operacional abrir o cliente de e-mail padrão, o navegador perderá o controle ou o contato com esse programa.mailto
É uma via de mão única: ele apenas informa ao sistema operacional para abrir uma janela (ou aba do navegador, se o cliente de e-mail padrão for um serviço de webmail). Essa é uma tecnologia bastante antiga na história da web, e não há interação disponível além disso.Portanto, não — seu aplicativo web não consegue detectar se o usuário decidiu enviar o e-mail ou fazer qualquer outra coisa naquele cliente de e-mail. O cliente de e-mail não faz parte do seu aplicativo web e, geralmente, nem faz parte do navegador, portanto, seu código JS (que, em geral, é bastante isolado por questões de segurança) não consegue ver o que ele está fazendo.
Por fim, se você precisar de mais certeza/confiabilidade sobre se o conteúdo do e-mail foi enviado ao servidor de e-mail, você deve enviar o e-mail a partir do código do lado do servidor.