Mail met DirectAdmin
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?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>
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>
Trouwens, dat doet DA ook zelf als je een user aanmaakt, als je dat bedoelt.
Gewijzigd op 07/04/2020 10:14:49 door - Ariën -
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!
- 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.
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?
Toevoeging op 07/04/2020 11:48:38:
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!
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
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.
Gewijzigd op 07/04/2020 12:05:23 door - Ariën -
of 10 mailadressen?
of 100 mailadresssen, een enter en nog wat extra (mail)code?
Hi,
In het stukje html staat deze regel:
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
Gewijzigd op 07/04/2020 15:06:49 door - Ariën -
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?
https://www.w3schools.com/php/filter_validate_email.asp
En zie Example #1.
Gewijzigd op 07/04/2020 15:13:37 door - Ariën -
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.
Gewijzigd op 07/04/2020 16:38:28 door Thomas van den Heuvel
Jullie zeggen allemaal dat ik PHPMailer moet gebruiken. Dus dat ga ik dan doen ook! Ik heb echter geen idee hoe dit werkt. Kan iemand mij helpen?
Sem
Mogelijk is het mailtransport op je server stuk, en dat is natuurlijk van essentieel belang.
Gewijzigd op 08/04/2020 11:52:11 door - Ariën -
Een andere (en tevens een deels opnieuw gestelde) vraag: waar vandaan probeer je mail te versturen die niet "werkt", en waaruit blijkt dat dit niet werkt?
Realiseer jezelf nogmaals dat mail die niet aankomt niet zoveel zegt, omdat er zoals eerder opgemerkt een heleboel dingen kunnen misgaan alvorens mail op de eindbestemming arriveert.
Het is jouw taak om te identificeren waar dit precies misgaat. Wij kunnen je daarbij helpen, maar alleen als je accurate en zo volledig mogelijke informatie verschaft, anders blijft het voor ons ook gissen waarom "de mail niet werkt".
Code (php)
1
2
3
4
5
2
3
4
5
2020-04-08 12:23:13 cwd=/home/aar/domains/testdomein.nl/public_html/testscripts 5 args: /usr/sbin/sendmail -t -i -f [email protected]
2020-04-08 12:23:13 HBj6zH-6706Ph-TV <= [email protected] U=aar P=local S=428 T="Dit is een test" from <[email protected]> for [email protected]
2020-04-08 12:23:13 cwd=/var/spool/exim 3 args: /usr/sbin/exim -Mc HBj6zH-6706Ph-TV
2020-04-08 12:23:16 HBj6zH-6706Ph-TV => [email protected] F=<[email protected]> R=lookuphost T=remote_smtp S=471 H=mx2.xs4all.nl [194.109.24.138] X=TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256 CV=yes C="250 2.0.0 mxdrop304.xs4all.net accepted message 038ANDRP******"
2020-04-08 12:23:16 HBj6zH-6706Ph-TV Completed
2020-04-08 12:23:13 HBj6zH-6706Ph-TV <= [email protected] U=aar P=local S=428 T="Dit is een test" from <[email protected]> for [email protected]
2020-04-08 12:23:13 cwd=/var/spool/exim 3 args: /usr/sbin/exim -Mc HBj6zH-6706Ph-TV
2020-04-08 12:23:16 HBj6zH-6706Ph-TV => [email protected] F=<[email protected]> R=lookuphost T=remote_smtp S=471 H=mx2.xs4all.nl [194.109.24.138] X=TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256 CV=yes C="250 2.0.0 mxdrop304.xs4all.net accepted message 038ANDRP******"
2020-04-08 12:23:16 HBj6zH-6706Ph-TV Completed
(uiteraard gefingeerd)
In mijn geval kan ik dus afleiden dan de post is opgehaald vanaf mijn loakle postkamer, en naar de mailserver van XS4ALL gebracht is. En dat de mailserver mxdrop304.xs4all.net mij kan bevestigen dat die binnen is.
Wat er dan gebeurt, ligt bij de ontvangende mailserver zelf, en daar kan ik geen invloed op uitoefenen. Maar daar doet de postbode goed zijn werk, want ik krijg de mail gewoon netjes binnen in de postbus van [email protected].
Wat er gebeurt:
1) In de map /testscripts wordt een mailscript uitgevoerd en naar het sendmail-systeem van Linux gebracht.
2) De adresgegevens en het onderwerp worden gelezen, en het kenmerk HBj6zH-6706Ph-TV komt erop.
3) De post komt in de 'af te handelen bak' van Exim, die de mail vervolgens de mail verder richting mijn deur gaat wijzen.
4) De mail is naar de mailserver van xs4all gebracht mxdrop304.xs4all.net, en die zeggen dat ze het oké vinden!
5) Mooi, zegt mijn mailserver, en die geeft aan dat het afgehandeld is.
Dus de vraag is: Waar gaat het bij jouw fout?
Gewijzigd op 08/04/2020 12:52:25 door - Ariën -