Notificações Estilo Emails assíncronas
Alguém tem alguma sugestão de como fazer um esquema de notificações assíncronas no website tipo e-mail?
Renato Pereira
Curtidas 0
Respostas
Paulo Freire
13/06/2013
Coisa básica ok:
private void RunEmailSender()
{
// Always keep running.
while (true)
{
System.Threading.Thread.Sleep(43200000); //Tempo
try
{
EnviarEmails();
}
catch (Exception ex)
{
// Log any exceptions here
}
}
}
public void EnviarEmails()
{
string bodyHTML = string.Empty;
string bodyPlain = string.Empty;
System.Net.Mail.MailMessage mailMsg = new System.Net.Mail.MailMessage();
System.Net.Mail.MailAddress mailAddress = new System.Net.Mail.MailAddress("comunicacao@comandomilitar.mil.br");
mailMsg.Subject = txtAssunto.Text;
mailMsg.IsBodyHtml = true;
bodyHTML = txtMensagem.Text;
AlternateView htmlView = AlternateView.CreateAlternateViewFromString(bodyHTML, null, "text/html");
AlternateView plainView = AlternateView.CreateAlternateViewFromString(bodyPlain, null, "text/plain");
mailMsg.AlternateViews.Add(htmlView);
mailMsg.AlternateViews.Add(plainView);
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();
smtp.Port = 25;
//smtp.Host = "smtp-web.kinghost.net"; //Servidor SMTP
smtp.Host = "10.10.0.2"; //Servidor SMTP
smtp.EnableSsl = false;
EntitiesQG db = new EntitiesQG();
var pesquisa = from m in db.OFICIAIS
where m.EMAIL != "" && m.ATIVO == 1
orderby m.NOME
select new
{
m.NOME,
m.EMAIL
};
foreach (var m in pesquisa)
{
mailMsg.From = mailAddress;
mailMsg.To.Clear();
mailMsg.To.Add(m.EMAIL.ToString());
smtp.Send(mailMsg);
}
}
No seu WebConfig
<mailSettings>
<smtp>
<network host="smtp.seusmtp.mil.br" port="25" userName="comunicacao@comandomilitar.mil.br" password="seu_senha" />
</smtp>
</mailSettings>
private void RunEmailSender()
{
// Always keep running.
while (true)
{
System.Threading.Thread.Sleep(43200000); //Tempo
try
{
EnviarEmails();
}
catch (Exception ex)
{
// Log any exceptions here
}
}
}
public void EnviarEmails()
{
string bodyHTML = string.Empty;
string bodyPlain = string.Empty;
System.Net.Mail.MailMessage mailMsg = new System.Net.Mail.MailMessage();
System.Net.Mail.MailAddress mailAddress = new System.Net.Mail.MailAddress("comunicacao@comandomilitar.mil.br");
mailMsg.Subject = txtAssunto.Text;
mailMsg.IsBodyHtml = true;
bodyHTML = txtMensagem.Text;
AlternateView htmlView = AlternateView.CreateAlternateViewFromString(bodyHTML, null, "text/html");
AlternateView plainView = AlternateView.CreateAlternateViewFromString(bodyPlain, null, "text/plain");
mailMsg.AlternateViews.Add(htmlView);
mailMsg.AlternateViews.Add(plainView);
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();
smtp.Port = 25;
//smtp.Host = "smtp-web.kinghost.net"; //Servidor SMTP
smtp.Host = "10.10.0.2"; //Servidor SMTP
smtp.EnableSsl = false;
EntitiesQG db = new EntitiesQG();
var pesquisa = from m in db.OFICIAIS
where m.EMAIL != "" && m.ATIVO == 1
orderby m.NOME
select new
{
m.NOME,
m.EMAIL
};
foreach (var m in pesquisa)
{
mailMsg.From = mailAddress;
mailMsg.To.Clear();
mailMsg.To.Add(m.EMAIL.ToString());
smtp.Send(mailMsg);
}
}
No seu WebConfig
<mailSettings>
<smtp>
<network host="smtp.seusmtp.mil.br" port="25" userName="comunicacao@comandomilitar.mil.br" password="seu_senha" />
</smtp>
</mailSettings>
GOSTEI 0
Renato Pereira
13/06/2013
Você não entendeu!
Não é envio de emails. Eu queria criar um esquema de notificações assíncronas de modo que mostre ao usuário o seu número de tarefas a fazer, tarefas a finalizar, etc.
Eu ja tentei fazer com:
<script type="text/javascript">
function atualizaNotificacoes() {
$.ajax({
url: "/Requisicao/AtualizaNotificacoes",
type: "POST",
success: function (retorno) {
if (retorno.error != 0) {
// var tpv = $('#tpv').val();
// var tppb = $('#tppb').val();
// var tppp = $('#tppp').val();
// var tppd = $('#tppd').val();
// var rpf = $('#rpf').val();
//
// if (retorno.tpv > tpv) $('#tpv').innerHTML = tpv;
// if (retorno.tppb > tppb) $('#tppb').innerHTML = tppb;
// if (retorno.tppp > tppp) $('#tppp').innerHTML = tppp;
// if (retorno.rpf > rpf) $('#rpf').innerHTML = rpf;
alert(retorno.tpv + retorno.tppb + retorno.tppp + retorno.rpf);
}
},
error: function (erro) {
},
complete: function () {
}
});
}
$(document).ready(function () {
setInterval(atualizaNotificacoes(), 2000);
});
</script>
tentei ficar disparando isso assincronamente, mas esse setInternal javascript não ta funcionando!
Mas vlw pela ajuda, obrigado!
Não é envio de emails. Eu queria criar um esquema de notificações assíncronas de modo que mostre ao usuário o seu número de tarefas a fazer, tarefas a finalizar, etc.
Eu ja tentei fazer com:
<script type="text/javascript">
function atualizaNotificacoes() {
$.ajax({
url: "/Requisicao/AtualizaNotificacoes",
type: "POST",
success: function (retorno) {
if (retorno.error != 0) {
// var tpv = $('#tpv').val();
// var tppb = $('#tppb').val();
// var tppp = $('#tppp').val();
// var tppd = $('#tppd').val();
// var rpf = $('#rpf').val();
//
// if (retorno.tpv > tpv) $('#tpv').innerHTML = tpv;
// if (retorno.tppb > tppb) $('#tppb').innerHTML = tppb;
// if (retorno.tppp > tppp) $('#tppp').innerHTML = tppp;
// if (retorno.rpf > rpf) $('#rpf').innerHTML = rpf;
alert(retorno.tpv + retorno.tppb + retorno.tppp + retorno.rpf);
}
},
error: function (erro) {
},
complete: function () {
}
});
}
$(document).ready(function () {
setInterval(atualizaNotificacoes(), 2000);
});
</script>
tentei ficar disparando isso assincronamente, mas esse setInternal javascript não ta funcionando!
Mas vlw pela ajuda, obrigado!
GOSTEI 0
Joel Rodrigues
13/06/2013
Experimente remover os parênteses do nome da função, na seguinte linha:
Deixando apenas:
setInterval(atualizaNotificacoes(), 2000);
Deixando apenas:
setInterval(atualizaNotificacoes, 2000);
GOSTEI 0
Renato Pereira
13/06/2013
Funcionou, muito obrigado, Joel Rodrigues!
GOSTEI 0
Joel Rodrigues
13/06/2013
Que bom, amigo.
Um grande abraço.
Estou encerrando o tópico.
Um grande abraço.
Estou encerrando o tópico.
GOSTEI 0
Renato Pereira
13/06/2013
Olá Joel Rodrigues, bom dia!
Você já implementou logs de controle de acesso em algum website?
eu estava tentando fazer da seguinte maneira:
Quando o usuário loga, grava-se sua hora de entrada, IP de origem, Host de Origem, IdUsuario.
E quando o usuário desloga, Atualiza-se a hora de saída.
Estou utilizando ASP.NET MVC e Entity Framework.
A tabela no banco de dados ficou assim:
int Id
int IdUsuário
Datetime horaLogon
Datetime horaLogoff
nvarchar(MAX) IPorigem
nvarchar(MAX) HostOrigem
Na implementação, utilizei um script no Layout master page do website
cujo evento refere-se ao descarregamento da pagina para quando o usuário fechar o brownser, gravar a hora de saída tbm, cujo nome do mesmo
onbeforeunload, ou onunload, ou beforeunload. Acontece que esse evento auto dispara
em qualquer evento ocorrido na página, como click de uma ancora, F5, CTRL + R, CTRL + F5, o script dispara esse eventos com o servidor.
Você tem alguma solução ou método para implementar esse problema?
Obrigado pela Atenção!
Você já implementou logs de controle de acesso em algum website?
eu estava tentando fazer da seguinte maneira:
Quando o usuário loga, grava-se sua hora de entrada, IP de origem, Host de Origem, IdUsuario.
E quando o usuário desloga, Atualiza-se a hora de saída.
Estou utilizando ASP.NET MVC e Entity Framework.
A tabela no banco de dados ficou assim:
int Id
int IdUsuário
Datetime horaLogon
Datetime horaLogoff
nvarchar(MAX) IPorigem
nvarchar(MAX) HostOrigem
Na implementação, utilizei um script no Layout master page do website
cujo evento refere-se ao descarregamento da pagina para quando o usuário fechar o brownser, gravar a hora de saída tbm, cujo nome do mesmo
onbeforeunload, ou onunload, ou beforeunload. Acontece que esse evento auto dispara
em qualquer evento ocorrido na página, como click de uma ancora, F5, CTRL + R, CTRL + F5, o script dispara esse eventos com o servidor.
Você tem alguma solução ou método para implementar esse problema?
Obrigado pela Atenção!
GOSTEI 0
Joel Rodrigues
13/06/2013
Amigo, abra um tópico para esse assunto, pode ser?
Pois fica mais organizado e se alguém tiver a mesma dúvida, é mais fácil de localizar a solução pelo título do tópico.
Abraço.
Pois fica mais organizado e se alguém tiver a mesma dúvida, é mais fácil de localizar a solução pelo título do tópico.
Abraço.
GOSTEI 0