Hallo!
Also ich hab nach langer zeit endlich ein script zusammen gefummelt um
Emails+Anhang vom Server zu holen und in einen Datenbank zu speichern.
Und ich bitte euch mir zu helfen es zu perfektionieren, dann werd ich es
auch als Script frei geben, denn sowas ist oft gefragt und wird nie wirklich gefunden.
Im Grund geht das auch alles Super!
Allerdings gibt es bei manchen emails probleme mit der darstellung des
bodys,absenders und des betreffs, ich hoffe das ihr im folgend code den
fehler findet und korekiert.
Manchmal, also nicht immer, kommt es vor das mir als betreff so ein
quatsch angezeigt wird :
und als bei absender auch sowas:
Wo liegt hier der Fehler im Script?
Und bei manchen Anhängen wird die email garnicht erst runter geladen,
bzw. in die db geschrieben, also bei lesen der anhänge müssen auch noch
fehler sein. ich hoffe ihr findet ein.
PS : Noch was anderes, wie bekomm ich noch mal raus ob es text/plain
oder text/html ist, brauch das weil ich html mails im iframe darstellen
lassen will. Danke!
Hier der CODE :
Also ich hab nach langer zeit endlich ein script zusammen gefummelt um
Emails+Anhang vom Server zu holen und in einen Datenbank zu speichern.
Und ich bitte euch mir zu helfen es zu perfektionieren, dann werd ich es
auch als Script frei geben, denn sowas ist oft gefragt und wird nie wirklich gefunden.
Im Grund geht das auch alles Super!
Allerdings gibt es bei manchen emails probleme mit der darstellung des
bodys,absenders und des betreffs, ich hoffe das ihr im folgend code den
fehler findet und korekiert.
Manchmal, also nicht immer, kommt es vor das mir als betreff so ein
quatsch angezeigt wird :
=?iso-8859-1?BQmlzIHp1IDYzJSBzcGFyZW4gLSBXaW50ZXJzY..
=?iso-8859-1?B?c2hvcHBpbmcyNCA=?= <shopping24@info.shopping24.de>
Und bei manchen Anhängen wird die email garnicht erst runter geladen,
bzw. in die db geschrieben, also bei lesen der anhänge müssen auch noch
fehler sein. ich hoffe ihr findet ein.
PS : Noch was anderes, wie bekomm ich noch mal raus ob es text/plain
oder text/html ist, brauch das weil ich html mails im iframe darstellen
lassen will. Danke!
Hier der CODE :
PHP-Code:
/*******************************************************************************
Verbindung mit der Datenbank herstellen
*******************************************************************************/
if ($HTTP_SERVER_VARS["REMOTE_ADDR"]=="127.0.0.1")
// LOKALE-Verbindungsdaten definieren
{
$db_host="localhost";
$db_name="irgendwas";
$db_user="root";
$db_pass="";
}
else
// SERVER-Verbindungsdaten definieren
{
$db_host="localhost";
$db_name="irgendwas";
$db_user="irgendwas";
$db_pass="irgendwas";
}
// Verbindung herstellen
$db_connect=mysql_connect($db_host,$db_user,$db_pass)
or die("Verbindung mit der Datenbank fehlgeschlagen. Versuchen Sie es später noch einmal.");
$db_name_connect=mysql_select_db($db_name)
or die("Verbindung mit der Datenbank fehlgeschlagen. Versuchen Sie es später noch einmal.");
/*******************************************************************************
Verbindung mit dem Postfach herstellen
*******************************************************************************/
// POP3-Server
$host="irgendwas.de";
$port="110";
// User-Daten
$user="irgendwas";
$passwort="irgendwas";
// Verbinden zur Mailbox
$mailbox=imap_open("{".$host."/pop3:110}INBOX","$user","$passwort");
// Überprüfen ob Verbindung erfolgreich, dann weiter...
if ($mailbox)
{
// Empfangsdatum ermitteln
$get_date=date("d.m.Y");
// Variablen vordefinieren
$mail_attachment_name="";
$mail_attachment_temp="";
// Posteingang überprüfen
$check=imap_check($mailbox);
// Anzahl vorhandener Emails im Postfach
$count_msg=$check->Nmsgs;
// Anzahl neuer Emails im Postfach
$count_new_msg=$check->Recent;
// Emails auslesen
for ($i=1; $i<=imap_num_msg($mailbox); $i++)
{
// Mail-Struktur erfassen
$mail_struct=imap_fetchstructure($mailbox,$i);
// Header erfassen
$mail_header=imap_header($mailbox, $i);
// Header-Information erfassen
$mail_header_information=nl2br(strip_tags(imap_fetchbody($mailbox,$i,0)));
$mail_header_information=addslashes($mail_header_information);
// Datum erfassen
$mail_date=$mail_header->Date;
// Mail-ID erfassen
$mail_id=$mail_header->message_id;
// Empfänger erfassen
$mail_to=$mail_header->toaddress;
// Absendername erfassen
$mail_from_name=$mail_header->from[0]->personal;
// Absender-eMail-Adresse erfassen
$mail_from_address=$mail_header->from[0]->mailbox."@".$mail_header->from[0]->host;
// Kopieempfänger erfassen
$mail_copy_to=$mail_header->cc[0]->mailbox."@".$mail_header->cc[0]->host;
// Antwortempfänger erfassen
$mail_answer_to=$mail_header->reply_to[0]->mailbox."@".$mail_header->reply_to[0]->host;
// Betreff erfassen
$mail_subject=$mail_header->subject;
// Haupttext für den Body erfassen
$mail_body=imap_fetchbody($mailbox,$i,1);
if ((strpos($mail_body,'<body>')) && (strpos($mail_body,'</body>')))
{
// Wenn Html-Mail
$mail_body=substr($mail_body,strpos($mail_body,'<body>'),strpos($mail_body,'</body>'));
$mail_body=nl2br(strip_tags($mail_body));
$mail_body=eregi_replace("------=_NextPart_.*quoted-printable.*------=_NextPart_.*quoted-printable","",$mail_body);
$mail_body=eregi_replace("------=_NextPart_.*--","",$mail_body);
$mail_body=addslashes($mail_body);
}
else
{
// Wenn Textmail
$mail_body=nl2br(strip_tags($mail_body));
$mail_body=eregi_replace("------=_NextPart_.*quoted-printable.*------=_NextPart_.*quoted-printable","",$mail_body);
$mail_body=eregi_replace("------=_NextPart_.*--","",$mail_body);
$mail_body=addslashes($mail_body);
}
// Größe der Email erfassen
$mail_size=$bodystruct->bytes;
// Dateianhänge erfassen und speichern
$mail_attachment_filename="";
$mail_content_parts=count($mail_struct->parts);
if ($mail_content_parts>=2)
{
for ($a=2;$a<=$mail_content_parts;$a++)
{
$mail_attachment_filename_temp[$a-2]=imap_bodystruct($mailbox,$i,$a);
}
for ($b=0;$b<sizeof($mail_attachment_filename_temp);$b++)
{
if ($mail_attachment_filename_temp[$b]->parameters[0]->value == "us-ascii" || $mail_attachment_filename_temp[$b]->parameters[0]->value == "US-ASCII")
{
if ($mail_attachment_filename_temp[$b]->parameters[1]->value != "")
{
$mail_attachment_filename[$b] = $mail_attachment_filename_temp[$b]->parameters[1]->value;
}
}
elseif ($mail_attachment_filename_temp[$b]->parameters[0]->value != "iso-8859-1" && $mail_attachment_filename_temp[$b]->parameters[0]->value != "ISO-8859-1")
{
$mail_attachment_filename[$b] = $mail_attachment_filename_temp[$b]->parameters[0]->value;
}
}
// Email-Anhang als Datei speichern
$inc=1;
foreach ($mail_attachment_filename as $value)
{
$inc+=1;
// Dateiinhalt auslesen
$mail_attachment_content=imap_fetchbody($mailbox,$i,$inc);
// Wenn Anhang kleiner 400000 Bytes
if (strlen($mail_attachment_content)<4000000)
{
// Temporären Dateinamen definieren
$keys="qwertzupasdfghkyxcvbnm23456789WERTZUPLKJHGFDSAYXCVBNM";
srand ((double)microtime()*1000000);
do { $sfilename="at_"; for($i=0;$i<6;$i++) { $sfilename.=substr($keys,(rand()%(strlen($keys))),1); } $sfilename.=".tmp"; } while (file_exists("uploaded_files/".$sfilename)==true);
// Datei auf Server schreiben
$fp=fopen("uploaded_files/".$sfilename,"w");
fputs($fp,imap_base64($mail_attachment_content));
fclose($fp);
$mail_attachment_name.=$value."#";
$mail_attachment_temp.=$sfilename."#";
}
}
}
// Email in Datenbank speichern
$mail_attachment_name=substr($mail_attachment_name,0,strlen($mail_attachment_name)-1);
$mail_attachment_temp=substr($mail_attachment_temp,0,strlen($mail_attachment_temp)-1);
$cmd="INSERT INTO pf_posteingang VALUES
('0',
'0',
'0',
'$get_date',
'$mail_date',
'$mail_header_information',
'$mail_to',
'$mail_from_name',
'$mail_from_address',
'$mail_copy_to',
'$mail_answer_to',
'$mail_subject',
'$mail_body',
'$mail_size',
'$mail_attachment_name',
'$mail_attachment_temp');";
$result=mysql_db_query($db_name,$cmd);
}
// Mail zum löschen vormerken
imap_delete($mailbox,'1:*');
// Mail löschen
imap_expunge($mailbox);
// Mailbox schließen
imap_close($mailbox);
}
// Datenbankverbindung schließen
mysql_close($db_connect);
?>
Kommentar