Olá,
Pesquisei um pouco no forum mas não encontrei nenhum tópico a falar deste assunto.
Estou a tentar gravar o conteúdo de emails recebidos na base de dados.
Encontrei na net um script (penso que o autor se chama vlad b.) para o efeito, o qual serve perfeitamente para o que preciso.
Inseri o ficheiro no servidor e fiz as configuração necessárias no Cpanel fazendo o foward do email para o ficheiro chamado emailfoward.php. E na verdade o objectivo está alcançado, o conteudo do email é guardado na bd.
O problema está no facto do remetente do email gravado receber sempre uma mensagem de erro pelo facto do email não ter sido entregue a um dos destinatários. Ou seja, o servidor assume o ficheiro php como um remetente, uma vez que é dessa forma que ele está configurado no Cpanel
Aqui está o principio da mensagem.
"A message that you sent could not be delivered to one or more of its
recipients. This is a permanent error. The following address(es) failed:
pipe to |/home/wwwinofw/public_html/emailforward.php"
Alguém sabe se é possível impedir que este email de erro seja enviado para o remetente? Seja no servidor ou directamente no script?
Script:
--------------
#!/usr/bin/php -q
<?php
error_reporting(0);
include"Connections/config.php";
chdir(dirname(__FILE__));
$fd = fopen("php://stdin", "r");
$email = "";
while (!feof($fd)) {
$email .= fread($fd, 1024);
}
fclose($fd);
if(strlen($email)<1) {
die();
}
// handle email
$lines = explode("\n", $email);
// empty vars
$from = "";
$to="";
$subject = "";
$headers = "";
$message = "";
$splittingheaders = true;
function replaceit($String){
$String = str_replace("'", "", $String);
$String = strip_tags($String);
return $String;
}
for ($i=0; $i < count($lines); $i++) {
if ($splittingheaders) {
// this is a header
$headers .= $lines[$i]."\n";
// look out for special headers
if (preg_match("/^Subject: (.*)/", $lines[$i], $matches)) {
$subject = replaceit($matches[1]);
}
if (preg_match("/^From (.*)/", $lines[$i], $matches)) {
$from = replaceit($matches[1]);
}
if (preg_match("/^To: (.*)/", $lines[$i], $matches)) {
$to = $matches[1];
}
} else {
// not a header, but message
$message .= replaceit($lines[$i])."\n";
}
if (trim($lines[$i])=="") {
// empty line, header section has ended
$splittingheaders = false;
}
}
$query_select = $conecta->prepare("INSERT INTO as_pagamentosRecebidos (from, subject, message, time) VALUES ('$from','$subject','$message','" . time() . "')");
$query_select->execute();
-------------
Obrigado
Pesquisei um pouco no forum mas não encontrei nenhum tópico a falar deste assunto.
Estou a tentar gravar o conteúdo de emails recebidos na base de dados.
Encontrei na net um script (penso que o autor se chama vlad b.) para o efeito, o qual serve perfeitamente para o que preciso.
Inseri o ficheiro no servidor e fiz as configuração necessárias no Cpanel fazendo o foward do email para o ficheiro chamado emailfoward.php. E na verdade o objectivo está alcançado, o conteudo do email é guardado na bd.
O problema está no facto do remetente do email gravado receber sempre uma mensagem de erro pelo facto do email não ter sido entregue a um dos destinatários. Ou seja, o servidor assume o ficheiro php como um remetente, uma vez que é dessa forma que ele está configurado no Cpanel
Aqui está o principio da mensagem.
"A message that you sent could not be delivered to one or more of its
recipients. This is a permanent error. The following address(es) failed:
pipe to |/home/wwwinofw/public_html/emailforward.php"
Alguém sabe se é possível impedir que este email de erro seja enviado para o remetente? Seja no servidor ou directamente no script?
Script:
--------------
#!/usr/bin/php -q
<?php
error_reporting(0);
include"Connections/config.php";
chdir(dirname(__FILE__));
$fd = fopen("php://stdin", "r");
$email = "";
while (!feof($fd)) {
$email .= fread($fd, 1024);
}
fclose($fd);
if(strlen($email)<1) {
die();
}
// handle email
$lines = explode("\n", $email);
// empty vars
$from = "";
$to="";
$subject = "";
$headers = "";
$message = "";
$splittingheaders = true;
function replaceit($String){
$String = str_replace("'", "", $String);
$String = strip_tags($String);
return $String;
}
for ($i=0; $i < count($lines); $i++) {
if ($splittingheaders) {
// this is a header
$headers .= $lines[$i]."\n";
// look out for special headers
if (preg_match("/^Subject: (.*)/", $lines[$i], $matches)) {
$subject = replaceit($matches[1]);
}
if (preg_match("/^From (.*)/", $lines[$i], $matches)) {
$from = replaceit($matches[1]);
}
if (preg_match("/^To: (.*)/", $lines[$i], $matches)) {
$to = $matches[1];
}
} else {
// not a header, but message
$message .= replaceit($lines[$i])."\n";
}
if (trim($lines[$i])=="") {
// empty line, header section has ended
$splittingheaders = false;
}
}
$query_select = $conecta->prepare("INSERT INTO as_pagamentosRecebidos (from, subject, message, time) VALUES ('$from','$subject','$message','" . time() . "')");
$query_select->execute();
-------------
Obrigado