Απόκρυψη Headers se PHP mail + σωστό φορμάρισμα γραμμών

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
salsarocks
Δημοσιεύσεις: 7
Εγγραφή: 02 Ιούλ 2010 11:51

Απόκρυψη Headers se PHP mail + σωστό φορμάρισμα γραμμών

Δημοσίευση από salsarocks » 02 Ιούλ 2010 12:01

Καλησπέρα,

έχω φάει ώρες προσπαθώντας να βρω τι φταίει στη φόρμα επικοινωνίας μου.
Ο κωδικός είναι αυτός:

Κώδικας: Επιλογή όλων

<?php
$to = "customercare@ggg.com";
$from = $_REQUEST&#91;'name'&#93;; 
$headers = "From&#58; $from";
$headers .="MIME-Version&#58; 1.0\r\n"; 
$headers .="Content-type&#58; text/html; charset=iso-8859-7; \r\n"; 
$headers .="Content-Transfer-Encoding&#58; 8bit\r\n\r\n"; 
$subject = $_REQUEST&#91;'clinic'&#93; ;
$fields = array&#40;&#41;; 
$fields&#123;"name"&#125; = "Όνομα"; 
$fields&#123;"phone"&#125; = "τηλέφωνο"; 
$fields&#123;"clinic"&#125; = "Κλινική"; 
$fields&#123;"priority"&#125; = "Προτεραιότητα"; 
$fields&#123;"type"&#125; = "Είδος Προβλήματος"; 
$fields&#123;"message"&#125; = "Περιγραφή προβλήματος"; 
$body = "New Problem&#58;\n\n"; foreach&#40;$fields as $a => $b&#41;&#123; 	$body .= sprintf&#40;"%20s&#58; %s\n",$b,$_REQUEST&#91;$a&#93;&#41;; &#125; 
$send = mail&#40;$to, $subject, $body, $headers&#41;; 
if&#40;$send&#41; &#123;print "Ευχαριστούμε για την καταχώρησή σας. Θα επικοινωνήσουμε μαζί σας το συντομότερο δυνατό."; &#125; 
else &#123;print "Παρουσιάστηκε σφάλμα κατά την αποστολή. Παρακαλώ ξαναπροσπαθήστε"; &#125; 
?> 
Παρόλο που μου έρχεται το e-mail, δεν έχει το format που του έχω ζητήσει να έχει. Μου έρχεται ως εξής στο outlook:

Content-Transfer-Encoding: 8bit Message-Id: Date: Fri, 2 Jul 2010 10:47:19 +0300 (EEST) Return-Path: wwwrun@ggg.com X-OriginalArrivalTime: 02 Jul 2010 07:47:19.0965 (UTC) FILETIME=[CCBB9CD0:01CB19BA] New Problem: Όνομα: Γιώργος τηλέφωνο: 7877 Κλινική: Α Π Προτεραιότητα: Χαμηλή Είδος Προβλήματος: PC Περιγραφή προβλήματος: Δε δουλεύει

Δείχνει τα Headers χωρίς λόγο, και δεν κραταει το format του 'one element per line' αλλά τα βάζει όλα κολλητά σε μια γραμμή.

Πού είναι το πρόβλημα;;

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

Απόκρυψη Headers se PHP mail + σωστό φορμάρισμα γραμμών

Δημοσίευση από nbc » 02 Ιούλ 2010 13:11

- Δεν έχεις \r\n μετά το From: header
- Το $headers κάντο trim() ή μη βάζεις \r\n μετά τον τελευταίο.
- Χώρισε τα πεδία σου με \r\n και όχι με σκέτο \n

salsarocks
Δημοσιεύσεις: 7
Εγγραφή: 02 Ιούλ 2010 11:51

Απόκρυψη Headers se PHP mail + σωστό φορμάρισμα γραμμών

Δημοσίευση από salsarocks » 02 Ιούλ 2010 14:03

Thanks - αυτός είναι ο κώδικας βάσει των αλλαγών που είπες αλλα πάλι δίνει το ίδιο αποτέλεσμα:

