Kom ihåg mig?

PHP mail - felaktig avsändare

 
Ämnesverktyg Visningsalternativ
Oläst 2006-10-16, 01:43 #11
Seattlegrunges avatar
Seattlegrunge Seattlegrunge är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Nov 2003
Inlägg: 979
Seattlegrunge Seattlegrunge är inte uppkopplad
Mycket flitig postare
Seattlegrunges avatar
 
Reg.datum: Nov 2003
Inlägg: 979
Kollar jag headers/källkod för meddelandet som tas emot finns följande felmeddelande. Vet i katten hur jag ska ta mig runt detta:

Thunderbird:
X-Amavis-Alert: BAD HEADER Non-encoded 8-bit data (char C3 hex) in message header 'Subject': Subject: ***EPOST FR\303\205N HEMSIDAN***\n

Outlook Express:
X-Amavis-Alert: BAD HEADER Non-encoded 8-bit data (char C5 hex) in message header 'Subject': Subject: ***EPOST FR\305N HEMSIDAN***\n

Varför den bara klagar på Subject förstår jag inte. På From fungerar ju inte å, ä och ö heller.
Seattlegrunge är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-10-16, 02:18 #12
Seattlegrunges avatar
Seattlegrunge Seattlegrunge är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Nov 2003
Inlägg: 979
Seattlegrunge Seattlegrunge är inte uppkopplad
Mycket flitig postare
Seattlegrunges avatar
 
Reg.datum: Nov 2003
Inlägg: 979
Jag har äntligen löst det!
Nu fungerar även svenska tecken i From och Subject genom att dra berörda strängar genom följande funktion:

Kod:
function encode_iso88591($string) {
 	$text = '=?iso-8859-1?q?';
 	for( $i = 0; $i < strlen($string); $i++ ) {
  $val = ord($string[$i]);
  if($val > 127) {
  	$val = dechex($val);
  	$text .= '='.$val;
  }
  else {
  	$text .= $string[$i]; 
  }
 	}
 	$text .= '?=';
 	return $text;
 }
Tack alla som hjälpt mig under kvällen... nu har jag väl en glad kund imorgon får jag hoppas
Seattlegrunge är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-10-16, 14:16 #13
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
Lite grundläggande info om mime-encoding (mime är inte bara att sätta en header till mime ):
Mejlstandarden är urgammal och egentligen får man inte skicka något annat är "amerikanska" ascii-tecken, dvs endast 7-bitars (iso-8859 har 8 bitar, unicode 16 bitar). Det går alltså inte att skicka svenska tecken. Eftersom detta snabbt blev otillräckligt så utvecklades mime-standarden som gör det möjligt att skicka "vanlig" (svensk) text och allehanda filer genom att omvandla dessa till 7-bitars text innan de skickas. För headers i mejlet innebär detta att text som innehåller "oamerikanska" tecken inkapslas i
Kod:
From: =?utf-8?Q?=c3=85sa=20H=c3=b6gland=c3?= <[email protected]>
och att alla 8-bitarstecken samt kontrolltecken (retur, tab) och vissa andra tecken (komma, likamedtecken, mellanslag och liknande) ersätts med ett likamedtecken plus bytens värde i hex. Denna form av encoding kallas printed-quotable eftersom man kan printa den och åtminstone läsa alla amerikanska tecken. T ex å blir =a5.
Hela strängen byggs alltså upp genom
[header]: =?[använd_encoding]?Q?[text_med_åäö_ovandlade_till_=XX]?=
I synnerhet är det headers: Subject:, From: och To: som behöver detta.

Hur fixar man då detta i php? Jo man glömmer alltihop ovan och använder bara funktionen iconv_mime_encode() eller
mb_encode_mimeheader("TExtsträng", "utf-8", "Q") alltså exempelvis:
Kod:
$subject = "Subject: ".mb_encode_mimeheader("Om våra produkter", "utf-8", "Q")."\r\n";
och
Kod:
$from = "From: ".mb_encode_mimeheader("Åsa", "utf-8", "Q")."<".$email.">\r\n";
Om du har en slappt webhotell som inte har mb(multibyte)-support så får du använda typ:
Kod:
preg_replace('/[^\x21-\x3C\x3E-\x7E\x09\x20]/e','sprintf( "=%02x", ord("$0"));',$mimetext);
För mime-meddelandet gäller:
1. Ingen rad får längre än 80 (ascii)tecken
2. Varje rad måste avslutas med "\r\n"
3. Ingen tecken får förekomma som är "större än" 7 bitar
Du behöver dessa headers:
Kod:
MIME-Version: 1.0;
Content-Type: text/plain; charset=utf-8;
Content-Transfer-Encoding: quoted-printable;
Det är förstås viktigt att ange korrekt charset, i det här fallet utf-8.
Content-Type ochContent-Transfer-Encoding varierar givetvis beroende på vad skicka, t ex bilagor, bilder, html, och hur du encodar det, base64 är lämpligt för bilagor, se http://de2.php.net/manual/en/function.base...se64-encode.php
Tyvärr finns ingen smart funktion såvitt jag vet för att mime-encoda meddelandet som quoted-printable så jag använder:
Kod:
function encodeQuotedPrintable($textblock) {
	$textblock = preg_replace(
 '/[^\x21-\x3C\x3E-\x7E\x09\x20]/e',
 'sprintf( "=%02x", ord ( "$0" ) );',
 $textblock
	);
	return preg_replace ( '/(.{73}[^=]{0,3})/', '$1'."=\r\n", $textblock);
}
som jag kör på meddelandet.

Om man inte mime-kodar sina mejl riktigt så finns det ingen garanti att dom ser bra ut när dom kommer fram...

Men egentligen kan man använda mb_send_mail() som sköter allt detta självt...

Så, det här får ni i hemläxa tills imorgon! :P

PS. Reply-to: används för att ange en annan svars adress än den som anges i From: t ex
Kod:
From: kampanjer@företag.se
Reply-to: kundtjänst@företag.se
Så att det står att mejlet kommer från kampanjadv. på företaget men om man klickar på svara/reply så skickas mejlet till kundtjänst. (Det finns ju förstås bättre användningsområden för detta, t ex om man vill skicka mejl som alltid kommer från support@företag.se men man vill att svarsmejl alltid kommer tillbaks till personen som sist behandlade ärendet med reply-to: bengtVidSupporten@företag.se och inte alfonsVidSupporten@företag.se. Man ser ju då alltid i mejlprogrammets from att mejlet kom från den välkända supporten och inte från någon okänd bengt... )
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-10-16, 14:28 #14
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
Citat:
Originally posted by Seattlegrunge@Oct 15 2006, 23:34
Det blir rätt va?
Som svar till Seattlegrunge:
Jag skulle alltså använda:
Kod:
mail("[email protected]", mb_encode_mimeheader($subject,"iso-8859-1","Q"), encodeQuotedPrintable($body),
 *"From: " . mb_encode_mimeheader($name,"iso-8859-1","Q") ."<".$email.">\r\n" .
 *"MIME-Version: 1.0\r\n" .
 *"Content-type: text/plain; charset=iso-8859-1\r\n" .
 *"Content-Transfer-Encoding: quoted-printable;\r\n"
med funktionen encodeQuotedPrintable() ovan.

De flesta mejlservrar bråkar inte med å ä ö etc i meddelandedelen men för att vara säker bör man hålla sig till mime-standarden så man inte får några bokstäver ersatta med X (och framförallt vara noga med att ange rätt charset).
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-10-16, 16:06 #15
Seattlegrunges avatar
Seattlegrunge Seattlegrunge är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Nov 2003
Inlägg: 979
Seattlegrunge Seattlegrunge är inte uppkopplad
Mycket flitig postare
Seattlegrunges avatar
 
Reg.datum: Nov 2003
Inlägg: 979
Ojojojojojoj.... vilken klippa du är!
Har fick man maaaassa grym information rakt upp och ner, en massa information som jag kom över inatt efter några timmars googlande och pusslade från en massa sajter... dock så fick jag inte fram riktigt allt det du nämnde här på några rader! All heder åt dig Martine!

Men du... jag ska nu testa göra som du visar ovan istället för min lilla kodsnutt jag satte ihop inatt... men en fråga kvarstår då:

UTF-8 vs ISO-8859-1... vilket bör man välja? Finns det webbläsare som är ofta förekommande hos t ex svenska företag som inte klarar UTF-8? Egentligen är det väl bara Outlook (med eller utan Express) som används av dessa, i stort sett, men den har inga som helst problem med UTF-8 i dess olika versioner?
Seattlegrunge är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-10-16, 16:54 #16
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
Citat:
Originally posted by Seattlegrunge@Oct 16 2006, 16:06
UTF-8 vs ISO-8859-1... vilket bör man välja? Finns det webbläsare som är ofta förekommande hos t ex svenska företag som inte klarar UTF-8? Egentligen är det väl bara Outlook (med eller utan Express) som används av dessa, i stort sett, men den har inga som helst problem med UTF-8 i dess olika versioner?
Jag kör med utf-8 eftersom det då även funkar om någon skulle skriva typ något jugoslaviskt namn eller andra ovanliga tecken. Det är ju också den nya standarden, iso:na försvinner alltmer. Nackdelen är som du anat att det kan vara problem med att använda utf-8 i vissa gamla mailklienter, men eftersom Outlook, Mozillas och Maccens Mail alla klarar utf-8 utan problem så tycker jag inte att det är något större problem. Om däremot huvuddelen av dina mottagare är sunkiga hotmail.com kan man ju överväga att använda iso-8859-1, men jag tycker egentligen att det är hotmails problem att de inte kan visa email korrekt (det finns även en lång rad andra saker som inte fungerar på hotmail).

Om du vill ha reda på exakt hur det är så läs RFC 1521 (om du har tid och tålamod) där hur man formaterar mime-email (även med flera delar, bilagor etc) beskrivs in i minsta detalj:
http://www.faqs.org/rfcs/rfc1521.html
(För dig mest "Appendix 2", "5.1. Quoted-Printable Content-Transfer-Encoding", "1. Introduction" och egentligen hela kapitel 3, 4 och inledningen på kap. 5)
Det finns också ett antal sidor som tar upp RFC:erna på föreklat och även på svenska, googla..

Rättelse: Jag tror jag i punkt 2 i mitt inlägg ovan ska vara "=\r\n" för ett s k soft-break som tas bort när mejlet kommer fram.
Jag tror också att det är så att man måste ange en giltig email som avsändare i From-headern, inte bara ett namn.
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-10-24, 22:19 #17
Seattlegrunges avatar
Seattlegrunge Seattlegrunge är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Nov 2003
Inlägg: 979
Seattlegrunge Seattlegrunge är inte uppkopplad
Mycket flitig postare
Seattlegrunges avatar
 
Reg.datum: Nov 2003
Inlägg: 979
Tack för dina svar Martine!
Dessa har hjälpt mig oerhört och jag har helt kommit underfund med hur mail fungerar nu (tror jag iaf hehe). Dina sista tips fungerade klockrent!

Du är en klippa! Iaf vad gäller mailuppbyggnad
Seattlegrunge är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-10-25, 00:55 #18
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
Citat:
Originally posted by Seattlegrunge@Oct 24 2006, 22:19
Tack för dina svar Martine!
Dessa har hjälpt mig oerhört och jag har helt kommit underfund med hur mail fungerar nu (tror jag iaf hehe). Dina sista tips fungerade klockrent!

Du är en klippa! Iaf vad gäller mailuppbyggnad
Jag brukar inte svara på tackinlägg... men med så mycket smicker kan man ju inte låta bli... B)

