Ankündigung

Einklappen
Keine Ankündigung bisher.

Eigenen Mailer (swiftmailer) einbinden

Einklappen
X
Einklappen
Momentan aktive Benutzer in diesem Thema: 1 (0 Benutzer und 1 Gäste)
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Eigenen Mailer (swiftmailer) einbinden

    Vor geraumer Zeit haben wir uns entschieden, nicht auf den VB Mailer zu bauen. Hintergrund war, das es Probleme mit "self signed certificates" des SMTP Servers gab und das man keine HTML-body versenden kann u.s.w.

    Einstiegspunkt ist die /core/vp/mail.php

    direkt in der Klasse vB_Mail werden eigene vars deklariert:

    PHP-Code:
    class vB_Mail
    {
        
    /**
        * Destination address
        *
        * @var    string
        */
        
    protected $toemail '';

      protected 
    $asc_message '';
      protected 
    $asc_subject ''
    asc_message und asc_subject dienen dazu, original subject und message unangetastet zu lassen.

    in der Funktion start, werden diese Klassen-Variablen gefüllt:

    PHP-Code:
    public function start($toemail$subject$message$from ''$uheaders ''$username ''$contentType 'text/plain')
        {
            
    $toemail $this->fetchFirstLine($toemail);

            if (empty(
    $toemail))
            {
                return 
    false;
            }

            
    $delimiter =& $this->delimiter;
            
    $vboptions vB::getDatastore()->getValue('options');

            
    $toemail vB_String::unHtmlSpecialChars($toemail);
            
    $subject $this->fetchFirstLine($subject);

           
    //ASC
            
    $this->asc_message $message;
             
    $this->asc_subject $subject;
            
    //ASC

     
    $message preg_replace("#(\r\n|\r|\n)#s"$delimitertrim($message));

            
    $charset vB_String::getCharset(); 

    in der Funktion send wird der VB Mailer vor dem versenden "unterbrochen" und auf den eigenen Mailer verzweigt:

    PHP-Code:
        public function send($force_send false)
        {
            
    // No recipient, abort
            
    if (!$this->toemail)
            {
                return 
    false;
            }

            
    // Check debug settings
            
    if (!$force_send AND defined('DISABLE_MAIL'))
            {
                if (
    is_string(DISABLE_MAIL))
                {
                    
    // check for a recipient whitelist
                    
    if (strpos(DISABLE_MAIL'@') !== false)
                    {
                        
    // check if the address is allowed
                        
    if (strpos(DISABLE_MAIL$this->toemail) === false)
                        {
                            return 
    false;
                        }
                    }
                    else if (
    strpos(DISABLE_MAIL'.log') !== false)
                    {
                        
    // mail is only logged
                        
    $this->logEmail('DEBUG'DISABLE_MAIL);

                        return 
    true;
                    }
                    else
                    {
                        
    // recipient not in the whitelist and not logging
                        
    return false;
                    }
                }
                else
                {
                    
    // DISABLE_MAIL defined but isn't a string so just disable
                    
    return false;
                }
            }

            
    //ASC
            
    include('asc_mail.php');
            return 
    true;
            
    //ASC 

    in der asc_mail.php wird nun subject und message aufbereitet und an den eigenen Mailer übergeben.

    Zum Beispiel:u.s.w.


    und dann z. Bsp.: per swiftmailer https://swiftmailer.symfony.com/ versenden:

    Für swiftmailer habe ich mir einen kleinen Wrapper geschrieben.

    PHP-Code:
    //this is NOT the wrapper - this is the send_mail - call to the wrapper

    try {
    $asc_mail = new SWIFTYS();
    $asc_mail->send_mail($this->toemail,array('webmaster@domain.de'=>'Forum'),$asc_subject,$asc_msg,null);

    return 
    true;
    }catch (
    swiftysException $e){
        
    //die($e->swiftysMessage());
        
    return true;
    // try 


    Die Mailfunktion ist eine echte core-Leistung. Ohne gewisse "Kenntnisse" kann viel falsch laufen. Das komplette Forum wird "unbrauchbar" - Also VORSICHT!
    Zuletzt geändert von AScherff; 19.02.2018, 13:25.

    #2
    Interessant. Ich verwende den Swiftmailer seit vielen Jahren in meinen Projekten. Der ist richtig gut. Euer Problem mit dem selbstsignierten Zertifikat könntet ihr mit Certbot lösen. Da bekommt ihr ein kostenloses Zertifikat.
    https://blendpolis.de

    Kommentar


      Themenstarter
      #3
      Du meinst Let’s Encrypt.... ja schon klar. Das "Problem" gibt es auch schon länger nicht mehr, war nur ein Auslöser hin zum swiftmailer...

      Wenn wer an der Aufbereitung der Mail interssiert ist, melden...

      Kommentar

      Lädt...
      X