Τι γίνεται;;;

Κώδικας: Επιλογή όλων

<?php 
$to = "customercare@ggg.com"; 
$from = $_REQUEST&#91;'name'&#93;; 
$headers = "From&#58; $from"; 
$headers .="MIME-Version&#58; 1.0\r\n"; 
$headers .="Content-type&#58; text/html; charset=iso-8859-7; \r\n"; 
$headers .="Content-Transfer-Encoding&#58; 8bit"; 
$subject = $_REQUEST&#91;'clinic'&#93; ; 
$fields = array&#40;&#41;; 
$fields&#123;"name"&#125; = "Όνομα"; 
$fields&#123;"phone"&#125; = "Τηλέφωνο"; 
$fields&#123;"clinic"&#125; = "Κλινική"; 
$fields&#123;"priority"&#125; = "Προτεραιότητα"; 
$fields&#123;"type"&#125; = "Είδος προβλήματος"; 
$fields&#123;"message"&#125; = "Περιγραφή προβλήματος"; 
$body = "New Problem&#58;\r\n"; foreach&#40;$fields as $a => $b&#41;&#123;    $body .= sprintf&#40;"%20s&#58; %s\r\n",$b,$_REQUEST&#91;$a&#93;&#41;; &#125; 
$send = mail&#40;$to, $subject, $body, $headers&#41;; 
if&#40;$send&#41; &#123;print "Ευχαριστούμε για την καταχώρησή σας. Θα επικοινωνήσουμε μαζί σας το συντομότερο δυνατό."; &#125; 
else &#123;print "Παρουσιάστηκε σφάλμα κατά την αποστολή. Παρακαλώ ξαναπροσπαθήστε"; &#125; 
?> 


nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

Απόκρυψη Headers se PHP mail + σωστό φορμάρισμα γραμμών

Δημοσίευση από nbc » 02 Ιούλ 2010 14:10

Δεν τα έκανες όλα...

Μου ξέχασες το πρώτο και καλύτερο. :D


Edit: μόλις είδα και το $from = $_REQUEST['name']; Στο from βάζουμε mailbox, όχι σκέτο όνομα.

salsarocks
Δημοσιεύσεις: 7
Εγγραφή: 02 Ιούλ 2010 11:51

Απόκρυψη Headers se PHP mail + σωστό φορμάρισμα γραμμών

Δημοσίευση από salsarocks » 02 Ιούλ 2010 15:05

το $from = $_REQUEST['name']; το εχω επιτηδες ετσι -- δε μ'ενδιαφερει το mailbox του αποστολεα... παίζει ρόλο;

οσον αφορα το αλλο, σε ποιο σημειο να το βάλω; γιατι αν χρησιμοποιησω εστω και λιγο λαθος τη θεση του \r\n χαλαει όλο το encoding..

Πως πρεπει να είναι κανονικά;

$headers = "From: $from" . "\r\n"; ?

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

Απόκρυψη Headers se PHP mail + σωστό φορμάρισμα γραμμών

Δημοσίευση από nbc » 02 Ιούλ 2010 15:16

Ok, ας το δούμε αναλυτικά...

Αυτός ο κώδικας

Κώδικας: Επιλογή όλων

$headers = "From&#58; $from";
$headers .="MIME-Version&#58; 1.0\r\n"; 
...έχει δύο σημαντικά λάθη:

Το "From: $from" ενώνεται με το "MIME-Version: 1.0", αφού δεν υπάρχει \r\n. Αυτό συνεπάγεται αφενός ο From header να είναι λανθασμένος, αφετέρου ο MIME header να μην υπάρχει.

Λανθασμένος From header είναι λόγος για απόρριψη του mail. Πως το βλέπεις εσύ στο outlook, πως το στέλνεις και πως το λαμβάνεις, δεν γνωρίζω. Έτσι κι αλλιώς το outlook δεν είναι υπόδειγμα mail agent.

Ανύπαρκτος MIME header συνεπάγεται αυτομάτως ότι το mail είναι plain US-ASCII, συνεπώς δεν υφίσταται encoding 8bit, μεταξύ άλλων.

Το σωστό είναι

Κώδικας: Επιλογή όλων

$headers = "From&#58; $from\r\n";
$headers .="MIME-Version&#58; 1.0\r\n"; 
...και απορώ δηλαδή πως σου ξέφυγε!

Από εκεί και πέρα, στο $from δεν βάζουμε ότι να΄ναι. Υπάρχουν 2 εναλλακτικές

$from = "mailbox@domain.tld", και
$from = "My Name <mailbox@domain.tld>"

Αν θα βάλεις

$from = "My Name", σκέτο, είναι λάθος. Μάλιστα, οι περισσότεροι servers θα στο απορρίψουν ακόμη και αν το mail υπάρχει αλλά είναι μούφα ή ανήκει σε διαφορετικό domain από το domain αποστολής. Αν ο SMTP server είναι "δικός σου" και επιτρέπει spam, μπορείς να βάλεις ότι θέλεις, αλλά χρειάζεται κάτι που να μοιάζει με mail. Είναι απαραίτητο να υπάρχει mailbox, πως να στο πω διαφορετικά?

salsarocks
Δημοσιεύσεις: 7
Εγγραφή: 02 Ιούλ 2010 11:51

Απόκρυψη Headers se PHP mail + σωστό φορμάρισμα γραμμών

Δημοσίευση από salsarocks » 02 Ιούλ 2010 16:15

Εις ματην... Κατι μου ξεφεύγει νομίζω...

Με αυτό τον κώδικα:

Κώδικας: Επιλογή όλων

<?php
$to = "to@domain.com";
$from = "from@domain.com" ;
$headers = "From&#58; $from\r\n";
$headers .= "Content-type&#58; text/html; charset=iso-8859-7\r\n";
$headers .= "MIME-Version&#58; 1.0\r\n"; 
$headers .= "Content-Transfer-Encoding&#58; 8bit";
$subject = $_REQUEST&#91;'clinic'&#93; ;
$fields = array&#40;&#41;; 
.....
το e-mail που παίρνω είναι αυτό:
Content-type: text/html; charset=iso-8859-7

MIME-Version: 1.0

Content-Transfer-Encoding: 8bit
Message-Id: <20100702120923.CC7765EB49@domain.com>
Date: Fri, 2 Jul 2010 15:09:23 +0300 (EEST)
Return-Path: wwwrun@domain.com
X-OriginalArrivalTime: 02 Jul 2010 12:09:24.0368 (UTC) FILETIME=[69351900:01CB19DF]

New Problem:

&frac14;&iacute;&iuml;&igrave;&aacute;: &ETH;&Yacute;&ocirc;&ntilde;&iuml;&ograve;

&Ocirc;&ccedil;&euml;&Yacute;&ouml;&ugrave;&iacute;&iuml;: 3444

&Ecirc;&euml;&eacute;&iacute;&eacute;&ecirc;&THORN;: &times;&aring;&eacute;&ntilde; &Aacute;

&ETH;&ntilde;&iuml;&ocirc;&aring;&ntilde;&aacute;&eacute;&uuml;&ocirc;&ccedil;&ocirc;&aacute;: &Igrave;&aring;&oacute;&aacute;&szlig;&aacute;

&Aring;&szlig;&auml;&iuml;&ograve; &ETH;&ntilde;&iuml;&acirc;&euml;&THORN;&igrave;&aacute;&ocirc;&iuml;&ograve;: &Aring;&ecirc;&ocirc;&otilde;&eth;&ugrave;&ocirc;&THORN;&ograve;

&ETH;&aring;&ntilde;&eacute;&atilde;&ntilde;&aacute;&ouml;&THORN; &eth;&ntilde;&iuml;&acirc;&euml;&THORN;&igrave;&aacute;&ocirc;&iuml;&ograve;: &aacute;&aacute;&aacute;



Συνεχίζουν δηλαδή να εμφανίζονται και τα headers και βγάζει και αλαμπουρνέζικα..

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

