{"id":1667,"date":"2025-02-10T11:35:40","date_gmt":"2025-02-10T10:35:40","guid":{"rendered":"https:\/\/wiki.ad-libitum.info\/?page_id=1667"},"modified":"2025-03-12T17:44:05","modified_gmt":"2025-03-12T16:44:05","slug":"mails-so-versenden-dass-sie-im-versendet-ordner-landen","status":"publish","type":"page","link":"https:\/\/wiki.ad-libitum.info\/?page_id=1667","title":{"rendered":"Mails so versenden, dass sie im Versendet-Ordner landen"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Achtung<\/strong>: bei den Passw\u00f6rtern f\u00fcr die Postf\u00e4cher scheint imap_open() keine %-Zeichen zu m\u00f6gen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mit <code>composer require symfony\/mailer<\/code> den Mailer installieren.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr den Fall, dass unter DDEV gearbeitet wird, muss in die <code>config.yaml<\/code> der Befehl <code>webimage_extra_packages: [\"php${DDEV_PHP_VERSION}-imap\"]<\/code> eingef\u00fcgt werden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Im Verzeichnis <code>src\/Service<\/code> die Datei <code>MailerService.php<\/code> erstellen:<\/p>\n\n\n<pre><code>&lt;?php<br \/><br \/>namespace App\\Service;<br \/><br \/>use Symfony\\Component\\Mailer\\MailerInterface;<br \/>use Symfony\\Component\\Mime\\Email;<br \/><br \/>class MailerService {<br \/>private $mailer;<br \/>private $imapInfo;<br \/>private $imapSent;<br \/>private $imapInvoice;<br \/><br \/>public function __construct(MailerInterface $mailer)\n{\n    $this-&gt;mailer = $mailer;\n    $this-&gt;imapInvoice = imap_open('{' . $_SERVER[\"IMAP_HOSTNAME\"] . ':993\/imap\/ssl}INBOX', $_SERVER[\"IMAP_MAILBOX\"], $_SERVER[\"IMAP_USERPW\"]);\n    $this-&gt;imapInfo = imap_open('{' . $_SERVER[\"IMAP_HOSTNAME\"] . ':993\/imap\/ssl}INBOX', $_SERVER[\"IMAP_COMM\"], $_SERVER[\"IMAP_COMM_PW\"]);\n    $this-&gt;imapSent = '{' . $_SERVER[\"IMAP_HOSTNAME\"] . ':993\/imap\/ssl}Sent Items';\n}\n\n\/**\n * @param Email $email\n * @param $box which mailbox to use: invoice or info\n * @return string|true\n * @throws \\Symfony\\Component\\Mailer\\Exception\\TransportExceptionInterface\n *\/\npublic function sendEmail(Email $email, $box)\n{\n    try {\n        $this-&gt;mailer-&gt;send($email);\n    } catch (\\Exception $e) {\n        return \"Fehler: \" . $e-&gt;getMessage();\n    }\n\n    if ($box == \"info\") {\n        try {\n            imap_append($this-&gt;imapInfo, $this-&gt;imapSent, $email-&gt;toString(), '');\n        } catch (\\Exception $e) {\n            return \"Fehler: \" . $e-&gt;getMessage();\n        }\n\n        return true;\n    } elseif ($box == \"invoice\") {\n        try {\n            imap_append($this-&gt;imapInvoice, $this-&gt;imapSent, $email-&gt;toString(), '');\n        } catch (\\Exception $e) {\n            return \"Fehler: \" . $e-&gt;getMessage();\n        }\n    } else {\n        return \"Fehler: gew\u00e4hltes Postfach gibt es nicht\";\n    }\n\n    return true;\n}<\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Dieser Code geht davon aus, dass zwei eMailadressen f\u00fcr den Versand m\u00f6glich sind: rechnung und info. Definiert werden beide, wie auch die anderen Serverdaten, in der <code>.env<\/code>. Das hei\u00dft, diese Informationen d\u00fcrfen nicht fehlen und wenn es mehr eMailadressen zur Auswahl gibt, dann die <code>.env<\/code> und den Code entsprechend erg\u00e4nzen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Im Controller dann wie gewohnt zun\u00e4chst die eMail aufbauen und dann den eben erstellen Service aufrufen:<\/p>\n\n\n<pre><code>$email = (new Email())<br \/>    -&gt;from($_SERVER[\"MAIL_ABSENDER\"])<br \/>    -&gt;to($user-&gt;getEmail())<br \/>    -&gt;subject(\"Passwort zur\u00fccksetzen\")<br \/>    -&gt;html($text);<br \/><br \/>\/\/ send email<br \/>$success = false;<br \/><br \/>$success = $mailerService-&gt;sendEmail($email, \"info\");<br \/><br \/>if ($success) {<br \/>    $this-&gt;addFlash(\"success\", \"Wenn diese eMailadresse gefunden wird, wird eine eMail mit einem Link dorthin geschickt.\");<br \/>} else {<br \/>    $this-&gt;addFlash(\"error\", \"Fehlermeldung konnte nicht gemailt werden: $success\");<br \/>}<\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Achtung: bei den Passw\u00f6rtern f\u00fcr die Postf\u00e4cher scheint imap_open() keine %-Zeichen zu m\u00f6gen. Mit composer require symfony\/mailer den Mailer installieren. F\u00fcr den Fall, dass unter DDEV gearbeitet wird, muss in die config.yaml der Befehl webimage_extra_packages: [&#8222;php${DDEV_PHP_VERSION}-imap&#8220;] eingef\u00fcgt werden. Im Verzeichnis src\/Service die Datei MailerService.php erstellen: &lt;?phpnamespace App\\Service;use Symfony\\Component\\Mailer\\MailerInterface;use Symfony\\Component\\Mime\\Email;class MailerService {private $mailer;private $imapInfo;private $imapSent;private $imapInvoice;public [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1667","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/wiki.ad-libitum.info\/index.php?rest_route=\/wp\/v2\/pages\/1667","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wiki.ad-libitum.info\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wiki.ad-libitum.info\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wiki.ad-libitum.info\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/wiki.ad-libitum.info\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1667"}],"version-history":[{"count":12,"href":"https:\/\/wiki.ad-libitum.info\/index.php?rest_route=\/wp\/v2\/pages\/1667\/revisions"}],"predecessor-version":[{"id":1698,"href":"https:\/\/wiki.ad-libitum.info\/index.php?rest_route=\/wp\/v2\/pages\/1667\/revisions\/1698"}],"wp:attachment":[{"href":"https:\/\/wiki.ad-libitum.info\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1667"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}