PHP mailing

Status
Niet open voor verdere reacties.

Hobbit

Gebruiker
Lid geworden
15 okt 2002
Berichten
129
Hallo,

Ik weet dat deze vraag al vaker is voorgekomen maar ik heb een vraagje.
Ik wil het volgende script gebruiken welke al eerder is geplaatst door Tha Devil.

PHP:
<?php
if(isset($_POST['submit']) && !empty($_POST['adressen'])) {
    $adresArray = explode(",", $_POST['adressen']);
    $cc = '';
	$headers  = 'MIME-Version: 1.0' . "\r\n";
	$headers .= "Content-type: text/plain; charset=utf-8\r\n";
	$headers .= "From: Afzender <mail@adres.domein> \r\n";
	foreach($adresArray AS $adres) {     
	  $cc .= $adres .', '; }
	  
	$headers .= 'Bcc: '. $cc ."\r\n";   
	$headers .= 'X-Mailer: PHP ' . phpversion();
	if(mail('', $_POST['subject'], $_POST['message'], $headers)) {
	echo 'Verzonden!';
	} else {    
	echo 'Er is een fout opgetreden bij het verzenden van dit bericht!';  }
	} else {
?>

<form method="post">Alle adressen gescheiden door een komma ( , ):<br />
<input type="text" name="adressen" size="100" /><br />
Onderwerp: <input type="text" name="subject" /><br />
Bericht: <textarea name="message"></textarea><br /><br />
<input type="submit" name="submit" value="Verzenden" /></form>

<?php } ?>

Ik wil me iets meer verdiepen in mailen met PHP. Door dit mooie script als basis te gebruiken hoopte ik wat verder te komen. Echter krijg ik telkens de melding:

"Er is een fout opgetreden bij het verzenden van dit bericht! "

Ik kom er niet achter waar de fout zit. Kan het misschien zijn dat ik iets moet aanpassen in m'n php.ini??

Alvast erg bedankt!!
 
Het zou er misschien mee te maken kunnen hebben dat je aan het einde van je CC string nog een komma hebt staan.

Daarnaast snap ik ook het nut van dit niet:

PHP:
$adresArray = explode(",", $_POST['adressen']);
$cc = '';
foreach($adresArray AS $adres) {
$cc .= $adres .', '; }

Als je zo nodig de komma wilt vervangen door een komma en een spatie gebruik je toch str_replace? Of heb ik dat nu helemaal fout?

Ik neem aan trouwens dat je in je daadwerkelijke versie het 'aan'-adres wel hebt ingevuld?
 
wat is de echte error die terugkomt van de mail functie?
want vanuit die error kan soms al een heleboel meer informatie komen
 
Hallo,

@Erikbooy,
Ik ben nog niet zo heel ver met PHP. Ik heb wel al eens van een str_replace gehoord, maar ik weet niet precies hoe ik dit toepas. Waarschijnlijk vervangt het een aantal bestaande strings??:confused:

Welke komma bedoelde je precies bij de CC string? Deze:
PHP:
$cc .= $adres .', ';

@xmanneke,
Ik krijg geen foutmelding. Na het invullen van het formulier en het drukken op de verzendknop wordt alleen de 2de echo zichtbaar. "Er is een fout opgetreden bij het verzenden van dit bericht!"
 
Als je het script gebruikt dat je nu hebt, krijg je uiteindelijk een string (CC) die er zo uit ziet:

'email@adres.nl, adres@email.nl, info@domein.nl, '

zoals je ziet staat er aan het einde van de string nog een komma en spatie. De parser verwacht dan waarschijnlijk nog een emailadres.

Je kunt dus beter gewoon de string gebruiken die ingevoerd wordt, dan heb je:

'email@adres.nl,adres@email.nl,info@domein.nl'

Zoals je ziet zijn dat gewoon de emailadressen gescheiden door een komma. Mocht je om een of andere reden ipv komma (,) komma-spatie (, ) willen, dan gebruik je gewoon str_replace:

PHP:
$cc = str_replace(',', ', ', $_POST['adressen']);
 
Hoi Erikbooy,

Waarschijnlijk doe ik iets totaal verkeerd:confused: Ik krijg nog steeds de 2de echo in beeld.

Zou je wat comments toe willen voegen in het script wat er precies gebeurt in het script.
Ik heb nu dit:

