2010-08-30 5 views
1

Je souhaite envoyer des e-mails lorsque les données proviennent d'une requête php/mySQL.Envoyer un e-mail avec du contenu de PHP/Mysql

Je sais que le html va rendre dans l'email mais je ne pense pas que les codes php le feront.

Y a-t-il un moyen pour envoyer des e-mails avec du contenu interrogé à partir d'une base de données mySQL?

Je recherche déjà ici, il ya un sujet qui le couvre mais la personne qui a conseillé a suggéré un export pdf ou d'utiliser un outil tiers qui dans mon cas ne sont pas applicables.

Merci pour l'aide les gars :)

+0

Le script php est exécuté sur votre serveur, il n'est pas nécessaire qu'un client exécute votre script php. Vous récupérez des chaînes de la base de données, les placez dans une sorte de modèle et envoie la chaîne résultante. – VolkerK

+0

Je suppose que vous obtiendrez plus d'aide si vous fournissez plus d'informations. Il semble que vous envoyiez déjà des emails (sinon, comment connaîtriez-vous le "html will render"?), Alors quelle commande/technique utilisez-vous pour le faire? Cela déterminera comment vous pourriez rendre d'autres données. php a pipe et proc_open pour exécuter les commandes et lire leur sortie - une fois que vous avez lu les résultats SQL dans une chaîne, vous pourriez - par exemple - besoin d'encoder pour le rendu HTML - par exemple. > pour

+0

quand j'envoie par exemple google, je sais qu'il va "rendre" mais si j'envoie blocs de code comme e-mail, ils ne seront pas "rendre", non? Tony: pouvez-vous s'il vous plaît fournir un petit échantillon de code? Désolé pour la noobishness: $ –

Répondre

2

Utilisez PHPMailer pour générer l'e-mail sur le serveur. Il est très facile de générer des messages en plusieurs parties (texte en clair + html, avec pièces jointes et images incorporées/en ligne). En gros:

// set up PHPMailer 
$mail = new PHPMailer(); 
$mail->SetFrom('[email protected]'); 
$mail->AddReplyTo('[email protected]'); 
$mail->Subject('Your profile'); 
$mail->IsHTML(TRUE); 

// do your database query 
$con = connect_to_database(); 
$stmt = run_database_query($con, "SELECT ... FROM ..."); 

$data = fetch_from_database($stmt); 


// set the email address 
$mail->AddAddress($data['email'], $data['fullname']); 


// html content for smart email clients 
$html = <<<EOL 
<h1>Welcome</h1> 

<p>Your username is {$data['username']}.</p> 
EOL; 

// plain text alternate content 
$text = <<<EOL 
Welcome 

Your username is {$data['username']}. 
EOL; 

// add the content to the mail 
$mail->MsgHTML($html); 
// add alternate content 
$mail->AltBody($text); 


// send the mail 
if ($mail->Send()) { 
    // mail sent correctly 
} else { 
    die("Uhoh, could not send to {$mail['email']}:" . $mail->ErrorInfo); 
} 
+0

en train d'essayer <3 merci : D mais je reçois erreur sur EOL - j'ai essayé de supprimer, en remplaçant par des citations ...: $ –

+0

Oups. '$ text = <<< EOF;' <- ne devrait pas avoir de point-virgule ici. Le fixe maintenant. –

0

Pour éviter les problèmes de spam, vous pouvez envelopper la PHPMailer dans une classe et instancier que, à chaque adresse e-mail lu à partir de la table de base de données.

Pour chaque adresse e-mail, vous pouvez créer une nouvelle instance et faire une sorte de ->setMailAddr($mail,$fullName) et après avoir envoyé l'e-mail détruire cette instance.

L'idéal est de placer une nouvelle instance à chaque POST. Dans ce cas, vous pouvez mettre un FORM dans la page.