[RESOLVIDO] Envio de email com parametros/link

Prezados, fiz um metodo para enviar email a partir da inserção em um formulário…

tá funcionando o padrão, porém preciso enviar os dados do formulário no corpo da mensagem.

|------|

Código:

“$mail_message = “Foi liberado Início da obra : {idobra} com data prevista de início em
{data_previsto}.
Está previsto a contratação de {quant_func} Funcionários.

Observações: {obs}”; // Message body”

Resultado:

Foi liberado Início da obra : 210 com data prevista de início em 2012-08-30 .
Está previsto a contratação de 34 Funcionários.
Observações: Providenciar cantina para 8 pessoas. Enviar predreiro de Teófilo otoni.

|------|

Os dados do form estão indo perfeitamente, porém o {idobra} envia o código.

Preciso enviar a descrição do lookup e não estou sabendo faze-lo.

preciso também se for o caso enviar o link do form já abrindo no registro em questão.

agradeço.

Acredito que você terá que pegar o idobra e fazer um lookup manual pra pegar a descrição. E o mesmo problemas das consultas formato livre.

Compreendo, porém não sei fazer esse lookup.

Use a variável sc_lookup().

Abra o manual do SC e busque em macros essa função, lá tem exemplos.

FUNCIONANDO.

sc_select(ds_licitante,“select nome from tblClientes where idcliente = {idlicitante}”);//lookup para retornar o nome no lugar do código
$licitante=$ds_licitante->fields[0];

//Esse comando esta buscando a lista de e-mail na base de dados
sc_select(dataset,“SELECT
sec_users.email,
sec_groups.description
FROM /join para trazer uma invormação do cruzamento de 2 tabelas
dbo.sec_groups,
dbo.sec_users INNER JOIN dbo.sec_users_groups ON sec_users.login = sec_users_groups.login
WHERE
(sec_users.active = ‘Y’) AND
(sec_groups.description = ‘Administrador’)
ORDER BY
sec_groups.description”);

if({dataset}===false)//Caso haja algum erro retorna a mensagem abaixo
{
echo"Erro de acesso, Contacte o Suporte Técnico. Mensagem=".{dataset_erro};
}
else
{
while(!$dataset->EOF){
$destino=$dataset->fields[0];
$dataset->MoveNext();

//começa variveis de envio do e-mail que está dentro do laço.

                    $mail_smtp_server = 'smtp.dominio.com.br';        		// SMTP server name or IP address
		$mail_smtp_user   = 'nome@dominio.com.br';                // SMTP user name
		$mail_smtp_pass   = 'senha';               		 		// SMTP password
		$mail_from        = 'nome@dominio.com.br';                    // From email
		$mail_to          = $destino;         						// To email
		$mail_subject     = 'Análise de Edital';            	// Message subject
		//aqui abaixo esta enviando dados do form pro corpo da mensagem
                   $mail_message     = "O setor de Editais está analisando o edital Nº-{edital} para aquisição
							de obra de : {objeto}.<br><br>Orgão licitante:$licitante<br><br>
							Local da Obra:{local_obra}.<br><br>
							Valor Previsto:{valor_previsto}.<br><br>
							Data da visita Técnica:{data_visita}.<br><br>"; 										// Message body
		$mail_format      = 'H';  									// Message format: (T)ext or (H)tml

// Send email";
sc_mail_send($mail_smtp_server,
$mail_smtp_user,
$mail_smtp_pass,
$mail_from,
$mail_to,
$mail_subject,
$mail_message,
$mail_format);//termina variáveis de envio de e-mail

		}$dataset->Close();//FECHA O LAÇO
	}

/**

  • Send a simple email
    */

Prezados, pintou uma questão aqui que não sei se é o meu provedor de e-mail ou se é meu código.

Situação : Meu codigo pesquisa no banco uma relação de e-mail que obedecem um requisito.

na filtragem ele seleciona 5 destinatários.

