Jnnbo: foreach innerhalb eines Mailversands

Moin,

mein Mail Script funktion eigentlich ohne Probleme

	$data = array();
	$data['smtp'] = array();
	$data['smtp']['host'] 		= $wes_smtp_host;
	$data['smtp']['port'] 		= $wes_smtp_port;
	$data['smtp']['username'] 	= $wes_smtp_username;
	$data['smtp']['password'] 	= $wes_smtp_password;	
						
	$data['from'] 		= array('name' => $wes_kontakt_name, 'email' => $wes_kontakt_mail);
	$data['to'] 		= array('name' => $wes_kontakt_name, 'email' => $wes_kontakt_mail);
	$data['charset'] 	= 'utf-8';
			
	$data['subject'] 	= "Erinnerungen";
						
	$data['html'] = '
			<html>
				<head>
					<title>'.$data['subject'].'</title>
				</head>
				<body>
					<div>
						<p></p>
					</div>
				</body>
			</html>';
		
	$smtp = new Swift_SmtpTransport($data['smtp']['host'], $data['smtp']['port']);
	$smtp->setUsername($data['smtp']['username']);
	$smtp->setPassword($data['smtp']['password']);
			
	$mail = new Swift_Message($data['subject']);
	$mail->setBody($data['html'])
				 ->setCharset($data['charset'])
				 ->setContentType("text/html")
				 ->setFrom($data['from']['email'], $data['from']['name'])
				 ->setTo($data['to']['email'], $data['to']['name']);      
			
	$swift = new Swift_Mailer($smtp);
	$swift->send($mail,$recipient);

Ich möchte allerdings mit einem Versand mehrere Einträge zusammen verschicken, also benötige ich ein "foreach" innerhalb $data['html'], ich wollte es so zusammen bauen:

	$data['html'] = '
		<html>
			<head>
				<title>'.$data['subject'].'</title>
			</head>
			<body>
				<div>
					<p>'.foreach($test as $array){
							 nl2br($array['erinnerung'])
						}.'</p>
				</div>
			/body>
		</html>';

Allerdings erhalte ich nun ein Fehler, kann ich innerhalb von $data['html'] kein weiteres PHP einbinden?

  1. Hallo,

    Allerdings erhalte ich nun ein Fehler, kann ich innerhalb von $data['html'] kein weiteres PHP einbinden?

    Was macht denn eigentlich der Punktoperator? Und hat dir nicht schon mal jemand erzählt, du solltest dir mal das EVA-Prinzip anschauen?

    Gruß
    Kalk

    1. Hallo Tabellenkalk,

      Was macht denn eigentlich der Punktoperator? Und hat dir nicht schon mal jemand erzählt, du solltest dir mal das EVA-Prinzip anschauen?

      was hat denn mein Problem mit dem EVA-Prinzip zu tun? Überhaupt nichts! Das HTML muss an dieser Stelle zusammen gesetzt werden.

      1. Hallo,

        was hat denn mein Problem mit dem EVA-Prinzip zu tun? Überhaupt nichts!

        Das seh ich anders. Die Zuweisung deines HTML-Strings ist bereits eine Art Ausgabe. Und du fängst da plötzlich, mit deinem Schleifenkonstrukt, wieder eine Verarbeitung an.

        Gruß
        Kalk

        1. Hallo Tabellenkalk,

          Das seh ich anders. Die Zuweisung deines HTML-Strings ist bereits eine Art Ausgabe. Und du fängst da plötzlich, mit deinem Schleifenkonstrukt, wieder eine Verarbeitung an.

          ich habe es jetzt so umgesetzt: http://forum.selfhtml.org/self/2015/may/11/foreach-innerhalb-eines-mailversands/1640169#m1640169

  2. Moin!

    Allerdings erhalte ich nun ein Fehler, kann ich innerhalb von $data['html'] kein weiteres PHP einbinden?

    Du meinst etwas wie

            $data['html'] = '
                    <html>
                            <head>
                                    <title>'.$data['subject'].'</title>
                            </head>
                            <body>
                                    <div>
                                            <p>'.foreach($test as $array){
                                                             nl2br($array['erinnerung'])
                                                    }.'</p>
                                    </div>
                            /body>
                    </html>';
    

    Theoretisch schon. Aber nicht so, wie Du es gezeigt hast, Schleifen gehen an der Stelle gar nicht, weil strings verbunden werden sollen und foreach keinen solchen liefert.

    Sowas:

            <?php
            jobs[0]='Braten';
            jobs[1]='Backen';
            jobs[2]='Der Königin Kind holen';
            $data['html'] = '
                    <html>
                            <head>
                                    <title>Rumpelstilzchen</title>
                            </head>
                            <body>
                                    <h1>ToDo</h1>
                                    <ul><li>' . implode('</li><li>', $jobs) . '<li></ul>
                            </body>
                    </html>';
    

    hingegen geht schon...

    Jörg Reinholz

    1. Hallo Jörg,

      Theoretisch schon. Aber nicht so, wie Du es gezeigt hast, Schleifen gehen an der Stelle gar nicht, weil strings verbunden werden sollen und foreach keinen solchen liefert.

      Sowas:

              <?php
              jobs[0]='Braten';
              jobs[1]='Backen';
              jobs[2]='Der Königin Kind holen';
              $data['html'] = '
                      <html>
                              <head>
                                      <title>Rumpelstilzchen</title>
                              </head>
                              <body>
                                      <h1>ToDo</h1>
                                      <ul><li>' . implode('</li><li>', $jobs) . '<li></ul>
                              </body>
                      </html>';
      

      wie bekomme ich aber mit meiner Abfrage so etwas hin? jobs[0] wenn ich das richtig verstehe ich dieses ein Array? Und meine Abfrage hat ja noch weitere Daten. Im Beispiel habe ich nur ein Wert genommen. Später gibt es 5

      Datum Firma Name Status Nachricht

      1. Moin!

        wie bekomme ich aber mit meiner Abfrage so etwas hin? jobs[0] wenn ich das richtig verstehe ich dieses ein Array? Und meine Abfrage hat ja noch weitere Daten. Im Beispiel habe ich nur ein Wert genommen. Später gibt es 5

        Wenn es Dir zu kompliziert wird, dann mache es Dir halt einfacher und baue die aus den Array-Elementen zu fertigenden Teilstrings zusammen bevor Du den ganz Großen zusammenklebst.

        Man bekommt nämlich keine Extra-Punkte dafür, dass man es sich selbst schwer macht.

        Jörg Reinholz

        1. Hallo Jörg,

          Wenn es Dir zu kompliziert wird, dann mache es Dir halt einfacher und baue die aus den Array-Elementen zu fertigenden Teilstrings zusammen bevor Du den ganz Großen zusammenklebst.

          wenn ich dich richtig verstanden habe, dann soll ich das so umsetzten?

          			foreach($test as $array){ 
          			
          			$test[] = htmlspecialchars($array['vorname']) ." ";
          			
          			}
          						
          			$data['html'] = '
          			<html>
          				<head>
          					<title>'.$data['subject'].'</title>
          				</head>
          				<body>
          					<div>
          						<p>'. implode($test) .'</p>
          					</div>
          				</body>
          			</html>';
          

          Als Ausgabe erhalte ich: Test Test 1 Test 2

          Man bekommt nämlich keine Extra-Punkte dafür, dass man es sich selbst schwer macht.

          Meine Rede, aber dieses sehen hier im Forum einige anderes. Für mich muss ein Script erstmal nur funktionieren.

          1. Moin!

            Mit

            implode(', ', $test)
            

            oder

            implode('<br>', $test)
            

            wäre das Ergebnis wohl hübscher. So lange Du das mit den htmlspecialchars nicht 100 Zeilen weiter oben veranstaltest ist es ok.

            Jörg Reinholz