mail verzenden met php

Status
Niet open voor verdere reacties.

fsasfsas

Gebruiker
Lid geworden
11 sep 2006
Berichten
429
Dag

De vraag is vast eerder gesteld maar ik krijg heel veel of geen enkel zoekresultaat als ik zoek dus stel ik de vraag maar.
Ik heb een contactformulier op mijn website maar het geheel is naar een andere provider overgezet en nu blijkt dat ik met de mail functie van php niet meer naar adressen buiten mag mailen.
Ik had een simpel scriptje gebruik makend van de mail functie van php dus de mail($to, $subject... ). Daarmee stuurde ik het bericht dat iemand op de site achter liet naar mezelf en ook naar de invuller. Dat mag dus niet meer want de ontvanger of de afzender moeten van het domein zijn waar de site op draait.
naar mezelf dat is af te vangen. Een kwestie van de mail die naar het domein gestuurd wordt forwarden. Maar hoe kan ik met php de afzender meegeven?
het moet niet al te moeilijk zijn maar het lukt me niet.
het domein heet joliez.nl
dit mag dus niet:
Code:
mail("iemand@voorbeeld.nl","onderwerp",$msg);

dit mag wel:
Code:
mail("info@joliez.nl","onderwerp",$msg);

Stel nu even de inzender van commentaar heeft als mailadres klant@voorbeeld.nl.
Hoe kan ik met de restricties van de provider toch een (kopie van) de mail naar het mailadres klant@voorbeeld.nl sturen?

alvast met dank, Anjo
 
Laatst bewerkt:
Bovenop wat de 2 helpers hier boven schreven: In de link staat o.a. dat, indien de body html bevat, content-type in de header moet worden aangegeven.
Wij kunnen hier niet zien welke body je stuurt.
Kijk in de laatste posting in de link voor een uitgewerkt voorbeeld, pas die aan aan geldige mailadressen en test of die code werkt.

Verder kunnen we niet nagaan of de juiste smtp server voor die nieuwe hoster is ingesteld.
Ook een tekst-only mail laten sturen via de zogenaamde telnet test vanaf de webhostcomputer naar poort 25 van de smtp server kan duidelijk maken of het versturen in het algemeen wel werkt vanaf de smtp server.

Eigenlijk schrijf ik hier dat je meer initiatief had moeten nemen met de gegeven tip/link én dat een terugmelding van "werkt niet" op een computerforum veel te weinig informatie verschaft om, als helpers, op voort te kunnen borduren.

Tijs.
 
is je mail je domein mail ? het kan zijn dat je vanuit je eigen server je server niet kan bereiken dit omdat een regel in de dns forwarder niet is gezet (NAT)

nu bekijk eerst eens
<form class="form-horizontal" role="form" method="post" action="contact.php">
aanpassen naar (louter test)
<form class="form-horizontal" role="form" method="post" action="./contact.php">
kan je ook eens hartcoded
PHP:
if(isset($POST)){
    mail ("klant@voorbeeld.nl", "testhead", "testbody", "From: contact@joliez.nl");//als dit niet werkt de functie kan afstaan 
}
stel dat de functie om mails af staat dan is de mogelijkheid je hebt een betalende hosting en je kan het vragen aan te zetten of je hebt een gratis hosting en dan is de mogelijkheid dat het aan gezet wordt vrij klein .

let even op met je script volgend moet je maar aanvullen bekijken mogelijks werkt het nog niet omdat het uit een groter geheel komt
PHP:
   if(iscrime($_POST)){
// stop script met die of iets anders
}
   function iscrime($asoarr){
       $return = false;
      // $arrA = $this->getinjectionsA();
       $arrB = getinjectionsB();
      // $arrC = $this->getinjectionsC();
      // $arrD = $this->getinjectionsD();
       foreach($asoarr as $rangetocheck){
          foreach($rangetocheck as $key => $value){
              
              if ($value === true || $value === false) continue;
              if($this->checkCrime($value,'=',$arrB)){
                  $return = true;
              }
          }
       } 
       return $return  ;
    }
    private function checkCrime($val, $char,$colection){
        if(strpos($val,$char)){//snel veel controles wegsmijten omdat deze niet ter zake doen
            foreach($colection as $rull){
                if(preg_match($rull,$val)){return true;                 }
            }
        }
        return false;
    }
    function getinjectionsB(){
        return['/and 1\=1/i','/ and \'x\'\=\'x/i','/\'\\=\\\'/'];
    }
    function getinjectionsC(){
        return['/http\:/i'];
    }
 
Laatst bewerkt:
Was wil je precies uitleggen met je laatste code-blok Kenikavanbis? Het praktisch nut ontgaan mij behoorlijk.
 
Bovenop wat de 2 helpers hier boven schreven: In de link staat o.a. dat, indien de body html bevat, content-type in de header moet worden aangegeven.
Wij kunnen hier niet zien welke body je stuurt.
Kijk in de laatste posting in de link voor een uitgewerkt voorbeeld, pas die aan aan geldige mailadressen en test of die code werkt.
Dit had ik gedaan maar helaas, dat werkt niet. de body bevat louter tekst. Ik heb deze ook al diverse malen vervangen door een simpel 'bla'