porém ao enviar o e-mail o mesmo está enviando 4 vezes a mesma mensagem para cada destinatário…

Onde está o erro ?

Vejam o codigo atual.

|------

sc_select(ds_licitante,“select nome from tblClientes where idcliente = {idlicitante}”);
$licitante=$ds_licitante->fields[0];

sc_select(dataset,"SELECT sec_users.email, sec_groups.description

FROM
dbo.sec_groups, dbo.sec_users INNER JOIN dbo.sec_users_groups ON sec_users.login = sec_users_groups.login

WHERE
(sec_users.active = ‘Y’) AND (sec_groups.description = ‘Qualidade’) OR (sec_groups.description = ‘Planejamento’)

ORDER BY
sec_groups.description");//Esse comando esta buscando a lista de e-mail na base de dados

if({dataset}===false)//Caso haja algum erro retorna a mensagem abaixo
{
echo"Erro de acesso, Contacte o Suporte Técnico e informe falha de conecção ao banco de dados na análise de edital. Mensagem=".{dataset_erro};
}
else
{
while(!$dataset->EOF){
$destino=$dataset->fields[0];
$dataset->MoveNext();
//começa variveis de envio do e-mail
$mail_smtp_server = ‘mail.provedor.com.br’; // SMTP server name or IP address
$mail_smtp_user = ‘gestao.ti@provedor.com.br’; // SMTP user name
$mail_smtp_pass = ‘senha’; // SMTP password
$mail_from = ‘gestao.ti@provedor.com.br’; // From email
$mail_to = $destino; // To email
$mail_subject = ‘(teste)Atualização de Análise de Edital’; // Message subject

             if({venceu}==1){
		$mail_message     = "O setor de Editais está atualizando o edital Nº-{edital} para aquisição
						de obra de : {objeto}.<br><br>Orgão licitante:$licitante<br><br>
						Local da Obra:{local_obra}.<br><br>
						A Licitação Foi vencida"; 
	}elseif({venceu}==2){
		$mail_message     = "O setor de Editais está atualizando o edital Nº-{edital} para aquisição
						de obra de : {objeto}.<br><br>Orgão licitante:$licitante<br><br>
							
						Licitação não vencida.";
	}else{
		$mail_message     = "O setor de Editais está atualizando o edital Nº-{edital} para aquisição
						de obra de : {objeto}.<br><br>Orgão licitante:$licitante<br><br>
						Local da Obra:{local_obra}.<br><br>
						Valor Previsto:{valor_previsto}.<br><br>
						Data da visita Técnica:{data_visita}.<br><br> 
						Engenheiro escalado para visita:$preposto.<br><br>
						A proposta deverá ser protocolizada até:{data_protocolo}";
		}
		$mail_format      = 'H';  									// Message format: (T)ext or (H)tml

// Send email";
sc_mail_send($mail_smtp_server,
$mail_smtp_user,
$mail_smtp_pass,
$mail_from,
$mail_to,
$mail_subject,
$mail_message,
$mail_format);//termina variáveis de envio de e-mail

		}$dataset->Close();
	}

/**

  • Send a simple email
    */

Jean tenta colocar um distinct nesse SELECT, talvez está repetindo dados, por causa do INNER JOIN.

Quando coloco o distinct nao envia e-mail…

O distinct não é para esse caso.

Ultima forma:

Resolvido com o DISTINCT.

sc_select(dataset,"SELECT DISTINCT
sec_users.email

FROM
dbo.sec_users,
dbo.sec_groups LEFT OUTER JOIN dbo.sec_users_groups ON sec_groups.group_id = sec_users_groups.group_id
WHERE
(sec_groups.description = ‘Qualidade’) OR
(sec_groups.description = ‘Planejamento’)");

eu estava esquecendo de retirar o Order By depois da Where…

Valeu…

Melhoramento do script: Agora pega as informações de servidor de e-mail no banco de dados de acordo com o cliente(dados de licença)

|------

sc_select(ds_server,“select mail_smtp_server from TblEmpresa”);
$server=$ds_server->fields[0];

sc_select(ds_user,“select mail_smtp_user from TblEmpresa”);
$user=$ds_user->fields[0];

sc_select(ds_pass,“select mail_smtp_pass from TblEmpresa”);
$pass=$ds_pass->fields[0];

sc_select(ds_from,“select mail_from from TblEmpresa”);
$from=$ds_from->fields[0];

sc_select(ds_obra,“select obra from tblObra where idobra = {idobra}”);
$obra=$ds_obra->fields[0];

sc_select(dataset,"SELECT DISTINCT
sec_users.email

FROM
dbo.sec_users,
dbo.sec_groups LEFT OUTER JOIN dbo.sec_users_groups ON sec_groups.group_id = sec_users_groups.group_id
WHERE
(sec_groups.description = ‘Gerencia’) OR
(sec_groups.description = ‘Planejamento’) OR (sec_groups.description = ‘Qualidade’)");//Esse comando esta buscando a lista de e-mail na base de dados

if({dataset}===false)//Caso haja algum erro retorna a mensagem abaixo
{
echo"Erro de acesso, Contacte o Suporte Técnico. Mensagem=".{dataset_erro};
}
else
{
while(!$dataset->EOF){
$destino=$dataset->fields[0];
$dataset->MoveNext();
//começa variaveis de envio do e-mail
$mail_smtp_server = $server; // SMTP server name or IP address
$mail_smtp_user = $user; // SMTP user name
$mail_smtp_pass = $pass; // SMTP password
$mail_from = $from; // From email
$mail_to = $destino; // To email
$mail_subject = ‘Nova Obra em andamento’; // Message subject
$mail_message = “Foi liberado Início da obra : $obra, com data prevista de início em
{data_previsto}.

Está previsto a contratação de {quant_func} Funcionários.


Observações: {obs}”; // Message body
$mail_format = ‘H’; // Message format: (T)ext or (H)tml

// Send email";
sc_mail_send($mail_smtp_server,
$mail_smtp_user,
$mail_smtp_pass,
$mail_from,
$mail_to,
$mail_subject,
$mail_message,
$mail_format);//termina variáveis de envio de e-mail

		}$dataset->Close();
	}

/**

  • Send a simple email
    */

// Email parameters

Muito bom Jean.

Prezados, o angú é grosso: O SELECT DOS E-MAIL TÁ FUNFANDO…AGORA É ESSE CAROÇO.

esse código está retornando o corpo da mensagem 2 x agora…srsr

codigo:

sc_select(ds_server,“select mail_smtp_server from TblEmpresa”);
$server=$ds_server->fields[0];

sc_select(ds_user,“select mail_smtp_user from TblEmpresa”);
$user=$ds_user->fields[0];

sc_select(ds_pass,“select mail_smtp_pass from TblEmpresa”);
$pass=$ds_pass->fields[0];

sc_select(ds_from,“select mail_from from TblEmpresa”);
$from=$ds_from->fields[0];

sc_select(ds_licitante,“select nome from tblClientes where idcliente = {idlicitante}”);
$licitante=$ds_licitante->fields[0];

sc_select(ds_preposto,“select nome from tblFuncionario where idfunc = {idpreposto}”);
$preposto=$ds_preposto->fields[0];

sc_select(dataset,"SELECT DISTINCT
sec_users.email

FROM
dbo.sec_users,
dbo.sec_groups LEFT OUTER JOIN dbo.sec_users_groups ON sec_groups.group_id = sec_users_groups.group_id
WHERE
(sec_groups.description = ‘Qualidade’) OR
(sec_groups.description = ‘Planejamento’)");//Esse comando esta buscando a lista de e-mail na base de dados

if({dataset}===false)//Caso haja algum erro retorna a mensagem abaixo
{
echo"Erro de acesso, Contacte o Suporte Técnico e informe falha de conecção ao banco de dados na análise de edital. Mensagem=".{dataset_erro};
}
else
{
while(!$dataset->EOF){
$destino=$dataset->fields[0];
$dataset->MoveNext();
//começa variveis de envio do e-mail
$mail_smtp_server = $server; // SMTP server name or IP address
$mail_smtp_user = $user; // SMTP user name
$mail_smtp_pass = $pass; // SMTP password
$mail_from = $from; // From email
$mail_to = $destino; // To email
$mail_subject = ‘Análise de Edital’; // Message subject

		if({elabora_proposta}==1){
		$mail_message     = "O setor de Editais está analisando o edital Nº-{edital} para aquisição
							de obra de : {objeto}.<br><br>Orgão licitante:$licitante<br><br>
							Local da Obra:{local_obra}.<br><br>
							Valor Previsto:{valor_previsto}.<br><br>
							Data da visita Técnica:{data_visita}.<br><br>
							Engenheiro escalado para visita:{idpreposto}.<br><br>
							A proposta deverá ser protocolizada até:{data_protocolo}"; 										// Message body
		}else{
		$mail_message     = "O setor de Editais está analisando o edital Nº-{edital} para aquisição
							de obra de : {objeto}.<br><br>Orgão licitante:$licitante<br><br>
							Local da Obra:{local_obra}.<br><br>
							Valor Previsto:{valor_previsto}.<br><br>
							Após análise foi decidido não participar desta Licitação";
		
		}
	     $mail_format      = 'H';// Message format: (T)ext or (H)tml

// Send email";
sc_mail_send($mail_smtp_server,
$mail_smtp_user,
$mail_smtp_pass,
$mail_from,
$mail_to,
$mail_subject,
$mail_message,
$mail_format);//termina variáveis de envio de e-mail

		}$dataset->Close();
	}

/**

  • Send a simple email
    */

Resultado : A parte em vermelho esta repetindo.

O setor de Editais está analisando o edital Nº-CP064/2012 para aquisição de obra de : Execução dos serviços de terraplenagem e a construção de 40 (quarenta) unidades habitacionais tipo MG-90-I-2-41 no Conjunto Habitacional Vitalino Manuel de Gouveia, no município de MONTE ALEGRE DE MINAS/MG. .

Orgão licitante:COHAB MINAS - Companhia de Habita?�o do Estado de Minas Gerais

Local da Obra:Municipio de Monte Alegre de Minas .

Valor Previsto:1589410.37 . VALOR DESFORMATADO - COMO FORMATO?

Data da visita Técnica:2012-08-30 10:00:00:000 . DATA DESFORMATADA

Engenheiro escalado para visita:.

A proposta deverá ser protocolizada até:2012-09-05 10:00:00:000?o do Estado de Minas Gerais

Local da Obra:Municipio de Monte Alegre de Minas .

Valor Previsto:1589410.37 .

Data da visita Técnica:2012-08-30 10:00:00:000 .

Engenheiro escalado para visita:.

A proposta deverá ser protocolizada até:2012-09-05 10:00:00:000

O $dataset->MoveNext(); não é para ser a última linha do while?

Jean o mesmo e-mail vai mais de uma pessoa certo?
Eu não entendi porque você esta usando este While aí, ele é apenas pra fazer o loop e enviar o e-mail para um destino diferente não é?
Simples, coloque todos os destinos de uma só vez separados por vírgula, se quiser omitir que esta enviando para determinados endereços coloque como cópia oculta e você não precisa do while, ele envia o mesmo e-mail para todos os destinos de uma só vez.

Me corrija se não entendi direito seu código, embora esteja bem explicado estou lendo de um tablet… dificulta um pouco as quebras de linhas.

Sim, mas acredito que se fizer isso os servidores de e-mail podem entender que é um envio em massa… dai confunde com um span.

no caso do while eu posso dar um sleep(2) para cada e-mail a enviar e então ele não corre o risco de cair no span.

sua dia é válida. Obrigado.