Hallo,
ich möchte aus einer Webanwendung gerne eMails mit einer unbestimmten Anzahl von Dateianhängen (nur PDF-Dateien) verschicken. Nach einigen
Recherchen habe ich mir dazu eine Funktion geschrieben:
Sie funktioniert auch ganz gut. eMails ohne, mit einer und mit zwei PDF-Dateien kommen an. Bei Aufruf von
bekomme ich die folgende Ausgabe:
Allerdings dauert es ca. 15 Sekunden bis das "e" erscheint (alle anderen ausgaben erscheinen sofort beim aufruf meines Scripts). Als ich
eine größere Datei (90kb) verschicken wollte hat dies nicht funktioniert, das "e" erscheint nicht und ich muss erst den InternetExplorer
zumachen damit ich wieder auf die Seite zugreifen kann.
Liegt das an max_execution_time ? Kann ich irgendwo feststellen ob mein Script wegen zu langer Laufzeit abgebrochen wurde?
Habe ich vielleicht einen Fehler drin, oder gibt es evtl. andere Funktionen die große eMails schneller versenden?
Vielen Dank für eure Antworten, ich hoffe ihr könnt mir weiterhelfen, damit ich später mal eMails mit Anhängen von bis zu 1MB versenden
kann.
Sonstiges:
Es handelt sich um einen Windows Server und soweit ich das beurteilen kann, läuft der SMTP-Server auf einem anderen Rechner im Netzwerk.
PHP Version 5.2.4
error_reporting(E_ALL); ->keine Meldungen
schöne Grüße,
Marco
ich möchte aus einer Webanwendung gerne eMails mit einer unbestimmten Anzahl von Dateianhängen (nur PDF-Dateien) verschicken. Nach einigen
Recherchen habe ich mir dazu eine Funktion geschrieben:
PHP-Code:
<?php
function mail_mit_pdfanhang($Empfaenger, $AbsenderName, $AbsenderMail, $Betreff, $Nachricht, $Dateiliste){
/*
$Dateiliste ist ein asoziatives array in dem der key den "Dateinamen in der Mail" enthält und value den relativen Dateipfad auf dem Server
*/
$debug=true;
$Trenner = md5(uniqid(time()));
$Header = "From: $AbsenderName <$AbsenderMail>\r\n";
$Header .= "MIME-Version: 1.0\r\n";
$Header .= "Content-Type: multipart/mixed; boundary=$Trenner\r\n";
$Header .= "\r\n";
$Header .= "This is a multi-part message in MIME format\r\n";
$Header .= "--$Trenner\r\n";
$Header .= "Content-Type: text/plain; charset=ISO-8859-1\r\n";
$Header .= "Content-Transfer-Encoding: quoted-printable\r\n";
$Header .= "\r\n";
$Header .= "$Nachricht\r\n";
foreach ($Dateiliste AS $DateinameMail=>$Dateiname) {
if ($debug) echo $DateinameMail."<br />\n".$Dateiname."<br />\n";
$Header .= "--$Trenner\r\n";
$Header .= "Content-Type: application/pdf; name=$DateinameMail\r\n";
$Header .= "Content-Transfer-Encoding: base64\r\n";
$Header .= "Content-Disposition: attachement; filename=$DateinameMail\r\n";
$Header .= "\r\n";
if ($debug) echo "a<br />\n";
$Dateiinhalt = fread(fopen($Dateiname, "r"), filesize($Dateiname));
if ($debug) echo "b<br />\n";
$Header .= chunk_split(base64_encode($Dateiinhalt));
if ($debug) echo "c<br />\n";
$Header .= "\r\n";
}
$Header .= "--$Trenner--";
if ($debug) echo "d<br />\n";
$info= mail($Empfaenger, $Betreff, "", $Header);
if ($debug) echo "e<br />\n";
return $info;
}
?>
PHP-Code:
<?php
$dateiliste["21kb_Datei.pdf"] = ".\\_data\\anhaenge\\21kb_Datei.pdf"; //eine Datei die 21 Kilobyte groß ist
$dateiliste["16kb_Datei.pdf"] = ".\\_data\\anhaenge\\16kb_Datei.pdf"; //eine Datei die 16 Kilobyte groß ist
mail_mit_pdfanhang($mail_adresse, $von_name, $von_email, $betreff, $mail_nachricht, $dateiliste)
?>
21kb_Datei.pdf
.\_data\anhaenge\21kb_Datei.pdf
a
b
c
16kb_Datei.pdf
.\_data\anhaenge\16kb_Datei.pdf
a
b
c
d
e
.\_data\anhaenge\21kb_Datei.pdf
a
b
c
16kb_Datei.pdf
.\_data\anhaenge\16kb_Datei.pdf
a
b
c
d
e
eine größere Datei (90kb) verschicken wollte hat dies nicht funktioniert, das "e" erscheint nicht und ich muss erst den InternetExplorer
zumachen damit ich wieder auf die Seite zugreifen kann.
Liegt das an max_execution_time ? Kann ich irgendwo feststellen ob mein Script wegen zu langer Laufzeit abgebrochen wurde?
Habe ich vielleicht einen Fehler drin, oder gibt es evtl. andere Funktionen die große eMails schneller versenden?
Vielen Dank für eure Antworten, ich hoffe ihr könnt mir weiterhelfen, damit ich später mal eMails mit Anhängen von bis zu 1MB versenden
kann.
Sonstiges:
Es handelt sich um einen Windows Server und soweit ich das beurteilen kann, läuft der SMTP-Server auf einem anderen Rechner im Netzwerk.
PHP Version 5.2.4
error_reporting(E_ALL); ->keine Meldungen
schöne Grüße,
Marco
Kommentar