Verder kunnen we niet nagaan of de juiste smtp server voor die nieuwe hoster is ingesteld.
Ook een tekst-only mail laten sturen via de zogenaamde telnet test vanaf de webhostcomputer naar poort 25 van de smtp server kan duidelijk maken of het versturen in het algemeen wel werkt vanaf de smtp server.
dit stukje begrijp ik niet

Eigenlijk schrijf ik hier dat je meer initiatief had moeten nemen met de gegeven tip/link én dat een terugmelding van "werkt niet" op een computerforum veel te weinig informatie verschaft om, als helpers, op voort te kunnen borduren.
Ik heb de gegeven tip/link wel degelijk geraadpleegd en uitgevoerd. Ik begrijp nu dat "werkt niet" te weinig informatie bevat maar ik zie niet waar ik te weinig initiatief neem. Ik ben uren aan het zoeken en proberen geweest en kwam er niet uit. Uiteindelijk heb ik op dit forum om hulp gevraagd en ben blij met antwoorden. Het is niet zo dat ik niks geprobeerd heb. Ik ben een leek op dit gebied.
 
Dag kenikavanbis

Ik begrijp eerlijk gezegd het merendeel van je antwoord niet.

Het is een betaalde host. De host heeft aangegeven dat ik mails kan verzenden zolang de ontvanger of afzender vanuit het domein komen. Dat ben ik dus, tot nu toe vruchteloos, aan het proberen.

Met vriendelijke groeten, anjo
 
Voor de goede orde nog even hieronder de code die ik (onder andere) geprobeerd heb

Code:
// Geef GELDIGE adressen op
// Een korte benaming voor jouw website
$website_naam = 'joliez';
// Jouw eigen geldige emailadres
$eigen_emailadres = 'voorbeeld@joliez.nl';
// Een geldig emailadres voor errors
$error_emailadres = 'voorbeeld@joliez.nl';
// De naam van de verzender
$naam_verzender = 'naamverzender';
// Het geldige emailadres van de afzender
$email_verzender = 'klant@voorbeeld.nl';
// Een geldig emailadres of helemaal leeg laten
$bcc_emailadres = '';
// HTML mail? True/False
$html = false;

// De headers samenstellen
$headers	 = 'From: ' . $website_naam . ' <' . $eigen_emailadres . '>' . "\r\n";
$headers	.= 'Reply-To: ' . $naam_verzender . ' <' . $email_verzender . '>' . "\r\n";
$headers	.= 'Return-Path: Mail-Error <' . $error_emailadres . '>' . "\r\n";
$headers	.= ($bcc_emailadres != '') ? 'Bcc: ' . $bcc_emailadres . "\r\n" : '';
$headers	.= 'X-Mailer: PHP/' . phpversion() . "\r\n";
$headers	.= 'X-Priority: Normal' . "\r\n";
$headers	.= ($html) ? 'MIME-Version: 1.0' . "\r\n" : '';
$headers	.= ($html) ? 'Content-type: text/html; charset=iso-8859-1' . "\r\n" : '';

mail ('voorbeeld@joliez.nl', 'bla', 'bloe', $headers);
mail ('klant@voorbeeld.nl', 'bladie', 'bloe', $headers);

de eerste regel met mail werkt wel maar dus alleen naar voorbeeld@joliez.nl
De tweede regel werkt helemaal niet.
er gaat dus met beide regels geen mail naar klant@voorbeeld.nl
 
Klant@voorbeeld.nl (in $email_verzender) kan nooit de afzender zijn, net als bill.gates@microsoft.com.

Gebruik dus je eigen mailadres met je eigen domeinnaam. Deze wordt ook gebruikt als 'Reply-To' header.

Niet verwonderlijk dus dat de tweede regel niet werkt.
 
Laatst bewerkt:
Klant@voorbeeld.nl (in $email_verzender) kan nooit de afzender zijn, net als bill.gates@microsoft.com.

Gebruik dus je eigen mailadres met je eigen domeinnaam. Deze wordt ook gebruikt als 'Reply-To' header.

Niet verwonderlijk dus dat de tweede regel niet werkt.

Sorry, dan heb ik het verkeerd begrepen. Ik had begrepen dat de afzender degene was die het formulier invulde maar het gaat om de afzender van de mail. En dat is dus het script? Waar moet dan het mailadres van de klant staan opdat deze een mail krijgt?
 
Eerste parameter van je mail()-functie.
 
Ik heb nu

Code:
// Geef GELDIGE adressen op
// Een korte benaming voor jouw website
$website_naam = 'joliez';
// Jouw eigen geldige emailadres
$eigen_emailadres = 'voorbeeld@joliez.nl';
// Een geldig emailadres voor errors
$error_emailadres = 'voorbeeld@joliez.nl';
// De naam van de verzender
$naam_verzender = 'joliez';
// Het geldige emailadres van de afzender
$email_verzender = 'voorbeeld@joliez.nl';
// Een geldig emailadres of helemaal leeg laten
$bcc_emailadres = '';
// HTML mail? True/False
$html = false;

