Beste mensen,

Ik probeer met php een mail te versturen naar de nieuwe klanten die een abonnement hebben afgesloten. Ik doe dit in een server van DirectAdmin en heb dan ook een email van mijn eigen server ([email protected] (weggelaten door privacy)). Kan iemand mij helpen?

,groet Sem

PS: Hier is de code:


<?php
    if(isset($_POST['submit'])){
 
       $to = $_POST['mail'];
       $subject = 'Welkom op mijn site';
       $from = '[email protected]';
 
       //  HTML mail versturen
       $headers  = 'MIME-Version: 1.0' . "\r\n";
       $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
 
      //  email headers maken
      $headers .= 'From: '.$from."\r\n".
      'Reply-To: '.$from."\r\n" .
      'X-Mailer: PHP/' . phpversion();
 
      // html bericht maken
      $message = '<html><body>';
      $message .= '<h1 style="color:#f40;">Hallo!</h1>';
      $message .= '<p style="color:#000000;font-size:18px;">Welkom, u bent nu geabonneerd!</p>';
      $message .= '</body></html>';
 
      // email versturen
      if(mail($to, $subject, $message, $headers)){
         echo "Your mail has been sent successfully.";
      } else{
         echo "Unable to send email. Please try again.";
      }

    }
?>
<html>
    <head>
        <title>Abonneer</title>
    </head>
    <body>
        <h1>Abonneer nu voor mijn site</h1>
        <form method="post" action="">
            <input type="email" name="mail" placeholder="E-mail" required>
            <br>
            <br>
            <input type="submit" name="submit" value="Aboneer">
        </form>
    </body>
</html>

En wat is je probleem nu?
Trouwens, dat doet DA ook zelf als je een user aanmaakt, als je dat bedoelt.
- Ariën - op 07/04/2020 10:10:04

En wat is je probleem nu?
Trouwens, dat doet DA ook zelf als je een user aanmaakt, als je dat bedoelt.


Als ik deze code gebruik verstuurd hij geen mailtje. Wat moet ik doen in de DA om het te fixen?


[size=xsmall]Toevoeging op 07/04/2020 11:48:38:[/size]

Jeroen van Rensen op 07/04/2020 11:40:34

Hallo,

Ik raad aan om PHPMailer te gebruiken ipv de mail-functie van PHP. PHPMailer heeft meer opties, en heeft bij mij altijd gewerkt.

Hier is de Github-pagina: https://github.com/PHPMailer/PHPMailer

Succes ermee!


Hi thanks! Ik snap niet echt wat dit is. En niet een hele duidelijke uitleg. Kent u een filmpje of website die het makkelijk kan uitleggen of uzelf misschien?

,groetjes Sem
DirectAdmin is enkel een beheerpaneel met de nodige packages. Die zou het gewoon moeten toestaan als je binnen je maillimiet van je account valt, als die ingesteld is.

Kan je wat vinden in je mail-log van exim?

Verder is PHPMailer stukken beter voor een website, maar naar mijn mening moet een simpele mail() ook werken. Je wilt namelijk weten of niet je mailtransport ergens overhoop ligt op je server.

PHPmailer is overigens een bibliotheek met functies om uitgebreid te mailen. Je hebt hierin vrije keuze op welke manier je wilt mailen die een mailserver verplicht: Via de mail-deamon vvan de server zelf, of via een SMTP van een andere provider, en daarbij heb je ook zelf de instellingen in de hand voor de authenticatie die verplicht is.
Ik raad phpMailer aan als je echt vanuit je site wilt mailen.

Maar zoek ook uit waarom mail() niet werkt.

wat nu als $_POST['mail'] geen mailadres bevat, maar leeg is, of een tekst bevat?
of 10 mailadressen?
of 100 mailadresssen, een enter en nog wat extra (mail)code?
** quoteknip**
Hi,

In het stukje html staat deze regel:


<input type="email" name="mail" placeholder="E-mail" required>


Het veld kan dus niet leeg zijn, moet een geldig email adres zijn door het type="email"

Dus dan hoef ik me daar toch niet druk om te maken. En zo wel, hoe kan ik dit fixen?

,groetjes Sem
Dat kan iedereen met een simpele HTML-'hack' omzeilen.
Je doet in je PHP-script ook geen enkele controle of validatie hierop. Ook zou mailheader-injection mogelijk zijn, waardoor iemand eenvoudig een lading spam kan afleveren.
Weet u wat ik moet toevoegen of iets anders?
Sem Bakker op 07/04/2020 11:42:42
Als ik deze code gebruik verstuurd hij geen mailtje.


Hoe trek jij deze conclusie? Krijg je direct het bericht "Unable to send email. Please try again."? Of komt het e-mailbericht niet aan? Wanneer een programma niet doet wat het behoort te doen zijn details bij een probleemanalyse belangrijk. Enkel de mededeling "het programma doet niet wat het behoort te doen" is niet bepaald behulpzaam.

Net zoals bij de analoge post heeft de brief een lange weg af te leggen en kan er onderweg van alles misgaan:
- de postbus wordt nooit geleegd
- de brief wordt versnipperd in de sorteermachine
- de brief raakt tijdens de bezorging kwijt
- de brief belandt per abuis in de papierbak met de reclamefolders

Zo kunnen er op soortgelijke (en bijna haast parallelle) wijze een hele hoop dingen misgaan met een e-mailbericht.

Je moet het als volgt zien: PHP (of liever gezegd de mail() functie) mailt zelf niets. De mail()-functie draagt de mail over aan een proces die het verzenden verder afhandelt. Wanneer mail() de waarde true retourneert (dus wanneer je de boodschap "Your mail has been sent successfully." krijgt) is het werkt van PHP in principe klaar. Indien mail() false retourneert (dus wanneer je de boodschap "Unable to send email. Please try again." krijgt) wil dat zeggen dat PHP het bericht niet kon overdragen. Mogelijk houdt dat in dat er iets niet goed geconfigureerd is, of dat jouw host simpelweg het versturen van mail niet toestaat.

(EDIT: dit wordt mogelijk anders indien je gebruik maakt van PHPMailer, deze kan volgens mij rechtstreeks communiceren met de SMTP-server)

Dan gaan we een stap verder, vervolgens komt het bericht (indien de vorige stap succesvol was) waarschijnlijk in een wachtrij terecht, en deze wachtrij wordt op gezette tijden verwerkt. Het kan zijn dat bepaalde processen op de server niet aan staan of in ieder geval niet goed werken waardoor deze wachtrij nooit geinspecteerd/geleegd wordt. Oftewel de postbus wordt nooit geleegd. Dit is waarschijnlijk niet iets waar je zelf invloed op uit kunt oefenen tenzij je je eigen servers volledig zelf beheert ofzo, dus je zult dan iemand van jouw hostingpartij moeten vragen om na te gaan of dat alles werkt.

Dan kan er nog een (aanzienlijke) vertraging zitten tussen verzending en ontvangst. Als je hele goedkope hosting hebt hoeft je niet te verwachten dat een e-mailbericht binnen enkele seconden op de eindbestemming is.

En tot slot, heb je je spambox al gecontroleerd? Mogelijk is het bericht zo kort of van een zodanige vorm dat deze als spam wordt bestempeld. Een pakket als PHPMailer kan je helpen om volwaardige(re) MIME-mailberichten op te stellen. Het kan ook al helpen om jouw bericht wat meer inhoud te geven. Ook kan het helpen om aan de ontvangstkant de broncode van het mailbericht te bekijken indien deze als spam gemarkeerd wordt, deze kan hints bevatten over hoe je de spamscore omlaag kunt halen, of wellicht is het een kwestie om je spamfilter misschien wat minder streng af te stellen.

Zoals je wellicht kunt opmaken uit dit bovenstaande relaas is dit een iteratief proces. Eerst zul je moeten vaststellen waar het schip precies strandt, en dan pas kun je overgaan tot het formuleren van een strategie om dit op te lossen.

Reageren