25. marts 2008 - 12:47
Der er
17 kommentarer
Phpmailer: \r\n
Jeg har en kontaktform på min hjemmeside, som benytter phpmailer til at sende beskeden til min mail. Problemet er at \r og \n optræder i den sendte besked. Skal jeg fjerne følgende string i phpmailer-opsætningen: /** * SMTP reply line ending * @var string */ var $CRLF = "\r\n"; Eller har I en ide om, hvor den fejl ligger? Jeg bruger text/plain som contenttype.
Annonceindlæg fra QNAP
25. marts 2008 - 13:32
#1
JEg tror du skal vise lidt mere kode.
25. marts 2008 - 16:01
#2
Okay her er min kontakt kode, som kører op mod phpmaileren: <?php if(isset($_POST['txtMsg'])) { escape($_POST); $sendOk = 'Besked sendt'; $sendNotOk = 'Beskeden er <b>ikke</b> sendt'; if ($txtName=='' || $txtName==' ') $err_name='Skal udfyldes'; else $err_name=''; if ($txtAddress=='' || $txtAddress==' ') $err_add='Skal udfyldes'; else $err_add=''; if ($txtEmail=='' || $txtEmail==' ') $err_mail='Skal udfyldes'; else $err_mail=''; if ($err_name!='' || $err_add!='' || $err_mail!='') { $smarty->assign('txtName', stripslashes(htmlentities($txtName, ENT_QUOTES))); $smarty->assign('txtAddress', stripslashes(htmlentities($txtAddress, ENT_QUOTES))); $smarty->assign('txtEmail', stripslashes(htmlentities($txtEmail, ENT_QUOTES))); $smarty->assign('txtPhone', stripslashes(htmlentities($txtPhone, ENT_QUOTES))); $smarty->assign('txtOption', stripslashes(htmlentities($txtOption, ENT_QUOTES))); $smarty->assign('txtMsg', stripslashes(htmlentities($txtMsg, ENT_QUOTES))); $smarty->assign('bMsgSent', '0'); $smarty->assign('err_name', $err_name); $smarty->assign('err_add', $err_add); $smarty->assign('err_mail', $err_mail); $smarty->assign('sendMessage', $sendNotOk); } else { require("phpmailer/class.phpmailer.php"); $szSubject = "Contact"; $szMsg = $txtName . " (e-mail: " . $txtEmail . "; adresse: " .$txtAddress. "; telefon: " . $txtPhone . ") written on: " . date('d-m-Y, H:i'); $szMsg .= "\n\nOption: " . $txtOption; $szMsg .= "\n\n" . $txtMsg; $szMsg .= "\n\n--\nIP: " . $_SERVER['REMOTE_ADDR']; //mail(CONTACT_EMAIL, $szSubject, $szMsg, "From: <" . $txtEmail . ">"); $smarty->assign('bMsgSent', '1'); $smarty->assign('sendMessage', $sendOk); $mail = new PHPMailer(); $mail->IsSMTP(); $mail->Host = "smtp.unoeuro.com"; $mail->SetLanguage("dk"); $mail->From = $txtEmail ; $mail->FromName = $txtName; $mail->AddAddress(CONTACT_EMAIL, "Kontakt"); $mail->Subject = $szSubject; $mail->Body = $szMsg; $mail->Send(); } } ?>
25. marts 2008 - 16:42
#3
Se her: $szMsg .= "\n\nOption: " . $txtOption; $szMsg .= "\n\n" . $txtMsg; $szMsg .= "\n\n--\nIP: " . $_SERVER['REMOTE_ADDR']; Du har jo en masse \n imellem. Dem skal du jo evt. slette.
25. marts 2008 - 18:22
#4
Det skal vel egentlig snare erstattes med at du bruger variablen $CRLF i stedet.
25. marts 2008 - 22:31
#5
Nielle, hvad skal erstattes af $CRLF?
26. marts 2008 - 07:03
#6
\n måske.
26. marts 2008 - 07:05
#7
Ideen med at have $CRLF vriablen er at den svare til et linjeskift. Derfor bliver den overflødig at have hvis du selv begynder at indsætte linjeskift. Så i stedet for at du selv begynder at indsætte \n i diuin tekst så skull du hellere bruge $CRLF variablen til formålet: $szMsg = $txtName . " (e-mail: " . $txtEmail . "; adresse: " .$txtAddress. "; telefon: " . $txtPhone . ") written on: " . date('d-m-Y, H:i'); $szMsg .= "\n\nOption: " . $txtOption; $szMsg .= "\n\n" . $txtMsg; $szMsg .= "\n\n--\nIP: " . $_SERVER['REMOTE_ADDR']; rettes til: $szMsg = $txtName . " (e-mail: " . $txtEmail . "; adresse: " .$txtAddress. "; telefon: " . $txtPhone . ") written on: " . date('d-m-Y, H:i') . $CRLF . $CRLF; $szMsg .= "Option: " . $txtOption . $CRLF . $CRLF; $szMsg .= $txtMsg . $CRLF . $CRLF; $szMsg .= "--" . $CRLF . "IP: " . $_SERVER['REMOTE_ADDR'] . $CRLF . $CRLF; Pointen med at indføre brugen af $CRLF er at man nogen gange set at email-programmet kræver at du bruger \r\n og andre gange at du bruger \n. Ved at have det samlet et sted i een variabel så kan du nemmere tilpasse din kode hvis du flytter imellem servere.
26. marts 2008 - 08:13
#8
Nielle, jeg tror ikke du kan gøre som du gør. var $CRLF = "\r\n"; er fra SMTP klassen: class SMTP { /** * SMTP server port * @var int */ var $SMTP_PORT = 25; /** * SMTP reply line ending * @var string */ var $CRLF = "\r\n";
26. marts 2008 - 09:36
#9
Nå ja, men så skal det nok være sådan i stedet: $mail->CRLF
27. marts 2008 - 00:16
#10
Nu har jeg forsøgt at sætte $mail->CRLF ind til sidst i min kontaktformen, men det virker stadigt ikke. Hvor dælen skal det sættes ind?
27. marts 2008 - 06:34
#11
Kan du ikke smide hvordan dit output ser ud ? Evt. en source fra en email der er modtaget fra dette script ?
27. marts 2008 - 13:23
#12
Sådan ser sourcen ud, der modtages med Gmail: Ekspertens eksperter (e-mail: test@eks.dk; adresse: Testgade 5, 4300 Gunnarslev; telefon: 23232323) written on: 27-03-2008, 13:21 Option: ring Hej,\r\n\r\nDette er en test for Ekspertens eksperter. Ny linje tager vi nu!\r\n\r\nVenligst,\r\n\r\nSøren -- IP: 85.82.234.194
27. marts 2008 - 13:25
#13
28. marts 2008 - 16:33
#14
bump - ingen med lidt hjælp på dette underlige line break problem?
31. marts 2008 - 21:30
#15
Du skulle gerne kunne nøjes med at bruge dette: class.phpmailer.php
31. marts 2008 - 21:43
#16
<ole> Det er et ganske velkendt problem, hvor visse mailservere fejlfortolker \r\n - og i stedet bruger \r\r. Løsningen, om end den ikke er så køn, er kun at bruge \n /mvh </bole>
31. marts 2008 - 21:54
#17
Det gør brugeren desværre allerede ole.
Vi tilbyder markedets bedste kurser inden for webudvikling