// De headers samenstellen
$headers	 = 'From: ' . $website_naam . ' <' . $eigen_emailadres . '>' . "\r\n";
$headers	.= 'Reply-To: ' . $naam_verzender . ' <' . $email_verzender . '>' . "\r\n";
$headers	.= 'Return-Path: Mail-Error <' . $error_emailadres . '>' . "\r\n";
$headers	.= ($bcc_emailadres != '') ? 'Bcc: ' . $bcc_emailadres . "\r\n" : '';
$headers	.= 'X-Mailer: PHP/' . phpversion() . "\r\n";
$headers	.= 'X-Priority: Normal' . "\r\n";
$headers	.= ($html) ? 'MIME-Version: 1.0' . "\r\n" : '';
$headers	.= ($html) ? 'Content-type: text/html; charset=iso-8859-1' . "\r\n" : '';


mail ('klant@voorbeeld.nl', 'bladie', 'bloe', $headers);

maar ook nu komt er geen mail op klant@voorbeeld.nl
Heb ik nog iets ergens verkeerd begrepen?

dank voor de hulp tot dusverre!
 
Je mailt wel vanaf je eigen domeinnaam uit je mailadres? En hoe staat het met je SPF/DKIM records in je DNS? Het kan zijn dat de mailserver op (het gefingeerde) voorbeeld.com daar naar kijkt.
 
Laatst bewerkt:
Je mailt wel vanaf je eigen domeinnaam uit je mailadres? En hoe staat het met je SPF/DKIM records in je DNS?

Sorry voor de onbenulligheid maar dat begrijp ik niet goed.

misschien kun je me helpen om er even zeker van te zijn dat ik de dingen wel begrijp:

Code:
// Geef GELDIGE adressen op
// Een korte benaming voor jouw website
$website_naam = 'Mijn Site';

'Mijn Site' is dus de naam van mijn site: dus hier moet 'joliez' staan?

Code:
// Jouw eigen geldige emailadres
$eigen_emailadres = 'mijn_emailadres@mijn_domein.nl';
moet dit het adres zijn van mijn mail die aan het domein gekoppeld is of het emailadres dat ik dagelijks gebruik? Voor het effect maakt het voor mij niks uit want ik heb de mail die binnenkomt op het domein geforward naar mijn frequenter gebruikte mailadres. Ofwel moet dit 'voorbeeld@joliez.nl' zijn of 'mijnnaam@xs4all.nl'?


Code:
// Een geldig emailadres voor errors
$error_emailadres = 'mijn_emailadres@mijn_domein.nl';
ik neem aan dat ik errors gewoon naar de mail van het domein kan laten streun? dus dit mag 'voorbeeld@joliez.nl' zijn?

Code:
// De naam van de verzender
$naam_verzender = 'Afzender';
'Afzender' is dan 'anjo' (mijn naam?)

Code:
// Het geldige emailadres van de afzender
$email_verzender = 'emailadres_van_verzender@zijn_domein.nl';
'emailadres_van_verzender@zijn_domein.nl' moet dan toch ook 'voorbeeld@joliez.nl' zijn?

Code:
// Een geldig emailadres of helemaal leeg laten
$bcc_emailadres = 'geldig_emailadres@geldig_domein.nl';
deze heb ik niet nodig dus mag '' zijn?

Code:
// HTML mail? True/False
$html = true;

het is geen HTML dus dit mag false zijn?

Code:
mail ('klant@voorbeeld.nl', 'bladie', 'bloe', $headers);
Maar dit werkt dan dus niet. Waar ga ik de mist in?
 
Waarschijnlijk weigert de mailserver bij het gefingeerde voorbeeld.nl je mail omdat je geen SPF/DKIM records hebt, of je server staat vanwege spamming op een blacklist (shared hosting + spam klantje)

Vraag beide eens aan je hosting.
 
Waarschijnlijk weigert de mailserver bij het gefingeerde voorbeeld.nl je mail omdat je geen SPF/DKIM records hebt, of je server staat vanwege spamming op een blacklist (shared hosting + spam klantje)

Vraag beide eens aan je hosting.

Ga ik doen. Volgens een eerdere mail van de host zou het mogelijk zijn maar het is me tot nu toe niet gelukt.
Dank je voor je hulp.

groetjes, Anjo
 
Waarschijnlijk weigert de mailserver bij het gefingeerde voorbeeld.nl je mail omdat je geen SPF/DKIM records hebt, of je server staat vanwege spamming op een blacklist (shared hosting + spam klantje)

Vraag beide eens aan je hosting.

reactie van de host:

Dan zit er een foutje in het script, wij leveren verder geen support op PHP scripting.
Maar in principe moet het werken
.

Ik zit nu vast. Ik weet echt niet meer hoe ik het werkend kan krijgen.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan