MySQL Datenbankinhalt per PHP Mail senden?
Ich würde gerne gewisse Inhalte aus einer SQL Datenbank per eMail versenden wenn das Datum in der Spalte "Wiedervorlage" das heutige ist. Das ganze Skript muss ich dann per Cronjob ausführen - soweit weiß ich es aber ich bekomme die Kombi zwischen PHPMail Versand und SQL Abfrage nicht hin. Ich bin bei Google auf Seite 10!! und hoffe hier auf Hilfe! :)
meine Datenbank hat in der Tabelle wiedervorlage u.a. die Spalten "finanzprojektnummer, wiedervorlage und beschreibung. Diese will ich alle per eMail ausgeben und senden, wenn das Datum in "Wiedervorlage" dem heutigen entspricht.
3 Antworten
Woran genau hängt es denn? Kannst du die Daten auslesen mit PhP? Oder hast du Probleme mit der Automatisierung ? Oder weißt du nicht wie man eine Email mit php schickt ?
So ich vermute mal das deine "finanzprojektnummer" ein unique Integer Wert ist, da brauchst du dann kein like. Das nimmt man sowie nur fürs Abgleichen einer Zeichenkette.
Bei deiner Email musst du Informationen die du in der DB ausliest in eine Variable schreiben. Hängst es einfach einem String immer an und sendest dann den Content.
Aktuell habe ich jetzt folgenden Code... Wenn ich die eMail Funktion ausklammer und eine fixe Finanzprojektnummer einsetze dann wird mir eine Tabelle angezeigt mit den gewollten Daten bezogen auf die fixe Finanzprojektnummer.
Sobald ich die eMailFunktion wieder einklammer, bekomme ich eine leere eMail. Dabei möchte ich eine eMail mit dem Inhalt bekommen, der mir bei Ausklammerung in Tabellenform angezeigt wird. Wo liegt hier der Fehler vor?
<?php $host = "host"; $user = "User";
$pass = "Passwort"; $con = mysql_connect($host,$user,$pass) or die (mysql_error()) ;
mysql_select_db("datenbank",$con) or die (mysql_error()) ;
$sql = "
SELECT
mandant,finanzprojektnummer,wiedervorlage,beschreibung,erledigt
FROM
wiedervorlage
WHERE finanzprojektnummer Like 1234567
";
$query = mysql_query($sql);
echo "<ul>";
WHILE($row = mysql_fetch_assoc($query))
{
echo '<table border=1>';
{
echo '<tr>';
echo '<td>' . $row['mandant'] . '</td>'; echo '<td>' . $row['finanzprojektnummer'] . '</td>';
echo '<td>' . $row['wiedervorlage'] . '</td>';
echo '<td>' . $row['beschreibung'] . '</td>';
echo '<td>' . $row['erledigt'] . '</td>';
echo '</tr>';
}
echo '</table>';
} echo "</ul>"; $empfaenger = 'empfaenger@provider.de';
$betreff = 'Neue Nachricht';
$nachricht = $row['beschreibung'];
$header = "FROM: Absender <email@domain.de>"; mail($empfaenger, $betreff, $nachricht, $header); ?>
In der Mail soll dann später Mandant, Finanzprojektnummer wiedervorlage und Beschreibung übertragen werden aber ich hab es zu testzwecken erstmal bei beschreibung belassen da das ja schon nicht funktioniert.
Hoffe jemand kann mir helfen bzw. einen Tipp geben ich sehe den Fehler nicht
Werden die Tabellendaten korrekt angezeigt? Wenn ja, dann packe alle row results mitsamt der html Formatierung in ein String (statt diese nur über echo auszugeben) und schick diesen String mit phpmailer als html email (die mail() funktion in PHP setzt falsche Header so das die Mail falsch ankommt oder im Spamfilter landet, diese also nicht benutzen, sondern Mails mit PHPMailer senden)
Ich bin leider zu sehr Laie um zu verstehen wie genau du das meinst... Das mit phpMailer hattest du mir ja schonmal vorgeschlagen aber ich hatte da nicht verstanden wie ich meinen Code in den PhpMailerCode einfügen kann (trotz gefühltem 5000maligem Anschauen des Videos) :-D
Hallo,
du gibst deine Tabelle zum Test in der WHILE Schleife mit ECHO aus, diese ist aber vor deiner mail-Funktion geschlossen und die $row Variable daher leer -> leere Mail. Du musst dir das Ergebnis aus der Schleife in einer Variable zwischen speichern und diese Variable dann an den mail Body übergeben.
Und wie genau mache ich das? Tut mir wirklich Leid ich bin leider zu sehr Laie :D
Script und PHPMailer Anleitung im Video
$conn = new mysqli($servername, $username, $password, $dbname);
$sql = "SELECT * FROM `table` WHERE DATE(`Wiedervorlage`) = CURDATE()";
$result = $conn->query($sql);
$message = '';
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$message .= $row['finanzprojektnummer'] . ':' . $row['beschreibung'] . '<\ br>';
}
}
sendMail( $message );
function sendMail($message){
//send message with phpmailer
}
https://youtube.com/watch?v=fcLXsxpk2dc
Tut mir Leid ich muss nochmal blöd fragen: wo setze ich dein Script oben ein? in die example.php Datei unter dem ganzen code vom a simple Example Beispiel?
Also meinen aktuellen Code habe ich mal oben als Kommentar bei "DougundPizza" gepostet. Ich kann den Kommentar irgendwie nicht kopieren. Vielleicht kann mir jemand helfen ich sehe den Fehler leider nicht
PSEUDOCODE um dir auf die Sprünge zu helfen:
result = sql_query(SELECT .. WHERE Wiedervorlage=heute());
text = "";
while(item = fetch_array(result)
{
text .= item["text"]; } send_as_mail(text);
Habe keine Ahnung was du genau versenden willst und wie das aussehen soll usw., aber denke der Code wird dir helfen ^^
Also meinen aktuellen Code habe ich mal oben als Kommentar bei "DougundPizza" gepostet. Ich kann den Kommentar irgendwie nicht kopieren. Vielleicht kann mir jemand helfen ich sehe den Fehler leider nicht
Also ich habe in der Datenbank "wiedervorlage" unter anderem die spalten finanzprojektnummer, wiedervorlage und Beschreibung. Ich möchte jeden Tag, wenn das heutige Datum dem Datum in der Wiedervorlage Spalte entspricht, eine eMail erhalten mit finanzprojekt und der dazugehörigen Beschreibung. Muss keine besondere Formatierung sein, ich muss nur erkennen welche Beschreibung zu welchem Finanzprojekt gehört.
Du hast oben doch nen Beispielcode. Kannste das nicht auf dein Projekt anpassen?
Also meinen aktuellen Code habe ich mal oben als Kommentar bei "DougundPizza" gepostet. Ich kann den Kommentar irgendwie nicht kopieren. Vielleicht kann mir jemand helfen ich sehe den Fehler leider nicht
also eine email mittels phpmail kann ich versenden. Die Abfrage von Daten aus der Datenbank kriege ich auch hin. Die Automatisierung kann ich über Cronjobs. Aber die Verbindung klappt nicht also eine eMail mit 3 Variablen aus der Datenbankabfrage wenn das heutige Datum dem Datum in der Spalte Wiedervorlage entspricht. Das klappt nicht. vielleicht hast du ein paar tipps oder sogar ein Skript