PHP script dat twee mails verstuurt
Ik ben sinds kort me meer aan het verdiepen in PHP. Ik weet dat ik nooit een programmeerkoning zal worden, maar ik vind het wel interessant en als designer kom ik er regelmatig mee in aanraking. Voor een vriendin ben ik bezig om een eenvoudige pagina te maken met daarop een "houd me op de hoogte" veld.
Dit formulier met dus maar 1 inputveld moet 2 dingen doen:
1. een mailtje versturen naar de persoon die zich inschrijft (dit heb ik werkend!)
2. een mailtje sturen naar de admin zodat die weet wie zich heeft ingeschreven. Dit laatste krijg ik niet aan de praat.
Hierbij het script:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?PHP
$email = $_POST["email"];
$to = "[email protected]";
$subject = "Nieuwe registratie voor de nieuwsbrief";
$headers = "From: $email\n";
$message = "De volgende persoon heeft zich ingeschreven voor de nieuwsbrief:\n
E-mail Adres: $email";
$user = "$email";
$usersubject = "inschrijving nieuwsbrief";
$userheaders = "From: [email protected]\n";
$usermessage = "Dank voor je inschrijving op de nieuwsbrief. We houden je op de hoogte.";
mail($to,$subject,$message,$headers);
mail($user,$usersubject,$usermessage,$userheaders);
?>
$email = $_POST["email"];
$to = "[email protected]";
$subject = "Nieuwe registratie voor de nieuwsbrief";
$headers = "From: $email\n";
$message = "De volgende persoon heeft zich ingeschreven voor de nieuwsbrief:\n
E-mail Adres: $email";
$user = "$email";
$usersubject = "inschrijving nieuwsbrief";
$userheaders = "From: [email protected]\n";
$usermessage = "Dank voor je inschrijving op de nieuwsbrief. We houden je op de hoogte.";
mail($to,$subject,$message,$headers);
mail($user,$usersubject,$usermessage,$userheaders);
?>
Kan iemand mij vertellen wat ik verkeerd doe? MIjn dank is groot!
Gewijzigd op 09/10/2015 00:32:01 door Wiitigoo orgham
http://php.net/manual/en/function.mail.php
Verder raad ik aan om je mailadres uit je code te halen, om eventuele spam-harvesting te voorkomen.
Gewijzigd op 09/10/2015 00:17:24 door - Ariën -
(dank voor de tip mbt. de spam)
Komt de mail ook niet in je spam folder terecht toevallig?
[email protected]) de mail naar de subscriber komt netjes aan.
Nee. Het enige dat niet wil is de confirmation mail naar de admin ( dus naar Ik weet dat het voor veel mensen verwarrend is dus daarom hieronder nog even wat uitleg:
1) Wie verstuurt daadwerkelijk het emailtje? Het enigste juiste antwoord is: de webserver. Nou staat iedere webserver van een beetje waarde gekoppeld aan een domeinnaam. (bijv. mijndomein.nl) Je zou dus de From: moeten veranderen in [email protected] waarbij je mijndomein.nl dus vervangt voor jouw eigen domeinnaam. voor het @ mag je invullen wat je wilt maar vaak wordt daar noreply voor gebruikt --> [email protected].
2) De ontvanger (To:) is natuurlijk wie je maar wilt. Dit kan het mailadres van de admin zijn of van een gebruiker.
3) Aan wie kan de ontvanger op zijn beurt weer antwoorden? Sinds de webserver dus het eerste mailtje verstuurde en een webserver maar een machine is, is het handiger als de ontvanger zijn antwoord stuurt naar een ander adres. Dit kan met de Reply-To: (zie http://phpwiki.santhe.nl/index.php?title=De_juiste_mailheaders ) (Bedankt SanThe) bijv: Reply-To: [email protected]
[email protected]) de mail naar de subscriber komt netjes aan.
Dat was me duidelijk. Mijn vraag is of de mail aan jou niet in jouw spamfolder van Gmail terechtkomt. Heb je dat gecontroleerd?
@Frank
Volgens mij klopt de code wel. Zit alleen wat onduidelijk in elkaar.
De 1e mail-regel stuurt de bevestiging naar de TS. De 2e regel stuurt naar de ingeschreven persoon.
>> Nee. Het enige dat niet wil is de confirmation mail naar de admin ( dus naar Dat was me duidelijk. Mijn vraag is of de mail aan jou niet in jouw spamfolder van Gmail terechtkomt. Heb je dat gecontroleerd?
@Frank
Volgens mij klopt de code wel. Zit alleen wat onduidelijk in elkaar.
De 1e mail-regel stuurt de bevestiging naar de TS. De 2e regel stuurt naar de ingeschreven persoon.
[email protected]) een notificatiemail krijgt van hetzelfde domein? Dat is prima, na [email protected] zijn of [email protected]. Dat maakt me niet zoveel uit. Punt is dat ie niet aankomt. Jij geeft aan dat ie naar de subscriber gaat, maar ik heb er toch $to = "[email protected]"; staan?
De subscriber moet een mail krijgen op zijn ingevulde mailadres op het formulier en dit moet ook afkomstig zijn van [email protected]. Dit werkt al en gaat dus goed.
Sorry voor mijn noobness, maar ik baal dat ik die notification voor de admin niet aan de praat krijg en de tweede mail wel.
Ok, maar het is toch logisch dat de admin (in dit geval De subscriber moet een mail krijgen op zijn ingevulde mailadres op het formulier en dit moet ook afkomstig zijn van [email protected]. Dit werkt al en gaat dus goed.
Sorry voor mijn noobness, maar ik baal dat ik die notification voor de admin niet aan de praat krijg en de tweede mail wel.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$website_from = '[email protected]';
$website_naam = 'mijnwebsite';
$admin = '[email protected]';
$email = $_POST['email'];
$subject = "Nieuwe registratie voor de nieuwsbrief";
$message = "De volgende persoon heeft zich ingeschreven voor de nieuwsbrief:\n\nE-mail Adres: $email";
$headers = 'From: ' . $website_naam . ' <' . $website_from . '>' . "\r\n";
mail($admin, $subject, $message, $headers);
$subject = "inschrijving nieuwsbrief";
$message = "Dank voor je inschrijving op de nieuwsbrief. We houden je op de hoogte.";
$headers = 'From: ' . $website_naam . ' <' . $website_from . '>' . "\r\n";
$headers .= 'Reply-To: administrator <' . $admin . '>' . "\r\n";
mail($email,$subject,$message,$headers);
?>
$website_from = '[email protected]';
$website_naam = 'mijnwebsite';
$admin = '[email protected]';
$email = $_POST['email'];
$subject = "Nieuwe registratie voor de nieuwsbrief";
$message = "De volgende persoon heeft zich ingeschreven voor de nieuwsbrief:\n\nE-mail Adres: $email";
$headers = 'From: ' . $website_naam . ' <' . $website_from . '>' . "\r\n";
mail($admin, $subject, $message, $headers);
$subject = "inschrijving nieuwsbrief";
$message = "Dank voor je inschrijving op de nieuwsbrief. We houden je op de hoogte.";
$headers = 'From: ' . $website_naam . ' <' . $website_from . '>' . "\r\n";
$headers .= 'Reply-To: administrator <' . $admin . '>' . "\r\n";
mail($email,$subject,$message,$headers);
?>
Just try this :-)
Gewijzigd op 09/10/2015 00:59:41 door Frank Nietbelangrijk
Koning! Die werkt exact zoals ik wil! Super bedankt Frank Nietbelangrijk. Ik ga deze even rustig bekijken en morgen iemand blij maken!
Graag gedaan. Merk op dat ik regel 16 er later nog even gauw tussen heb gezet, (de reply-to).
Ja, helemaal netjes dit! Top man. Nogmaals bedankt.
Waar zit nou het wezenlijke verschil met de 1e versie (afgezien dat die wat onduidelijk in elkaar zit)? TS gaf aan dat de ene mail wel aankomt en de andere niet, terwijl ze code-technisch (zo op het 1e gezicht) precies hetzelfde in elkaar zitten.
" = ' geworden.
Gewijzigd op 09/10/2015 03:49:52 door johan de wit
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$website_from = '[email protected]';
$website_naam = 'mijnwebsite';
$admin = '[email protected]';
$email = $_POST['email'];
$subject = "inschrijving nieuwsbrief";
$message = "Dank voor je inschrijving op de nieuwsbrief. We houden je op de hoogte.";
$headers = 'From: ' . $website_naam . ' <' . $website_from . '>' . "\r\n";
$headers .= 'Reply-To: administrator <' . $admin . '>' . "\r\n";
if(@mail($email,$subject,$message,$headers))
{
$subject = "Nieuwe registratie voor de nieuwsbrief";
$message = "De volgende persoon heeft zich ingeschreven voor de nieuwsbrief:\n\nE-mail Adres: $email";
$headers = 'From: ' . $website_naam . ' <' . $website_from . '>' . "\r\n";
mail($admin, $subject, $message, $headers);
echo 'Bedankt voor je bericht';
}
else
{
echo 'E-mail verzenden is niet gelukt.';
}
?>
$website_from = '[email protected]';
$website_naam = 'mijnwebsite';
$admin = '[email protected]';
$email = $_POST['email'];
$subject = "inschrijving nieuwsbrief";
$message = "Dank voor je inschrijving op de nieuwsbrief. We houden je op de hoogte.";
$headers = 'From: ' . $website_naam . ' <' . $website_from . '>' . "\r\n";
$headers .= 'Reply-To: administrator <' . $admin . '>' . "\r\n";
if(@mail($email,$subject,$message,$headers))
{
$subject = "Nieuwe registratie voor de nieuwsbrief";
$message = "De volgende persoon heeft zich ingeschreven voor de nieuwsbrief:\n\nE-mail Adres: $email";
$headers = 'From: ' . $website_naam . ' <' . $website_from . '>' . "\r\n";
mail($admin, $subject, $message, $headers);
echo 'Bedankt voor je bericht';
}
else
{
echo 'E-mail verzenden is niet gelukt.';
}
?>
Wordt de notificatie e-mail naar de admin alleen verzonden als de inschrijving gelukt is.
Gewijzigd op 09/10/2015 08:55:18 door Joni Fleischer
Na een nachtje slapen en twee bakkies koffie denk ik dat voornamelijk de mailheaders niet juist waren? Maar zoals je zelf al schreef was de code niet logisch opgebouwd. En dat laatste geeft natuurlijk een prachtige kweekvijver voor raadselachtige fouten. En zoals al bleek is het herstructureren van de code dan tevens de oplossing ongeacht de achterliggende oorzaak.
Toevoeging op 09/10/2015 09:13:56:
@Joni: Waarom die @ voor de mail functie? Ik krijg echt vlekken in mijn nek als ik dat zie :/
Wil je niet weten WAT er fout gaat als er iets fout gaat?
Je hebt gelijk :) Ik heb dat nog geautomatiseerd in mijn systeem staan van vroeger haha :P
Hiermee kan je gemakkelijk berichten versturen zonder over de headers e.d na te denken.
Ook is het zeer gemakkelijk om meerdere berichten te versturen e.d