Απόκρυψη Headers se PHP mail + σωστό φορμάρισμα γραμμών

Δημοσίευση από nbc » 02 Ιούλ 2010 16:42

Η συμπεριφορά του Outlook μου ήταν από την αρχή περίεργη (αδικαιολόγητη)... Δηλαδή και πριν τις διορθώσεις που σου είπα.

Είναι προφανές πως δεν ξεχωρίζει τα headers από το body. Αν το εξάγεις σαν plain text, ή κάνεις view source, θα πρέπει να δεις τα headers (έναν σε κάθε γραμμή), μία κενή γραμμή, και μετά το body. Δηλαδή, δεν πρέπει να υπάρχει κενή γραμμή στην αρχή, ούτε ανάμεσα στα headers. Φυσικά, οι γραμμές πρέπει να τελειώνουν με CRLF (\r\n). Δεν μου έχεις πει από που το στέλνεις, αλλά αν ο smtp client που χρησιμοποιείς τα πειράζει, τότε υπάρχει πρόβλημα.

Τσεκάρισέ το, να σιγουρευτούμε.

Επίσης, κανονικά το charset θέλει διπλά εισαγωγικά, δηλαδή

$headers .="Content-type: text/html; charset=\"iso-8859-7\"\r\n";

(και χωρίς το trailing semicolon)

Δοκίμασε και αυτό. Επίσης, δοκίμασε να ανεβάσεις και τον MIME header μια θέση επάνω (μεταξύ From και Content-Type).

Τέλος, δοκίμασε και σε άλλον mail client, πχ google, thunderbird, hotmail, κλπ.

Κάνε αυτά και άμα σκεφτώ κάτι άλλο σου λέω... Μου κίνησες την περιέργεια!


Edit: Δεν πιστεύω το subject να έχει κανα return, ε? Κάντο trim να είμαστε σίγουροι.

salsarocks
Δημοσιεύσεις: 7
Εγγραφή: 02 Ιούλ 2010 11:51

Απόκρυψη Headers se PHP mail + σωστό φορμάρισμα γραμμών

Δημοσίευση από salsarocks » 02 Ιούλ 2010 17:58

thanks για το reply. λοιπόν παίζοντας λίγο -οπως βλέπεις έβγαλα κάτι \r\n από το τέλος έφτασα στο κάτωθι αποτέλεσμα:

what's next ομως;

Κώδικας: Επιλογή όλων

<?php 
$to = "ccare@domain.com"; 
$subject = $_REQUEST&#91;'clinic'&#93; ; 
$fields = array&#40;&#41;; 
$fields&#123;"name"&#125; = "Όνομα"; 
$fields&#123;"phone"&#125; = "Τηλέφωνο"; 
$fields&#123;"clinic"&#125; = "Κλινική"; 
$fields&#123;"priority"&#125; = "Προτεραιότητα"; 
$fields&#123;"type"&#125; = "Είδος Προβλήματος"; 
$fields&#123;"message"&#125; = "Περιγραφή προβλήματος"; 
$body  = "Νέο Πρόβλημα&#58;\n\n"; foreach&#40;$fields as $a => $b&#41;&#123;    
$body .= sprintf&#40;"%20s&#58; %s\r\n",$b,$_REQUEST&#91;$a&#93;&#41;; &#125; 
$headers ="From&#58; web@domain.com \r";
$headers .="MIME-Version&#58; 1.0\n"; 
$headers .="Content-type&#58; text/html; charset=iso-8859-7\n"; 
$headers .="Content-Transfer-Encoding&#58; 8bit";
$sent = mail&#40;$to, $subject, $body, $headers&#41;; 
if&#40;$sent&#41; &#123;print "Ευχαριστούμε για την καταχώρησή σας. Θα επικοινωνήσουμε μαζί σας το συντομότερο δυνατό."; &#125; 
else &#123;print "Παρουσιάστηκε σφάλμα κατά την αποστολή. Παρακαλώ ξαναπροσπαθήστε"; &#125; 
?>

