2012-04-05 8 views
1

Ich möchte Sendgrid WebAPI vorzugsweise ohne SMTP oder Swiftmailer mit dem folgenden Code verwenden. Ist es möglich, eine komplette dynamische Webseite an das 'html' $ params-Array zu übergeben, ohne eine lange String-Variable zu erstellen und jedes Zitat zu entfliehen und jede Variable zu echozieren? Jede E-Mail unterscheidet sich erheblich, so dass Sendgrids Template/Mailmerge-Optionen für mich nicht funktionieren. Vielen Dank!Dynamisches PHP HTML mit Sendgrid Web API senden

Hier ist ein einfaches HTML-Beispiel (ich hat viele dynamischen Inhalte):

<html> 
    <head></head> 
    <body> 
    <p>Hi I'm <?php echo $name; ?>!<br> 
     <span style="color: #999999; font-size: 11px;">How are you?</span><br> 
    </p> 
    </body> 
</html> 

$url = 'http://sendgrid.com/'; 
$user = 'USERNAME'; 
$pass = 'PASSWORD'; 

$params = array(
    'api_user' => $user, 
    'api_key' => $pass, 
    'to'  => '[email protected]', 
    'subject' => 'testing from curl', 
    'html'  => 'testing body', 
    'text'  => 'testing body', 
    'from'  => '[email protected]', 
); 


$request = $url.'api/mail.send.json'; 

// Generate curl request 
$session = curl_init($request); 
// Tell curl to use HTTP POST 
curl_setopt ($session, CURLOPT_POST, true); 
// Tell curl that this is the body of the POST 
curl_setopt ($session, CURLOPT_POSTFIELDS, $params); 
// Tell curl not to return headers, but do return the response 
curl_setopt($session, CURLOPT_HEADER, false); 
curl_setopt($session, CURLOPT_RETURNTRANSFER, true); 

// obtain response 
$response = curl_exec($session); 
curl_close($session); 

// print everything out 
print_r($response); 
+0

Wenn es Ihnen nichts ausmacht meine Frage, was stimmt nicht mit der Verwendung von SMTP? – Borealid

+0

Nichts ist wirklich falsch daran ... es ist nur so, dass die Web-API-Methode so einfach zu sein scheint, ohne zusätzliche Bibliotheken zu benötigen. – Jeff

Antwort

1

Der beste Weg, um den HTML Sie wäre müssen zu erzeugen wie Smarty eine Template-Engine zu verwenden. Also in Ihrem Beispiel, irgendwo über tatsächlich die E-Mail zu senden, würden Sie so etwas wie tun:

include('Smarty.class.php'); 

$smarty = new Smarty; 
$smarty->assign('name', 'Swift'); 
$smarty->assign('name', 'SendGrid'); 
$smarty->assign('address', '123 Broadway'); 

// Store it in a variable 
$emailBody = $smarty->fetch('some_dynamic_template.tpl'); 

Und dann, wenn Sie tatsächlich benötigen die E-Mail mit dem neuen dynamischen HTML Körper senden:

.... 

$params = array(
    'api_user' => $user, 
    'api_key' => $pass, 
    'to'  => '[email protected]', 
    'subject' => 'testing from curl', 
    'html'  => $emailBody, 
    'from'  => '[email protected]', 
); 

.... 
+0

Danke Mike. Ich habe Smarty noch nie zuvor benutzt. Könnte ich etwas Ähnliches tun, indem ich eine zweite PHP-Datei erstelle und file_get_contents() verwende, um sie in die Variable $ emailBody zu laden? – Jeff

+0

Jeff, es ist ein wenig komplizierter als das, weil Sie den dynamischen Inhalt ersetzen müssen. Aber hier ist ein großartiger Artikel über die Erstellung eines einfachen Templating-Systems mit 'file_get_contents' http://www.broculos.net/en/article/how-make-simple-html-template-engine-php – Swift