PHP:
<?php
if(isset($_POST['submit']) && !empty($_POST['adressen'])) {
    $adresArray = explode(",", $_POST['adressen']);
    $cc = '';
	$headers  = 'MIME-Version: 1.0' . "\r\n";
	$headers .= "Content-type: text/plain; charset=utf-8\r\n";
	$headers .= "From: Afzender <mail@adres.domein> \r\n";
	foreach($adresArray AS $adres) {     
	$cc = str_replace(',', ', ', $_POST['adressen']); }
	  
	$headers .= 'Bcc: '. $cc ."\r\n";   
	$headers .= 'X-Mailer: PHP ' . phpversion();
	if(mail('', $_POST['subject'], $_POST['message'], $headers)) {
	echo 'Verzonden!';
	} else {    
	echo 'Er is een fout opgetreden bij het verzenden van dit bericht!';  }
	} else {
?>

Thanks
 
PHP:
<?php // aangeven dat je hieronder php gaat schrijven
  if(isset($_POST['submit']) && !empty($_POST['adressen'])) { // kijken of het formulier verzonden is en het adressen veld is ingevuld
    $adresArray = explode(",", $_POST['adressen']); // alle adressen die zijn ingevuld in een array zetten

    $cc = ''; // variabele cc initialiseren (lege string)

    $headers = 'MIME-Version: 1.0' . "\r\n"; // een mail-header toevoegen

    $headers .= "Content-type: text/plain; charset=utf-8\r\n"; // nog een mail-header toevoegen

    $headers .= "From: Afzender <mail@adres.domein> \r\n"; // afzenden invullen

    foreach($adresArray AS $adres) { // neem één voor één alle adressen uit de adresArray en noem het adres dan $adres

    $cc = str_replace(',', ', ', $_POST['adressen']); } // de inhoud van de variabele cc moet de inhoud van het adressen veld zijn, waarbij alle komma's zijn vervangen door een komma en een spatie


      $headers .= 'Bcc: '. $cc ."\r\n"; // geef de adressen in in de BCC header

      $headers .= 'X-Mailer: PHP ' . phpversion(); // een header om aan te geven waardoor de mail verstuurd wordt

      if(mail('', $_POST['subject'], $_POST['message'], $headers)) { // kijk of de mail verzonden kan worden

      echo 'Verzonden!'; // zo ja, output een message

      } else {

 echo 'Er is een fout opgetreden bij het verzenden van dit bericht!'; } // zo nee output een andere message
} else {
?>

Nu zitten er een aantal punten in dit script die niet goed zijn. Je zou het eens op de volgende manier kunnen proberen:

PHP:
<?php
  if ( $_SERVER['REQUEST_METHOD'] == 'POST' && trim( $_POST['adressen'] ) != '' ) {
    $headers = 'MIME-Version: 1.0' . "\r\n";
    $headers .= "Content-type: text/plain; charset=utf-8\r\n";
    $headers .= "From: Afzender <mail@adres.domein> \r\n"; // DIT MOET JE NOG INVULLEN!
    $headers .= 'Bcc: '. $_POST['adressen'] ."\r\n";
    $headers .= 'X-Mailer: PHP ' . phpversion(); 

    if ( mail ( "vulhierje@emailadres.in", $_POST['subject'], $_POST['message'], $headers ) ) { // HIER MOET JE JE EMAILADRES NOG INVULLEN!
      echo "Verzonden!";
    } else {
      echo "Er is een fout opgetreden bij het verzenden van dit bericht!";
    } 

  } else {
?>

<!-- Hier komt je formulier -->

<?php
  }
?>
 
Hoi Erikbooy,

Ik heb het helemaal overgenomen maar krijg nog steeds dezelfde melding. Overigens wel bedankt voor de uitleg. Hierdoor wordt het een stuk duidelijker voor mij.

Kan het zijn dat het niet aan het script ligt maar aan bijv. php.ini? of zou je dan zowieso een foutmelding moeten krijgen?
 
Ja, het kan heel goed aan php.ini liggen. Je mailsever moet onder andere goed ingesteld staan. Die staat standaard op localhost en als je op je localhost geen mailserver draait, werkt het niet.
 
Je formulier zelf heeft geen "action"
<form method="post" action="<?php $PHP_SELF ?>">

Groetjes,

Jeroen.
 
Ook wel een goed punt. Alleen zou je ipv

PHP:
$PHP_SELF

dit:

PHP:
$_SERVER['PHP_SELF']

Beter is echter om dit niet te gebruiken (ik geloof dat Tha Devil daar eens een artikeltje over had) maar gewoon een lege action te gebruiken. Dan wordt automatisch de huidige pagina gebruikt.
 
Thx.
Weer iets bijgeleerd.:)
Daarvoor zijn we hier.
Ik zal dat artikel eens zoeken en lezen.
 
Ook wel een goed punt. Alleen zou je ipv

PHP:
$PHP_SELF

dit:

PHP:
$_SERVER['PHP_SELF']

Beter is echter om dit niet te gebruiken (ik geloof dat Tha Devil daar eens een artikeltje over had) maar gewoon een lege action te gebruiken. Dan wordt automatisch de huidige pagina gebruikt.

Het doet sowieso niks zonder echo.
 
Hallo iedereen,

Het ligt volgensmij inderdaad aan de php.ini. Deze staat op localhost. We werken met een exchange server hier, dus ik ga eerst even met de ict'er de juiste instellingen nalopen.

Ik kom er nog op terug. Bedankt alvast voor de reacties.:thumb:

Groet,
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan