WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Rätt radbrytning i PHP mail() headers \r\n eller bara \n ?? (https://www.wn.se/forum/showthread.php?t=1042593)

Jim_Westergren 2010-06-18 17:15

Rätt radbrytning i PHP mail() headers \r\n eller bara \n ??
 
Blir inte klok på detta. Överrallt (php.net osv) står det att man ska använda sig av \r\n och jag använder följande headers:

PHP-kod:

$signup_email_headers "From: \"Ett namn\" <namn@domän.se>\r\n";
$signup_email_headers .= "Reply-To: \"Ett namn\" <namn@domän.se>\r\n";
$signup_email_headers .= "Content-Type: text/plain; charset=utf-8"

Men då studsar vissa mails efter ett jäkla Googlande hittade jag denna sida av en annan som har precis samma problem som jag http://www.eksperten.dk/spm/754761

Jag testade att ändra \r\n till \n och då kom mitt mail fram. Så vad ska man använda??

Någon som har erfarenhet av detta?

Här ett utdrag av headers och felmeddelande (vilket klagar på fel sak):

Citat:

This is the mail system at host mail.n.nu.

I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.

For further assistance, please send mail to postmaster.

If you do so, please include this problem report. You can
delete your own text from the attached returned message.

The mail system

<[email protected]>: host deframx02.softcom.dk[80.237.211.116] said: 552
Unable to process message: msg.1276870204.703308.20259 - error: Illegal
MIME chars found in header: <From: "N.nu Support" <[email protected]>__> (in
reply to end of DATA command)

--56E64140CF02.1276870204/mail.n.nu
Content-Description: Delivery report
Content-Type: message/delivery-status

Reporting-MTA: dns; mail.n.nu
X-Postfix-Queue-ID: 56E64140CF02
X-Postfix-Sender: rfc822; [email protected]
Arrival-Date: Fri, 18 Jun 2010 16:10:04 +0200 (CEST)

Final-Recipient: rfc822; [email protected]
Action: failed
Status: 5.0.0
Remote-MTA: dns; deframx02.softcom.dk
Diagnostic-Code: smtp; 552 Unable to process message:
msg.1276870204.703308.20259 - error: Illegal MIME chars found in header:
<From: "N.nu Support" <[email protected]>__>

--56E64140CF02.1276870204/mail.n.nu
Content-Description: Undelivered Message
Content-Type: message/rfc822

Received: by mail.n.nu (Postfix, from userid 33)
id 56E64140CF02; Fri, 18 Jun 2010 16:10:04 +0200 (CEST)
To: [email protected]
Subject: Din sida www.ensajt.n.nu
From: "N.nu Support" <[email protected]>
Reply-To: "N.nu Support" <[email protected]>
Content-Type: text/plain; charset=utf-8
Message-Id: <[email protected]>
Date: Fri, 18 Jun 2010 16:10:04 +0200 (CEST)

Hej!

Erik Stenman 2010-06-18 17:45

Använder du linux?
Jag använder:
Citat:

$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Additional headers
//$headers .= 'To: '.$name.' <'.$to.'>' . "\r\n";
$headers .= 'From: '.$from.' <'.$frommail.'>' . "\r\n";

anders.n 2010-06-18 17:57

http://php.net/manual/en/function.mail.php

Citat:

Note: If messages are not received, try using a LF (\n) only. Some poor quality Unix mail transfer agents replace LF by CRLF automatically (which leads to doubling CR if CRLF is used). This should be a last resort, as it does not comply with » RFC 2822.

Jim_Westergren 2010-06-18 18:23

Erik, ja Linux med Debian. Jag skickar med postfix. Ja du använder ungefär samma som jag.

Anders, där citerade du helt rätt. Såg inte det innan. Men jag kommer inte att ha möjlighet att gå igenom de mails som studsar för att skicka om de med endast \n. Ska jag fortsätta köra med \r\n ? Be folk som inte får mail att byta till gmail?

Finns det någon procentsiffra av hur många som har detta problemet?

abergman 2010-06-18 19:00

Citat:

Ursprungligen postat av Jim_Westergren (Inlägg 20359970)
Erik, ja Linux med Debian. Jag skickar med postfix. Ja du använder ungefär samma som jag.

Anders, där citerade du helt rätt. Såg inte det innan. Men jag kommer inte att ha möjlighet att gå igenom de mails som studsar för att skicka om de med endast \n. Ska jag fortsätta köra med \r\n ? Be folk som inte får mail att byta till gmail?

Finns det någon procentsiffra av hur många som har detta problemet?

Jag skulle starkt råda dig att ALLTID följa Standard, då kan du alltid skylla på mottagaren ifall det inte funkar.

Det är alltid i mottagarens intresse att kunna ta emot alla mail, det du kan göra är ju att maila postmastern och säga att de kanske behöver uppdatera sin mjukvara då den inte följer webbstandard.

Om alla följde de standarder som finns, så skulle webben varit jävligt mycket enklare att jobba med.

EDIT Glöm vad jag sa om att maila postmastern, mailet som studsar mailtvättas av Softscan i danmark, en av världens ledande mailtvättsleverantörer. Lycka till att få igenom en ändring där:p

abergman 2010-06-18 19:05

Citat:

Ursprungligen postat av abergman (Inlägg 20359971)
Jag skulle starkt råda dig att ALLTID följa Standard, då kan du alltid skylla på mottagaren ifall det inte funkar.

Det är alltid i mottagarens intresse att kunna ta emot alla mail, det du kan göra är ju att maila postmastern och säga att de kanske behöver uppdatera sin mjukvara då den inte följer webbstandard.

Om alla följde de standarder som finns, så skulle webben varit jävligt mycket enklare att jobba med.

EDIT Glöm vad jag sa om att maila postmastern, mailet som studsar mailtvättas av Softscan i danmark, en av världens ledande mailtvättsleverantörer. Lycka till att få igenom en ändring där:p


Pågarna på WP har som vanligt koll, prova med PHPmailer istället.

http://core.trac.wordpress.org/ticket/2603





EDIT

Det här var ett spännande problem.. Hur ser din php.ini ut på din maskin? Leta efter raden sendmail_path

Som jag fattar det så beror det på översättningen mellan php och sendmail/postfix.. På *nix ska det vara \n och på Windows \r\n som "line ending", då man inte egentligen inte vill ha en radbrytning på en header, utan bara ett avslut på raden så att säga.


EDIT 2:

http://bryanmills.net/archives/2007/...-php-and-spam/

Förklarar problemet med Postfix och att maila från PHP samt en lösning.

abergman 2010-06-18 20:15

Jag testade själv med att maila från en maskin till en annan, båda två kör postfix och jag har inga spamskydd på dem.

Dock så fungerade både \r\n och \n bra, den tolkade headern rätt både gångerna. Testade även med ett Gmail konto och jag fick samma resultat där.

Så jag kan inte återskapa ditt fel:(

studiox 2010-06-18 20:18

1. Ta ett djupt andetag
2. Ladda ner phpmailer
3. Klart

Jonas 2010-06-18 20:44

PHPMailer löser biffen åt dig.


Annars använd konstanten PHP_EOL så får du rätt radbrytning.
Vid en Windows installation så är PHP_EOL == "\r\n" och i *nix så är den "\n"

jonny 2010-06-19 08:33

I normalfallet ska faktiskt "\n" även omfatta "\r".
Jag uppfattar för övrigt texten om "Some poor quality Unix mail transfer agents replace LF by CRLF automatically (which leads to doubling CR if CRLF is used)." som att det är ett problem med AVSÄNDANDE MTA och inte mottagande.

Jake.Nu 2010-06-19 08:57

Felet du får är

"Illegal MIME chars found in header:
<From: "N.nu Support" <[email protected]>__>"

Koden du postade i ditt första inlägg saknar två st. avslutande CRLF innan ditt innehåll.
Vad "__>" menas med är svårt för mig att avgöra (jag använder inte Postfix) men kanske är det just där som felet ligger (i den koden som du faktiskt använder i scriptet) eller så visar dom bara en del av headern där felet ligger..

Testa detta och se om det gör skillnad..
PHP-kod:

<?php
$header 
"From: \"Namn\" <[email protected]>\r\n";
$header.= "Reply-To: <[email protected]>\r\n";
$header.= "Content-Type: text/plain; charset=utf-8\r\n";
$header.= "\r\n";
$header.= "Detta är ett meddelande i textformat";

mail("[email protected]""Subject"""$header);
?>

Standarden säger att alla _headers_ i ett meddelande skall avslutas med CRLF (alltså \r\n) så det skall du alltid använda.

SimonP 2010-06-19 09:17

Använd bara \n , då får du flest "fungerade" mail. Även om man egentligen borde följa RFC:n så gör inte PHP själva det. Syns i källkoden till PHP (mail.c):
Kod:

                fprintf(sendmail, "To: %s\n", to);
                fprintf(sendmail, "Subject: %s\n", subject);
                if (headers != NULL) {
                        fprintf(sendmail, "%s\n", headers);
                }
                fprintf(sendmail, "\n%s\n", message);

De lägger på \n och inte \r\n.
För det mesta är PHP-manualen bra men i just detta fall är den lite missvisande.

OBS! Jag pratar om PHP som körs på Linux servrar.

abergman 2010-06-19 13:03

Citat:

Ursprungligen postat av jonny (Inlägg 20360031)
I normalfallet ska faktiskt "\n" även omfatta "\r".
Jag uppfattar för övrigt texten om "Some poor quality Unix mail transfer agents replace LF by CRLF automatically (which leads to doubling CR if CRLF is used)." som att det är ett problem med AVSÄNDANDE MTA och inte mottagande.

Jag har uppfattat det likadant, jag vill dock hävda att postfix inte borde gå under kategorin "poor quality", så man kan ju tycka att det inte borde vara ett problem.

Men som man sagt några inlägg tidigare, phpmailer löser det:)

jonny 2010-06-19 22:03

Det intressanta är väl att "\n" ska tolkas som "new line" vilket bör översättas till CR (Carriage Return) och LF (Line Feed) automatiskt.

qson 2010-06-19 22:11

Citat:

Ursprungligen postat av jonny (Inlägg 20360092)
Det intressanta är väl att "\n" ska tolkas som "new line" vilket bör översättas till CR (Carriage Return) och LF (Line Feed) automatiskt.

\n ska väl tolkas som ASCII 10 (vilket motsvarar LF/Line Feed).
\r tolkas som ASCII 13 (CR/Carriage Return)

När jag har använt PHP:s inbyggda mailfunktion så har jag kört med \r\n och det har funkat prima. Har iofs. testat båda varianter och det har funkat.

Jag kan rekommendera PHPMailer, som skall sköta detta med headers automatiskt, och förhoppningsvis inte med PHP:s inkonsekventa användning.

Jim_Westergren 2010-06-21 12:02

Hej!

Jäkla bra forum. Skriver en svår fråga en fredag eftermiddag och man är tillbaka på jobb på måndag med en massa bra svar och input, suveränt.

Jag har kollat lite närmare nu. Har totalt fått 3 sådana är studsade mails sedan jag började kolla upp vilka mails som studsar och alla dessa 3 kommer från softcom.dk.

Tittade lite på PHPMailet och det är verkligen intressant, speciellt eftersom jag nu snart vill använda HTML i mina nyhetsbrev. Håller just på att sätta min i det. Den funkar väl med postfix som jag använder nu?

studiox 2010-06-21 12:07

Citat:

Ursprungligen postat av Jim_Westergren (Inlägg 20360247)
Hej!

Jäkla bra forum. Skriver en svår fråga en fredag eftermiddag och man är tillbaka på jobb på måndag med en massa bra svar och input, suveränt.

Jag har kollat lite närmare nu. Har totalt fått 3 sådana är studsade mails sedan jag började kolla upp vilka mails som studsar och alla dessa 3 kommer från softcom.dk.

Tittade lite på PHPMailet och det är verkligen intressant, speciellt eftersom jag nu snart vill använda HTML i mina nyhetsbrev. Håller just på att sätta min i det. Den funkar väl med postfix som jag använder nu?

PHPMailer fungerar med både en lokal MTA och en extern SMTP server (även på Linux, vilket Mail() inte klarar av, en av anledningarna jag gillar det)

Postfix är ju även "sendmail kompatibel"

Jim_Westergren 2010-06-21 13:14

Laddade ner deras Lite version (behöver inte SMTP) och gjorde en liten test till mig själv, det funkade direkt. Tack!

Jim_Westergren 2010-06-22 11:23

Tänkte återkomma här med uppdatering för de som är intresserade.

- Implementeringen av PHPMailer Lite var mycket enklare än jag trodde. Gjorde även en enkel HTML-mall som jag nu använder i mailen - ser mycket snyggare ut och funkar väldigt bra.

- Fick lite fler negativa poäng av spam assasin pga HTML men det var så lite så inget att oroa sig för.

- Jag skickade välkomstmailet med verifieringskod till mina 3 användare som har mail via softcom.dk och nu studsar de inte längre vilket är jättebra.

- Gissa vilken radbrytning PHPMailer använder som default? Endast \n och inte \r\n ...

- Känns tryggt att använda en klass som tusentals andra använder.

Tack för knuffen från er som fick mig att gå över till PHPMailer.


Alla tider är GMT +2. Klockan är nu 23:54.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson