PHP User ohne email Eintrag filtern, info mail.

volcem

Lieutenant
Registriert
Dez. 2007
Beiträge
1.021
Guten morgen,

Irgend wie komm ich nicht weiter, und steh irgend wie auffen schlauch. :rolleyes:

Problem->

Ich möchte an alle Kunden aus der Datenbank eine Mail schreiben, soweit ist es auch kein Problem...
Solange der Kunde seine Email(oder bla@bla.de(com)) eingetragen hat, gibt es auch keine Probleme.

Doch wie der Teufel es so will, steht nicht bei jedem Kunden eine Email drin, sondern manchmal ein "-" oder "Keine" Oder ist von Anfang an leer.

Dies ist meine Test Datei:
PHP:
$result = mysql_query("SELECT distinct e_mail FROM excel WHERE userid=1"); 
while ($daten = mysql_fetch_array($result)) { 
$betreff ="test";
$nachricht ="test nachricht";
$absender ="info@xxx.de";
$headers = 'From:' . $absender . "\r\n";

        $email = $daten['e_mail'];
     mail("$email", "$betreff", "$nachricht", "$headers") or die('Die Email konnte nicht versendet werden');
     

} ?>
( Dies ist nur eine Testdatei, die Variablen werden später aus anderen Datein zusammen geetzt und verarbeitet)

Wie kann ich die kunden filter die keine Email Adresse angegeben haben, den sobald der Code zu einem Kunden kommt wo nichts eingetragen ist, bleibt er bei diesem stehen und schickt nichts mehr raus...

Kann da wer helfen, hab auch keine Ahnung wie ich Herr Google fragen soll :-/

lg
 
PHP:
function checkEmailAddress ($eMailAdresse) {
        if (eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,4}$", $eMailAdresse, $check)) { 
        if(getmxrr(substr(strstr($check[0], '@'), 1), $validate_email_temp)) { 
            return true;
            }
        if(checkdnsrr(substr(strstr($check[0], '@'), 1),"ANY")){
            return true;
            }
        }
       return false;
     }
Ist eine der besten Funktionen, die ich bisher gefunden habe und selber nutze. Nicht nur, dass die Mail zuverlässig auf korrekte Syntax geprüft wird - nein, wenn der angegebene Mailserver nicht existiert (Fake-Mail), wird auch "false" zurückgegeben.

Natürlich sagt das noch nicht aus, ob das angegebene Postfach auch existiert, aber es schließt die meisten Falschangaben aus. Falls einem das zu langsam seien sollte (wenn man paar tausend Kunden hat, kann es wohl etwas länger dauern), lässt man die zusätzlichen Checks halt weg (auf Windows-Servern klappt der Funktionsaufruf übrigens erst ab PHP 5.3).
 
Zuletzt bearbeitet:
Irgend wie bin ich zu doof die Funktion ordentlich zu implantieren...

Aufbau:

->funktion

->funktion liefert true

->$email =="true" { mail(bla, bla,bla) or die(bla); }

??

Kannst du diese Funktion mal oben auf meine Test.php anwenden?
Irgend wie bin ich gerade zu blöd, oder sehe den Fehler einfach nicht.
 
Zuletzt bearbeitet:
einfach "checkEmailAddress" aufrufen und dann --->(emailAdresse) <--- die jenachdem wahrscheinlich dynamisch von dir kommen.

checkEmailAddress(blabla@web.de);

oder eher

$emailAddresses = email adresse die du ausgelesen hast oder von sonst wo hast.

checkEmailAddress($emailAddresses);
 
PHP:
$mail = 'Test@adresse.de'; // Die Adresse muss halt aus deiner DB oder sonst wo her kommen
$cmr = checkMailAddress($mail);
if ($cmr) {
// raus mit der Mail
}
else
{
// nix wars
}
 
ich werde es mal so probieren!

PHP:
$result = mysql_query("SELECT distinct e_mail FROM excel WHERE userid=1"); 
while ($daten = mysql_fetch_array($result)) {

$betreff ="test";
$nachricht ="test nachricht";
$absender ="info@xxxx.de";

$headers = 'From:' . $absender . "\r\n";

function checkEmailAddress ($mail) {
    if (eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*.[a-z]{2,4}$", $mail, $check)) { 
        if(getmxrr(substr(strstr($check[0], '@'), 1), $validate_email_temp)) { 
            return true;
            }
        if(checkdnsrr(substr(strstr($check[0], '@'), 1),"ANY")){
            return true;
    }
        }
    return false;
    }

$mail = $daten['e_mail'];
$cmr = checkMailAddress($mail);
if ($cmr) {
echo "mail würde raus gehen";
}
else
{
echo "pech gehabt";
}  

}
?>

:mad: eyyy
Ich bin zu blöd... Kommt genau nichts.
Was stimmt den nicht?

Aber das script soll ja nicht abbrechen wenn er eine ausgabe mit "-" "keine" "kein bedarf etc" bekommt.
Irgend wie hab ich gerade null Ahnung wie man das realisieren kann.
 
Zuletzt bearbeitet:
Kleinen Fehler:

checkEmailAddress

Da fehlt ein Buchstabe beim Funktionsaufruf - und das "m" muss dann klein geschrieben werden ;)

Wenn das Skript nicht abbrechen oder anderweitig auf sich aufmerksam machen soll machst du einfach nur
PHP:
if ($cmr)
{
//raus mit der Mail
}
Sollte $cmr false sein, passiert dann einfach nichts. Ich nehme mal an dass du das in ner Schleife abarbeitest, da wird dann einfach die nächste Mail genommen.

Du hättest am ende also vermutlich eine For-Schleife folgenden Aufbaus:
PHP:
for ([Bedingung]) {
 $email = [DATEN HOLEN VON...];
 $cmr = checkEmailAddress($email);
 if ($cmr) {
   //raus mit der Mail
 }
}
 
Zuletzt bearbeitet:
PHP:
<?php
session_start();
    include_once 'include/cl.inc.php'; 
    include_once ("include/header.php");
    include_once ("include/online.php");  


function checkEmailAddress ($mail) {
    if (eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*.[a-z]{2,4}$", $mail, $check)) { 
        if(getmxrr(substr(strstr($check[0], '@'), 1), $validate_email_temp)) { 
            return true;
            }
        if(checkdnsrr(substr(strstr($check[0], '@'), 1),"ANY")){
            return true;
    }
        }
    return false;
    }

$result = mysql_query("SELECT distinct e_mail FROM excel WHERE userid=1"); 
while ($daten = mysql_fetch_array($result)) {

$betreff ="test";
$nachricht ="test nachricht";
$absender ="info@color-coatings.de";

$headers = 'From:' . $absender . "\r\n";

$mail = $daten['e_mail'];

}

$cmr = checkEmailAddress($mail);
if ($cmr) {

echo $mail;
mail("$mail", "$betreff", "$nachricht", "$headers") or die('Die Email konnte nicht versendet werden');

}


?>

So sieht die Test.php gerade aus, doch leider kommt irgend wie nichts!
:(
 
Naja einerseits ist dein Funktionsaufruf außerhalb deiner While-Schleife (wobei das ja evtl. wegen dem Test noch so gewollt seien kann), anderseits muss ich aber auch mal Fragen ob du bei dir eingestellt hast das Fehlermeldungen angezeigt werden sollen. Denn "nichts" kommt bei PHP eher selten, das wirft doch immer mit irgendwelchen Fehlermeldungen um sich mit denen man zumindest etwas anfangen könnte.
 
@AndrewPoison

Ich hab beide Varianten versucht, beides blieb ohne erfolg!
Jops, normal würde ne Fehlermeldung kommen, diese bleibt aber aus, wieso ka, wenn ich in einer anderen Datei, nen Fehler habe, bekomme ich dies direkt mitgeteilt!

@Mirdul

Leider damit auch kein erfolg!

:(
*edit*

Nehme ich allerdings die Funktion raus, bekomme ich bei echo ne Ausgabe, und Mails werden auch soweit verschickt bis der erste Kunde keine Email eingetragen hat.
Komische Geschichte..
 
Zuletzt bearbeitet:
Zum Überprüfen, ob es sich um eine gültige E-Mail-Adresse handelt, sollte auf die dafür vorgesehene PHP-Funktion zurückgegriffen werden:
PHP:
filter_var('bob@example.com', FILTER_VALIDATE_EMAIL)
filter_var @ PHP-Dokumentation
 
Hab jetzt mal 12Daten in die Datenbank geschrieben, 6 mit gültiger Adresse.
Was soll ich sagen, die 6Sind angekommen.
->Gültig
->Gültig
->Ungültig
->Keine
->Gültig
->Ungültig
etc

Also zwischendurch paar ungültige reingehauen, und diese werden übersprungen.

Wie sieht das ganze den aus, wenn ca 5000kunden in der DB sind und sagen wir 1/4 keine Gültige Adresse drin stehen hat?
Wird der Mail.Server sich dann einen abackern?
Welche Hardware genau, kann ich nicht sagen, da ich diese Daten nie hatte.
 
also bei 5000 mails in so kurzer zeit, wirst du wahrscheinlich auf der spamliste vom provider / hoster landen :D

bzw. da musst dich noch informieren ob du soviel mails in kurzer zeit versenden kannst

noch ein kleiner tipp (falls nichts dagegen spricht):
überprüfe die mailadresse schon wenn du sie in die datenbank speicherst, wenn sie unglültig ist, dann schrieb "null" hinein.
dann kannst du die mitglieder/benutzer mit gültiger mailadresse schon beim sql select filtern ( "SELECT * FROM ... WHERE ... AND mail IS NOT NULL;" )
damit ersparst du dir jeweils die überprüfung, wenn du zb jeden tag eine mail an alle senden willst.
 
die email überprüfung oben ist total fehlerhaft



beispiel:

user@sub2.sub1.tld -> fehlerhaft
user@domäne.de -> fehlerhaft
user@berlin.museum -> fehlerhaft

die liste ist endlos (sonderzeichen) usw.


valide emailüberprüfung ist: mind x zeichen dann ein @, dann mind y zeichen bevor mindest einem punkt und dann mindestens z zeichen nach dem letzten punkt

rest zu prüfen ist sinnlos, da wenn jmd ne falsche mail eingeben will, er das auch schaffen wird!
 
Zuletzt bearbeitet:
@darkd0g

Ja das auch meine Angst, doch es ist definitiv kein SPAM, dahinter steckt eine Lackfabrik.
es wird in Zukunft über neue Produkte Informiert, und so.
Naja abwarten und Tee Trinken, es wird ja nicht "jedentag" ne Info-Mail geschickt!

Jops, so ist es auch in dem System, das er keine ungültige Email Adresse reinschreiben kann.
Im System....

Die Quelle war eine CSV, von dem Kunden der die in seiner Datenbank haben wollte, irgend eine Mitarbeiterin war so schlau und hat wenn keine Email bekannt war, "müll" eingetragen, oder mal leer gelassen, oder keine Email etc.
Die alle raus zu suchen und zu editieren hatte ich persönlich keine Lust, zumal es nur Zeit und Geld kostet!

Die zukünftigen Kunden in der Datenbank, werden bei leer mit "NULL" oder bei eintrag halt mit eintrag geschrieben!
feld darf nur Leer(2xLeerzeichen geht schon nicht mehr) sein oder Inhalt mit @ und "." .

@ownagi

Bei welche Funktion?
Die (checkEmailAddresses()) oder die "filter_var('bob@example.com', FILTER_VALIDATE_EMAIL) " ?
 
du kannst ja die einträge in der datenbank mit einer kleinen schnell funtkion nochmals überprüfen
-> select * from kunde
-> foreach - checkmail
-> wenn keine gültige mail adresse -> update mit "null"
 
Zurück
Oben