Avatar billede ssohl Nybegynder
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.
Avatar billede jakobdo Ekspert
25. marts 2008 - 13:32 #1
JEg tror du skal vise lidt mere kode.
Avatar billede ssohl Nybegynder
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();

           
        }
    }
?>
Avatar billede jakobdo Ekspert
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.
Avatar billede nielle Nybegynder
25. marts 2008 - 18:22 #4
Det skal vel egentlig snare erstattes med at du bruger variablen $CRLF i stedet.
Avatar billede ssohl Nybegynder
25. marts 2008 - 22:31 #5
Nielle, hvad skal erstattes af $CRLF?
Avatar billede jakobdo Ekspert
26. marts 2008 - 07:03 #6
\n måske.
Avatar billede nielle Nybegynder
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.
Avatar billede jakobdo Ekspert
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";
Avatar billede nielle Nybegynder
26. marts 2008 - 09:36 #9
Nå ja, men så skal det nok være sådan i stedet:

$mail->CRLF
Avatar billede ssohl Nybegynder
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?
Avatar billede jakobdo Ekspert
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 ?
Avatar billede ssohl Nybegynder
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
Avatar billede ssohl Nybegynder
27. marts 2008 - 13:25 #13
Avatar billede ssohl Nybegynder
28. marts 2008 - 16:33 #14
bump - ingen med lidt hjælp på dette underlige line break problem?
Avatar billede jakobdo Ekspert
31. marts 2008 - 21:30 #15
Du skulle gerne kunne nøjes med at bruge dette: class.phpmailer.php
Avatar billede olebole Juniormester
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>
Avatar billede jakobdo Ekspert
31. marts 2008 - 21:54 #17
Det gør brugeren desværre allerede ole.
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



IT-JOB

Hiper A/S

IT-systemudvikler

Danske Commodities A/S

Procurement manager

Politiets Efterretningstjeneste

DevOps Softwareudviklere