Skip to content

Action email : Reply Adresse als Parameter hinzufügen #1506

@dalliclick

Description

@dalliclick

Bei der Verwendung der action in Kontaktformularen, lassen es die Policies von vielen Hostern nicht mehr zu, daß die from Adresse auf den Wert eines email Feldes des Formulars gesetzt wird. Hier wäre ein zusätzlicher Parameter für eine reply Adresse nützlich, auch wenn das eine gewisse Aufmerksamkeit des Benutzers erfordert, der die Mail beantwortet.

Besonders praktisch, wenn der Wert für den Parameter auch noch optional das Format NAME<MAILADRESSE> haben kann.

Hier wäre der von mir dazu geschriebene Code

`
class rex_yform_action_email extends rex_yform_action_abstract
{

    public function executeAction(): void
    {
        // see getDescription() below
        $aFormParams = array(
            'from' => $this->getElement(2),
            'reply' => $this->getElement(3),
            'to' => $this->getElement(4),
            'subject' => $this->getElement(5),
            'body' => $this->getElement(6)
        );

        // Arrays fuer Suchpattern und Ersetzung erstellen
        $aPregData = array();
        foreach ($this->params['value_pool']['email'] as $search => $replace) {
            $aPregData['pattern'][] = ":[#]{3}" . $search . "[#]{3}:";
            $aPregData['replace'][] = $replace;
            // wenn in +++ eingeschlossen -> urlencode() verwenden
            $aPregData['pattern'][] = ":[+]{3}" . $search . "[+]{3}:";
            $aPregData['replace'][] = urlencode($replace);
        }

        // Werte ersetzen
        foreach ($aFormParams as $label => $value) {
            $aFormParams[$label] = preg_replace($aPregData['pattern'], $aPregData['replace'], $aFormParams[$label]);
        }

        $mail = new rex_mailer();
        $mail->AddAddress($aFormParams['to'], $aFormParams['to']);

        // reply zerlegen in Name und Adresse
        if (! preg_match(":(.*)\<(.*)\>:", $aFormParams['reply'], $aHits)) {
            // nur Adresse
            $aReply = array("addr"=>$aFormParams['reply'],"name"=>"");
        }
        else {
            // Adresse & Name
            $aReply = array("addr"=>$aHits[2],"name"=>$aHits[1]);
        }
        $mail->AddReplyTo($aReply['addr'], $aReply['name']);

        $mail->WordWrap = 80;
        $mail->FromName = $aFormParams['from'];
        $mail->From = $aFormParams['from'];
        $mail->Sender = $aFormParams['from'];
        $mail->Subject = $aFormParams['subject'];
        $mail->Body = nl2br($aFormParams['body']);
        $mail->AltBody = strip_tags($aFormParams['body']);
        if (isset($this->params['value_pool']['email_attachments']) && is_array($this->params['value_pool']['email_attachments'])) {
            foreach ($this->params['value_pool']['email_attachments'] as $v) {
                $mail->AddAttachment($v[1], $v[0]);
            }
        }
        // $mail->IsHTML(true);
        $mail->Send();
    }

    public function getDescription(): string
    {
        return 'action|email|[email protected]|[ReplyName]&lt;[email protected]&gt;|[email protected]|Mailsubject|Mailbody###name###';
    }
}

`

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions