11 Stimmen

PHPMailer vs. mail() für ein einfaches Kontakt-Formular

Ich bin neu in PHP, habe aber ein gutes Verständnis für die Dinge (habe noch keine Klassen gelernt).

Die Frage:

Welche soll ich wählen? PHPMailer oder mail() für mein neues Kontaktformular.

Das Formular ist einfach:

Your name:
Your email:
Subject:
Body:

Ich habe etwa 2.000 Besucher pro Tag und erhalte etwa 10 Einsendungen pro Tag, ich brauche also nichts allzu Ausgefallenes =)

Verschiedene Fragen in meinem Kopf:

  • Wird PHPMailer mein Kontaktformular besser vor CC: Injection schützen (ein großes Problem)? Ich kenne bereits die anti-spambot display:none CSS Trick.
  • Erspart mir PHPMailer den Schritt, eine email_validator() Funktion?
  • Erspart mir PHPMailer die Zeit, eigene Funktionen schreiben zu müssen?

Danke! Mit etwas Glück werde ich bald Fragen beantworten. Lol

16voto

karim79 Punkte 333786

Hier ist alles, was mir in einer Sitzung einfiel. Verzeihen Sie mir, wenn ich etwas ausgelassen habe.

Vorteile der in PHP eingebauten Mailfunktion, keine externe Bibliothek/Wrapper:

  • Sie brauchen nichts außerhalb von PHP.
  • Sie brauchen keine neue API zu lernen.
  • Sie müssen sich nicht um ein PHP Upgrade oder ähnliches das Skript zerstört.
  • Sie müssen sich nicht um eine aktualisierte Version nicht auf Ihrer PHP-Installation.
  • Sie müssen sich keine Sorgen machen über potenzielle Sicherheitsschwachstellen als die sich aus der Verwendung dieses Skripts ergeben.
  • Wenn es sich um eine einfache Aufgabe handelt, sind Sie schon fertig. in wenigen Minuten erledigt.

Vorteile der Verwendung einer externen Bibliothek/Wrapper:

  • Wenn Sie mehr Komplexität in Ihr E-Mailing zu bringen, können Sie können Sie dies ganz einfach tun. Hinzufügen von Anhängen, Inline-Bildern und dergleichen machen mit der einfachen PHP-Mail-Funktion nicht viel Spaß Funktion. Externe Bibliotheken (zumindest zumindest die guten) haben eine mehr OOP-artige API. Das Hinzufügen eines Anhangs kann so einfach sein wie $message->addAttachment($file); ohne mit Kopfzeilen usw. herumspielen zu müssen.
  • Externe Bibliotheken verstecken besser die hässlichen Komplexitäten von Aufgaben wie dem Hinzufügen von Anhängen, Zeichen Kodierungen und Inline-Bilder.
  • Wenn Sie jetzt eine Bibliothek benutzen, sparen Sie die erspart Ihnen die Mühe, sie in Zukunft zu Zukunft zu lernen, wenn Sie tun benötigen die zusätzliche Komplexität/Funktionalität.
  • Externe Bibliotheken wahrscheinlich (Ich bin wirklich nicht sicher, welche und in welchem in welchem Ausmaß) sprechen bestimmte Schwachstellen, die PHPs Mail nicht nicht.

Wenn mir noch etwas einfällt, werde ich es sicher hinzufügen.

2voto

Pascal MARTIN Punkte 384469

Das wird vielleicht nicht alle Ihre Fragen beantworten, aber es kann auch nicht schaden, denke ich...

Was auch immer Sie tun möchten, Ich würde nicht mitgehen mail() Das Versenden von E-Mails ist keine einfache Aufgabe, und die Verwendung einer bestehenden Bibliothek/eines bestehenden Frameworks ist immer eine gute Idee: Es löst viele Probleme, an die Sie wahrscheinlich noch nicht einmal gedacht haben - selbst wenn Sie nicht viele E-Mails versenden müssen.

Zu deinen spezifischen Fragen können dir vielleicht andere Antworten etwas anderes sagen und/oder mehr Informationen liefern, aber jede "gute" Bibliothek, die zum Versenden von Mails entwickelt wurde, sollte mit dieser Art von Problemen umgehen können... Andernfalls sollten Sie wahrscheinlich nach einer anderen Bibliothek suchen ^^

Wenn Sie ein paar dumme Nicht-Adressen testen, können Sie trotzdem 100%ig sicher sein ;-)

Eine andere Lösung, um ganz sicher zu gehen, ist die Überprüfung des Quellcodes der Bibliothek ;-)

Im Quelltext der Version 2.2.1 finden Sie unter anderem diese Angaben:

class.phpmailer.php Funktion AddAnAddress , Zeile 413, sehen Sie dies:

if (!self::ValidateAddress($address)) {
  $this->SetError($this->Lang('invalid_address').': '. $address);
  if ($this->exceptions) {
    throw new phpmailerException($this->Lang('invalid_address').': '.$address);
  }
  echo $this->Lang('invalid_address').': '.$address;
  return false;
}

Und es scheint, dass diese Funktion von den anderen Funktionen, die eine Adresse hinzufügen, verwendet wird... Ich nehme also an, es gibt eine Art von E-Mail-Adressen-Validierung ;-)
Das wird zumindest eine deiner Fragen beantworten ^^

PHPMailer ist übrigens nicht die einzige Lösung, die es gibt; es gibt viele andere, wie z.B. :

2voto

Steven Surowiec Punkte 9552

Wie Pascal MARTIN bereits erwähnt hat, ist das Versenden einer E-Mail nicht so einfach, wie manche Leute annehmen. Um Ihre Fragen direkt zu beantworten. Ja, PHPMailer führt einige Validierungen durch, die zwar nicht besonders fortschrittlich sind, aber für Ihre Zwecke ausreichen sollten. Und PHPMailer wird Ihnen einige Zeit sparen, je nachdem, welche benutzerdefinierten Funktionen Sie benötigen. Einige Dinge sind jedoch zu beachten:

  • HTML gegen reinen Text. Wenn die E-Mails nur an Sie gehen, ist das wahrscheinlich nicht so wichtig. Aber wenn Sie jemals Emails an Ihre Benutzer senden (z.B. eine Bestätigungsemail), wollen Sie in der Lage sein, sowohl HTML- als auch reine Text-Clients zu unterstützen. PHPMailer (und Zend_Mail) machen dies sehr einfach.
  • SMTP. Dies ist ein weiterer Punkt, der wirklich wichtig ist, wenn Sie E-Mails an Ihre Benutzer senden, aber nicht so sehr, wenn es nur eine E-Mail an Sie selbst ist. Wenn Sie die reguläre mail()-Funktion von php verwenden, wird die E-Mail über sendmail verschickt, das bei fast allen *nix-Installationen (insbesondere bei Servern) von Haus aus dabei ist. Aus diesem Grund sind Spam-Filter nicht sehr freundlich zu dieser Funktion. Wenn Sie einen regulären SMTP-Server mit einem vertrauenswürdigen MX-Eintrag eingerichtet haben (oder wenn Sie ein Gmail-Konto haben), können Sie darüber per SMTP senden, was die Wahrscheinlichkeit verringert, dass Ihre E-Mail als Spam erkannt wird.

Zusätzlich zu PHPMailer ist Zend_Mail eine gute Wahl (es ist Teil der Zend-Framework ). Für ein einfaches Kontaktformular könnte das jedoch ein bisschen viel sein.

0voto

arbales Punkte 5205

Ich habe mich für PHPMailer entschieden, weil ich damit SMTP-E-Mails an Google senden kann, ohne irgendwelche Bibliotheken zu installieren oder einen Mailserver zu konfigurieren, so dass ich mir keine Gedanken über Spam-Probleme machen muss.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X