Kul att du fått ordning på det, jag har ju också kämpat med mejl ett bra tag innan jag fick ordning på det... Men har man inte ordning på det får man ständigt klagomål på det ena eller andra. Dessutom finns ju alltid risken för mejlinjektioner om man inte sköter det ordentligt (så länge man mime-encodar är det svårt att göra mail-injektioner eftersom injektionen bara enkodas och skickas med som ett meddelande...). Det är ju bra mycket krångligare än man tror när man just lyckats skicka iväg sitt första mejl med (det egentligen ganska enkla och kassa) mail()...
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-02-10, 20:58 #19
Larzza Larzza är inte uppkopplad
Hej, jag är ny här.
 
Reg.datum: Nov 2005
Inlägg: 1
Larzza Larzza är inte uppkopplad
Hej, jag är ny här.
 
Reg.datum: Nov 2005
Inlägg: 1
Får jag fortsätta på denna tråd.
Jag har ett konstigt problem. Det är panik

När Subject består av ett å eller ä eller ö så skickas formuläret iväg mailet.
Men står det ä ö eller liknande Strängnäs ( 2 ä i subject alltså) så funkar det inte.
Funkar inte heller om man skriver " Fläsk med sås" inte alls med 2 exotiska tecken i subjekt.
Det hjälper inte med att ta bort "stripslashes"

Det är från ett phpscript som heter "phpreview", och nu får jag inte tag på han som gjort scriptet.
Kod:
//THE LINE BELOW MUST NOT CONTAIN ANY CARRIAGE RETURNS IT MUST ALL BE ON ONE LINE
mail("$UserEmail", stripslashes("$mailSubject"), stripslashes($UserMessage), "From: $SiteEmail\r\n" . "Reply-To: $UserMail\r\n" . "X-Mailer: PHP/" . phpversion() . "\r\. "MIME-version: 1.0\r\n" . "Content-Type: text/html");
Larzza är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 
Ämnesverktyg
Visningsalternativ

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 22:06.

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