XHTMLforum

XHTMLforum (http://xhtmlforum.de/index.php)
-   Serveradministration und serverseitige Scripte (http://xhtmlforum.de/forumdisplay.php?f=80)
-   -   Mailanhang und iCal (http://xhtmlforum.de/showthread.php?t=70788)

picard_1983 24.03.2014 11:19

Mailanhang und iCal
 
Hallo zusammen,

ich brauch mal eure Hilfe:
Ich erstelle mit folgendem Code eine iCal Datei zum Download. Das funktioniert auch wunderbar.

PHP-Code:

    $Filename "Termin.ics";
    
header("Content-Type: text/Calendar");
    
header("Content-Disposition: inline; filename=$Filename");


function 
GUID()
{
    if (
function_exists('com_create_guid') === true)
    {
        return 
trim(com_create_guid(), '{}');
    }

    return 
sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X'mt_rand(065535), mt_rand(065535), mt_rand(065535), mt_rand(1638420479), mt_rand(3276849151), mt_rand(065535), mt_rand(065535), mt_rand(065535));
}

$titel 'Test';
$ort 'Mars';
$beschreibung 'Nuescht';

$start date('Ymd\THis'1396504800);
$ende date('Ymd\THis'1396540800);
$erstellt date('Ymd\THis'1391678727);

$uid GUID();

echo 
'BEGIN:VCALENDAR'."\n";
echo 
'VERSION:2.0'."\n";
echo 
'PRODID:VMS'."\n";
echo 
'METHOD:PUBLISH'."\n";
echo 
'BEGIN:VEVENT'."\n";
echo 
'UID:'.$uid.''."\n";
echo 
'SUMMARY:'.$titel.''."\n";
echo 
'LOCATION;ENCODING=QUOTED-PRINTABLE:'.$ort.''."\n";
echo 
'DESCRIPTION:'.$beschreibung.''."\n";
echo 
'CLASS:PUBLIC'."\n";
echo 
'DTSTART:'.$start.''."\n";
echo 
'DTEND:'.$ende.''."\n";
echo 
'DTSTAMP:'.$erstellt.''."\n";
echo 
'END:VEVENT'."\n";
echo 
'END:VCALENDAR'."\n"

Jetzt möchte ich diese Datei noch als Mailanhang versenden.
Ich habe mir schon einige Codebeispiele angeschaut wie man einen Anhang per Mail versendet.

Folgenden Code habe ich z. B. um Dateianhänge zu versenden:
PHP-Code:

function mail_att($to,$subject,$message,$anhang)
   {
   
$absender "Test";
   
$absender_mail "test@test.de";
   
$reply "test@test.de";

   
$mime_boundary "-----=" md5(uniqid(mt_rand(), 1));

   
$header  ="From:".$absender."<".$absender_mail.">\n";
   
$header .= "Reply-To: ".$reply."\n";

   
$header.= "MIME-Version: 1.0\r\n";
   
$header.= "Content-Type: multipart/mixed;\r\n";
   
$header.= " boundary=\"".$mime_boundary."\"\r\n";

   
$content "This is a multi-part message in MIME format.\r\n\r\n";
   
$content.= "--".$mime_boundary."\r\n";
   
$content.= "Content-Type: text/html charset=\"iso-8859-1\"\r\n";
   
$content.= "Content-Transfer-Encoding: 8bit\r\n\r\n";
   
$content.= $message."\r\n";

   
//$anhang ist ein Mehrdimensionals Array
   //$anhang enthält mehrere Dateien
   
if(is_array($anhang) AND is_array(current($anhang)))
      {
      foreach(
$anhang AS $dat)
         {
         
$data chunk_split(base64_encode($dat['data']));
         
$content.= "--".$mime_boundary."\r\n";
         
$content.= "Content-Disposition: attachment;\r\n";
         
$content.= "\tfilename=\"".$dat['name']."\";\r\n";
         
$content.= "Content-Length: .".$dat['size'].";\r\n";
         
$content.= "Content-Type: ".$dat['type']."; name=\"".$dat['name']."\"\r\n";
         
$content.= "Content-Transfer-Encoding: base64\r\n\r\n";
         
$content.= $data."\r\n";
         }
      
$content .= "--".$mime_boundary."--";
      }
   else 
//Nur 1 Datei als Anhang
      
{
      
$data chunk_split(base64_encode($anhang['data']));
      
$content.= "--".$mime_boundary."\r\n";
      
$content.= "Content-Disposition: attachment;\r\n";
      
$content.= "\tfilename=\"".$anhang['name']."\";\r\n";
      
$content.= "Content-Length: .".$dat['size'].";\r\n";
      
$content.= "Content-Type: ".$anhang['type']."; name=\"".$anhang['name']."\"\r\n";
      
$content.= "Content-Transfer-Encoding: base64\r\n\r\n";
      
$content.= $data."\r\n";
      }


   if(@
mail($to$subject$content$header)) return true;
   else return 
false;
   } 

Aber wie bekommt man die oben generierte iCal Datei als Anhang an die Mail?

Könnt ihr mir ein paar Tipps geben?

Vielen Dank!

Gruß
Picard

explanator 24.03.2014 11:49

Du generierst mit ersterem Code keine Datei, sondern gibst sie aus.
Um eine Datei zu generieren musst du den obigen Code in eine Datei schreiben anstatt sie mit header und echo auszugeben.

Für die Mail würde ich auf eine Mailklasse wie phpmailer oder swiftmailer zurückgreifen.

picard_1983 24.03.2014 11:51

Ok vielen Dank. Dann muss ich mal schauen wie ich am besten das ganze in eine Datei generiere...habe ich noch nicht gemacht.

Und wie ich dann diese datei als Anhang an die Mail hänge, dass sollte ja mit der vorhanden funktion klappen...

Den PHPMailer schaue ich mir mal an...

Kannst du mir kurz ein Tipp geben wie ich das ganze in eine Datei packe?

explanator 24.03.2014 12:14

Statt
PHP-Code:

echo 'BEGIN:VCALENDAR'."\n"
echo 
'VERSION:2.0'."\n"

schreibst du
PHP-Code:

$file "termin.ics";
$content 'BEGIN:VCALENDAR'."\n";
$content .= 'VERSION:2.0'."\n"
file_put_contents($file$content); 

siehe PHP: file_put_contents - Manual
Ich würde mir angewöhnen Dateinamen immer klein zu schreiben.

picard_1983 24.03.2014 13:20

Ah Ja stimmt das habe ich schon einmal gesehen....

Wenn ich diese Datei jetzt erstelle, dann muss ich die ja irgendwie in folgende Zeile für die Mail bringen

PHP-Code:

$anhang chunk_split(base64_encode($file));
.
.
$kopf .= "Content-Disposition: attachment; filename=\"".$datei."\"\n\n";
$kopf .= $anhang."\n"


explanator 24.03.2014 13:31

Lerne die Grundlagen und verwende eine der schon genannten Mailerklassen.

picard_1983 24.03.2014 13:42

Joar habe ich und wollte auch gerade schreiben das es erst einmal so funktioniert:

PHP-Code:

$Filename "termin.ics";
$content 'BEGIN:VCALENDAR'."\n";
$content .= 'VERSION:2.0'."\n"
file_put_contents($file$content); 
.
.
.
$anhang chunk_split(base64_encode($content));
.
.
.
    
$kopf .= "Content-Disposition: attachment; filename=\"".$Filename."\"\n\n";
    
$kopf .= $anhang."\n";
.
.


Vielen Dank trotzdem und die Mailerklasse werde ich mir demnächst anschauen. Ich brauchte aber nur eine Mail wo die ics in den Anhang geht. Ob dazu gleich eine komplette neue Mailerklasse verwendet werden muss keine Ahnung.

In Moment tut es erst einmal die normale PHP Mail Funktion.

Aber ich schau es mir trotzdem an. Eventuell kann man mit der Mailerklasse noch ein bissel mehr anstellen.

VIelen Dank!


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:24 Uhr.

Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.

© Dirk H. 2003 - 2023