Result:
Νέο Πρόβλημα: Όνομα: Πέτρος Τηλέφωνο: 3444 Κλινική: Χειρ Α Προτεραιότητα: Χαμηλή Είδος Προβλήματος: PC Περιγραφή προβλήματος: σφάλμα

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

Απόκρυψη Headers se PHP mail + σωστό φορμάρισμα γραμμών

Δημοσίευση από nbc » 02 Ιούλ 2010 18:38

Δεν γίνεται δουλειά έτσι... Άλλα σου λέω και άλλα κάνεις. Το πρωτόκολλο είναι συγκεκριμένο και απαιτεί αυτά που σου λέω. Άμα θες να αυτοσχεδιάσεις, πάω πάσο. Κάθε φορά μου εμφανίζεις και άλλο κώδικα.

Επί τη ευκαιρία, η ορθή σύνταξη είναι $fields["type"] και όχι $fields{"type"}.

/ignored

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Απόκρυψη Headers se PHP mail + σωστό φορμάρισμα γραμμών

Δημοσίευση από fafos » 02 Ιούλ 2010 19:16

nbc έγραψε:Δεν γίνεται δουλειά έτσι... Άλλα σου λέω και άλλα κάνεις. Το πρωτόκολλο είναι συγκεκριμένο και απαιτεί αυτά που σου λέω. Άμα θες να αυτοσχεδιάσεις, πάω πάσο. Κάθε φορά μου εμφανίζεις και άλλο κώδικα.
ase tis dikaiologies kai dose thn lysh sto palikari.. :lol:

salsarocks
Δημοσιεύσεις: 7
Εγγραφή: 02 Ιούλ 2010 11:51

Απόκρυψη Headers se PHP mail + σωστό φορμάρισμα γραμμών

Δημοσίευση από salsarocks » 02 Ιούλ 2010 19:27

μα... παίζω κι εγω προσπαθώντας να βρω μια ακρη :D

το άλλαξα το fields αλλά ουδεμία διαφορα....

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

Απόκρυψη Headers se PHP mail + σωστό φορμάρισμα γραμμών

Δημοσίευση από nbc » 02 Ιούλ 2010 19:50

Επειδή το ζήτησε ο φαφούλης... :D


Αυτή η απλή εντολή

Κώδικας: Επιλογή όλων

mail&#40;
    'nbc@freestuff.gr',
    '=?ISO-8859-7?B?'.base64_encode&#40;'Δοκιμή'&#41;.'?=',
    "Γεια σου κόσμε!\r\nΝα και μια 2η γραμμή...\r\nκαι 3η...",
    "From&#58; nbc@freestuff.gr\r\n".
    "MIME-Version&#58; 1.0\r\n".
    "Content-Type&#58; text/plain; charset=\"iso-8859-7\"\r\n".
    "Content-Transfer-Encoding&#58; 8bit"&#41;;
Οφείλει να σου παίζει σωστά. Αν δεν σου παίζει, υπάρχει πρόβλημα στο κύκλωμά αποστολής-λήψης. Αν σου παίζει, προσάρμοσέ το στις ανάγκες σου ή συνέχισε να αυτοσχεδιάζεις.


Edit:

Αν με το "ουδεμία διαφορά" εννοείς πως οι γραμμές γίνονται μία, είναι επειδή έχεις content-type text/html και ως γνωστόν στην html αλλάζουμε γραμμή με το <br> και όχι με το \r\n, εκτός και αν έχει προηγηθεί το <pre>.

salsarocks
Δημοσιεύσεις: 7
Εγγραφή: 02 Ιούλ 2010 11:51

Απόκρυψη Headers se PHP mail + σωστό φορμάρισμα γραμμών

Δημοσίευση από salsarocks » 03 Ιούλ 2010 07:56

Είσαι κορυφή. ούτε καν πήγε το μυαλό μου ότι το πρόβλημα ήταν το content-type. Το άλλαξα σε plain και επιτέλους ήρθε το επιθυμητό αποτέλεσμα.

Thanks για το χρόνο σου!

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης