PDF per mail versturen

Status
Niet open voor verdere reacties.

Niellles

Gebruiker
Lid geworden
21 jun 2008
Berichten
194
Geachte heren (en dames),

Ik probeer met php code een bestand aan te maken en deze vervolgens te versturen, het aanmaken lukt heel aardig maar bij het versturen gaat het helaas fout. In het verleden heb ik mijn xampp server'tje (op windows 7 machine) al mails laten versturen en dat ging heel aardig. Bij die mail zaten geen bijlagen. De eerlijkheid gebiedt mij te zeggen dat ik al diverse scripts heb 'geleend' van anderen en ze geprobeerd heb te begrijpen, maar dit wil niet helemaal lukken... Kortom; ik kom er niet helemaal uit. Is er iemand die mij kan helpen dit probleem op te lossen (of nog beter: mij verwijzen kan naar een pagina waar bijlagen met php versturen vanaf stap 0 wordt uitgelegd.

Bij voorbaat dank,

Niels

Voor de volledigheid ook nog even de code:
PHP:
<?php
require('fpdf.php');
/**
 * @author Niels
 * @copyright 2012
 */
if (!empty($_GET['action']))
{
    if ($_GET['action'] = 'emailtickets')
    {
        ##### MAAK BESTAND DEEL
        $pdf = new FPDF();
        
        [...maken van bestand dat $bestandsnaam.pdf gaat heten...]

        $pdf->Output('tijdelijk/'.$bestandsnaam.'.pdf','F');
        
        ##### EMAIL DEEL
        $fileatt = "tijdelijk/$bestandsnaam.pdf"; // Path to the file                   
        $fileatt_type = "application/pdf"; // File Type 
        $fileatt_name = "Kaarten"; // Filename that will be used for the file as the attachment 
        
        $email_from = "test@test.nl"; // Who the email is from 
        $email_subject = "Uw bestelling"; // The Subject of the email 
        $email_message = "Hier een verhaal over hoe blij de ontvanger wel niet zou moeten zijn..."; // Message that the email has in it 
        
        $email_to = $_POST['email']; // Who the email is too 
        
        $headers = "From: $email_from";   
        
        $file = fopen($fileatt,'rb');   
        $data = fread($file,filesize($fileatt));   
        fclose($file);   
        
        $semi_rand = md5(time());   
        $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";   
             
        $headers .= "\nMIME-Version: 1.0\n" .   
                    "Content-Type: multipart/mixed;\n" .   
                    " boundary=\"{$mime_boundary}\"";   
        
        $email_message = "This is a multi-part message in MIME format.\n\n" .   
                        "--{$mime_boundary}\n" .   
                        "Content-Type:text/html; charset=\"iso-8859-1\"\n" .   
                       "Content-Transfer-Encoding: 7bit\n\n" .   
        $email_message . "\n\n";   
        
        $data = chunk_split(base64_encode($data));   
        
        $email_message .= "--{$mime_boundary}\n" .   
                          "Content-Type: {$fileatt_type};\n" .   
                          " name=\"{$fileatt_name}\"\n" .   
                          //"Content-Disposition: attachment;\n" . 
                          //" filename=\"{$fileatt_name}\"\n" . 
                          "Content-Transfer-Encoding: base64\n\n" .   
                         $data . "\n\n" .   
                          "--{$mime_boundary}--\n";   
        
        $ok = @mail($email_to, $email_subject, $email_message, $headers);   
        
        if($ok) {   
        echo "<font face=verdana size=2>The file was successfully sent!</font>";   
        } else {
            error_reporting(E_ALL ^ E_NOTICE); 
        die("Sorry but the email could not be sent. Please go back and try again!");   
        }          

    }
}
else
{

[... andere dingen...]
?>
 
wat gaat er precies "mis". Hij verstuurt niks? Krijg je een error, zo ja: wat is der error :)
Ik zou je graag willen helpen!
 
Ik krijg helemaal geen melding en er wordt ook niks verstuurd.

Het geheel is inmiddels onderdeel van een wordpress plugin. Wordpress heeft een prachtige mail functie dus het mailen lukt inmiddels. Maar ik ben nog steeds wel benieuwd naar hoe je nou een bijlage bij een mail doet... (Iemand die daar meer over kan/wil vertellen?)
 
Laatst bewerkt:
ik heb een extra en let op extension=php_fileinfo.dll


het is niet alles maar de rest denk je er bij
PHP:
class yourmail{
    private $html;
    private $backcolor;
    private $parts =array();
    private $subject = "ONLY TESTS";
    private $headers = array();
    private $issend = false;
    private $layout;
    private $encoding = "utf-8";
    private $_END ="\n";
    private $SEPARATE ;
    function __construct($from){
        if (strtoupper(substr(PHP_OS,0,3)=='MAC')) { $this->_END="\r";}
        if (strtoupper(substr(PHP_OS,0,3)=='WIN')) { $this->_END="\r\n";}
        $this->SEPARATE = "*---Boundary-InnerPart=_HELPMIJ--*".md5(time());
        $this->headers["From:"] = "fromname <$from>".$this->_END;
        $this->headers["Reply-To:"] = "$from <$from>".$this->_END;
        $this->headers["MIME-Version:"] = "1.0".$this->_END;
        $this->headers["Content-Type:"] = 'multipart/mixed; boundary="'.$this->SEPARATE.'"'.$this->_END;//'.$this->_END."\t\t".'
        $this->headers["Content-Disposition:"]= "attachment".$this->_END;
        $this->parts['body']= "see class body is null "; 
    }
    private function getheaders(){
        $return ="";
        foreach($this->headers as $key => $value){
            $return .= $key . " " . $value;
        }
        return $return;
    }
    public function addattachment($filename){
        if (is_file($filename)){
                $finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
                $fileatt_type  = finfo_file($finfo, $filename); //$fileatt_type = mime_content_type($filename);(OLD CODE)
                $fileatt_name = $filename; // Filename that will be used for the file as the attachment
                $file = fopen($filename, 'rb');
                $bestandsinf = fread($file, filesize($filename));//TODO if error on this line posible file exist but is empty
                fclose($file);
                $data = chunk_split(base64_encode($bestandsinf));//
                $this->setmultipart(); 
                $attachment= 'Content-Type: application/octet-stream;'.' name='.$filename.$this->_END.
                             "Content-Transfer-Encoding: base64".$this->_END.
                             "Content-Disposition: attachment;".$this->_END.
                             $this->_END.$data.$this->_END;
                array_push($this->parts,$attachment);
        }else{
            print "attachment does not exist";
        }
    }
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan