2017-06-20 2 views
1

J'ai installé mailgun sur une instance de google VM, bientôt pour savoir que je ne peux pas envoyer d'e-mails de facturation à mes clients sur les ports sortants (25.587, etc ...) donc je me suis inscrit MailGun, j'ai créé et acheté le plan de base ...Comment utiliser la boucle php foreach dans l'API MailGun

Tout fonctionne bien, si j'envoie des valeurs affichées ex. $ _POST ['email'] et $ _POST ['sujet'], mais pour un email de facturation je veux récupérer des données de la DB et les injecter dans les paramètres MailGun, notez que j'utilise PHP et que mon code ressemble à ça

$mg->messages()->send('xxxx.co.uk', [ 
     'from' => '[email protected]', 
     'to'  => ''.$_SESSION['user_email'].'', 
     'bcc' => '[email protected]', 
     'subject' => 'Your Treatment Order with xxxxxx', 
     'html' => ' 
        <!DOCTYPE HTML PUBLIC ""-//IETF//DTD HTML//EN""> 
        <html> 
        <head> 
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
        <title>Your Treatment Order with XXX</title> 
        </head> 
        <body> 
        <table width="550" height="200" cellpadding="0" cellspacing="0" align="center" style="border:1px solid #777777; padding: 25px; margin-top: 25px;" bgcolor="#ffffff"> 
        <tr><td align="center" colspan="5" style="background-color:#303f46; padding-top: 10px; padding-bottom: 10px;"><img src="http://www.xxxxx.co.uk/images/logo.png"></td></tr> 
        <tr><td height="1" bgcolor="#777777" colspan="5"></td></tr> 
        <tr><td height="10" colspan="5"></td></tr> 
        <tr><td height="1" bgcolor="#777777" colspan="5"></td></tr><tr><td height="5" colspan="5"></td></tr> 
        <tr><td align="left" class="hometitle" colspan="5">Your Treatment Order with XXXX</td></tr><tr><td height="5" colspan="5"></td></tr> 
        <tr><td height="1" bgcolor="#777777" colspan="5"></td></tr><tr><td height="5" colspan="5"></td></tr> 
        <tr><td align="left" class="hometext" colspan="5"><span style="color: #777777";> 
         <p>Hello,</p> 
         <p>Thanks for your order. We’ll let you know once your item(s) have <b>confirmed</b>. Your estimated confirmation time will not exceed few hours. You can view the details of your order by visiting <a href="http://www.xxxx.co.uk/orders.php?id='.$transactionId.'">My Orders</a> section on xxxx.co.uk.</p> 
         <p><b>ORDER DETAILS</b></p> 
         <p>Order Number: '.$transactionId.'</p> 
         <p>Placed on '.date('l dS F Y', strtotime($paymentDate)).'</p> 
         <p>Order Total: £ '.$originalAmount.'.00</p> 
         <p>Coupon Used: '.$couponCode.'</p> 
         <p>Total After Discount: £ '.$amount.'.00</p> 
        </td></tr>'.foreach($orders as $order_real){ $order_real['transaction_id'] }.'<tr><td height="10" colspan="5"></td></tr> 
        <tr><td height="1" bgcolor="#777777" colspan="5"></td></tr> 
        <tr><td height="10" colspan="5"></td></tr> 
        <tr><td colspan="5"><p>Sending luck, good health and best regards as always<br>XXXX team</p></td></tr> 
        <tr><td height="10" colspan="5"></td></tr> 
        </table> 
        </body> 
        ' 
]); 

le code fonctionne bien si je supprimer le foreach ($ commandes comme order_real $) {...}, mais retourne HTTP erreur 500 quand je l'inclure comme ci-dessous, peut-être son concaténation? comment faire?

Nous vous remercions à l'avance

+0

'foreach()' ne retourne rien, vous ne pouvez pas l'utiliser dans une concaténation de chaînes comme ça . –

+0

Je sais que c'est juste un code de démo, je suis prêt à mettre des données récupérées dans une structure ... comment l'utiliser? comment concaténer? – KaldoLeb

+0

Construisez le code HTML en dehors des paramètres de la fonction où vous pouvez mieux le contrôler - et créez une variable séparément avec foreach et incluez-la comme une autre variable ordinaire. Faire trop dans un segment/ligne de code rend plus compliqué que nécessaire. –

Répondre

2

foreach() est pas une fonction - il ne retourne rien, vous ne pouvez pas l'utiliser dans une concaténation de chaînes comme ça. Vous pouvez utiliser l'opérateur .= pour ajouter continuellement HTML à une variable pour chaque itération de la boucle:

$html = '... lots of HTML ... '; 
foreach (...) { 
    $html .= '... more HTML ...'; 
} 
$html .= '... some more HTML ...'; 
+0

Je vais essayer maintenant, merci quand même :) – KaldoLeb