Avatar billede Asky Forsker
07. september 2012 - 11:27 Der er 3 kommentarer og
1 løsning

mail fra formularer i PHP

Jeg har annekteret denne udmærkede kode, men er blevet i tvivl om placeringen af Bcc. Ska Bcc stå i function mail_utf-8? Eller efter if(isset($_POST['email'])) ?
Det er meget vigtigt for mig at få Bcc med.
Jeg synes ikke, det virker hver gang. Kan nogen hjælpe?

function escapeAddr($addr) {
    $check = preg_match('/(.*)<(.*)>/', $addr, $a);
    if ($check) $addr = '=?UTF-8?B?'.base64_encode($a[1]).'?= <'.$a[2].'>';
    return $addr;
}
function mail_utf8($to, $emne='Intet emne', $besked='', $from='', $cc='', $bcc='', $type='html') {
    $from = escapeAddr($from);
    $header = 'From: '.$from.PHP_EOL
          . 'Return-Path: '.$from.PHP_EOL
            . 'Reply-To: '.$from.PHP_EOL
            . 'MIME-Version: 1.0'.PHP_EOL
            . 'Content-type: text/'.$type.'; charset=UTF-8'.PHP_EOL
            . 'X-Mailer: PHP/'.phpversion().PHP_EOL
            . 'Content-Transfer-Encoding: 8bit'.PHP_EOL;
    if ($cc!='') $header .= 'Cc: '.escapeAddr($cc).PHP_EOL;
    if ($bcc!='') $header .= 'Bcc: '.escapeAddr($bcc).PHP_EOL;
    $header .= PHP_EOL;
    return mail($to, '=?UTF-8?B?'.base64_encode($emne).'?=', $besked, $header);
}

if(isset($_POST['email'])) { 
$emne = ($_POST['subject']);
$besked ="<html>
<head>
    <meta http-equiv=''Content-type: text/html; charset=utf-8'/>
<style type='text/css'>
#body{
h1 {font-family : Verdana, Tahoma, sans-serif; font-size: 16px ;  text-align : left; color:#000000;}
h2 {font-family : Verdana, Tahoma, sans-serif; font-size 14px; text-align : left;}
h3 {font-family : Verdana, Tahoma, sans-serif; font-size: 12px/1,5 ;X text-align : left; color : #000000;}
h4  {font-family : Verdana, Tahoma, sans-serif; font-size: 10px/1,5 ;  text-align : left; }
p {font-family : Verdana, Tahoma, sans-serif; font-size: 12px/1,3 ;  text-align : left; color :#000000;}
}
</style>
</head>
<body>
<h1>Hej $navn, <br/>her er din $emne</h1>"."<h3>".$v1. " ".$v2." ".$v3." ".$v4." ".$v5." ".$v6." ".$v7."<br/> ".$v8." ".$v9." ".$v10." ".$v11. " ".$v12. " ".$v13." ".$v14."<br/>".$v15." ".$v16." ".$v17." ".$v18." ".$v19." ".$v20." ".$v21."<br/> ".$v22." ".$v23." ".$v24." ".$v25." ".$v26."\n\r<br/> Firma: ".$firma." Kundenr: ".$kundenr."<br/> ".$navn." Mail: ".$email."\r\n Adresse: ".$adresse. "\r\n Postnummer: " .$postnummer. " By: " .$by."\r\n Tlf.: " .$telefon."<br/> CVR: ".$cvr. " EAN: ".$ean."\n\r Ordrenummer: ".$ordrenr."\n\r<br/> Bemærkninger:  " .$_POST['bem']
."<br/><br/>Venlig hilsen<br/></h3><h1>firma</h1></body></html>";

$from = 'Firma / www.firma.dk/ <firma@domaene.dk>';         

    $sent = @mail_utf8($_POST['email'], $emne, $besked, $from);
    if (!$sent) {
        die('Indtast en gyldig e-mailadresse');
  }
}
Avatar billede olsensweb.dk Ekspert
09. september 2012 - 18:03 #1
>men er blevet i tvivl om placeringen af Bcc. Ska Bcc stå i function mail_utf-8? Eller efter if(isset($_POST['email'])) ?
den skal stå i if(isset($_POST['email']))
functionen tester selv om bcc skal medsendes, hvis bcc er blank ("") meddendes bcc info ikke.

du kan læse denne linje i functionen mail_utf8 :
if ($bcc!='') $header .= 'Bcc: '.escapeAddr($bcc).PHP_EOL;
som:
hvis bcc er forskællig fra "" (tom), tilføj Bcc: værdi til header

så du skal IKKE pille ved functionerne overhoved.

dette
$sent = @mail_utf8($_POST['email'], $emne, $besked, $from);
if (!$sent) {
    die('Indtast en gyldig e-mailadresse');
}


rettes til (utested)
$bcc=(isset($_POST['bcc'])? $_POST['bcc'] : "");
$sent = @mail_utf8($_POST['email'], $emne, $besked, $from, "",$bcc);
if (!$sent) {
    die('Indtast en gyldig e-mailadresse');
}
Avatar billede Asky Forsker
09. september 2012 - 22:52 #2
Jeg har haft en vis succes med at sætte Bcc i function mail_utf-8
"hvis bcc er forskællig fra "" (tom), tilføj Bcc: værdi til header"" sådan har jeg også læst den

altså $bcc='firma@domaene.dk' i stedet for $bcc=''-som så ikke er tom.
En vis succes vil sige, at det virker på alle 11 formularer placeret på Webhosting.dk.
Jeg har også prøvet at lade $bcc være tom og i stedet skrive
$bcc='firma@domaene.dk' efter $from= under if(isset($_POST['email'])) Det har ikke fungeret.
Nu forestår at teste på TDCwebmore, hvor alle problemerne opstod og supporten er direkte elendig.
Det når jeg nok først omkring onsdag, da andre opgaver presser på.

Angående din anden rettelse (utestet)
Ser den fornuftig ud, så den tester jeg snarest.
jeg har beholdt:
if (!$sent) {
    die('Indtast en gyldig e-mailadresse');
}
Selvom jeg har en funktion tidligere i koden, der tester, om der skrives en korrekt emailadresse.(den er almen kendt)
Avatar billede Asky Forsker
13. september 2012 - 20:42 #3
"Nu forestår at teste på TDCwebmore, hvor alle problemerne opstod og supporten er direkte elendig.
Det når jeg nok først omkring onsdag, da andre opgaver presser på."
Testen virkede ikke! Kunden fik mail, men ingen bcc hos TDCweb.
Nu er gode dyr rådne!
Jeg har også testet Ronois forslag uden held.
Kan jeg hæve dusøren (pointene)?
Avatar billede Asky Forsker
15. september 2012 - 11:36 #4
Jeg slutter denne tråd her med tak for gode indput til forbedring af min PHP-formular.
Jeg har nu isoleret problemet til følgende:
Har man mail og formular på samme server, bliver mail til en af mailadresserne på serveren ikke sendt.
Hos visse udbydere (som fx Webhosting), er det kun brugere af PHP 4.3, der har formular og mail på samme server. Jeg opgraderer på mit eget site til PHP 5.2, hvorved mail og formularer bliver adskilt. Spørgsmålet om PHP-versioner lægger jeg ud i et nyt spørgsmål til eksperterne, for det ved jeg ikke meget om.
Dette kunne supporten på TDCwebmore have oplyst mig om for 14 dage siden, men de er åbenbart ikke til for kundernes skyld :-(
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester