2012-04-03 17 views
8

करने के लिए एक अंतरिक्ष मैं एक बहुत ही सरल PHP स्क्रिप्ट, जैसे कुछ है:पीएचपी मेल समारोह बेतरतीब ढंग से कहते हैं संदेश पाठ

while ($condition){ 
    echo "<a href="thanks.php?id=".$id."> THANKS </a>"; 
} 

बेशक, मैं थोड़ा अधिक कोड है, लेकिन यह कोई फर्क नहीं पड़ता। एक बार जब मैंने कोड का यह टुकड़ा बनाया था, तो स्क्रिप्ट उपयोगकर्ता को एक ईमेल भेजती है।

tha nks.php?id..... 

यह कोड के बीच में एक जगह कहते हैं:

इनबॉक्स

लिंक हर एक पंक्ति में ठीक कर रहे हैं, पिछले एक को छोड़कर लिंक इस तरह से पता चलता है।

यह केवल हॉटमेल के साथ होता है। जीमेल, याहू, और बाकी सब ठीक काम करते हैं।

+3

लग रहा है। अगर यह केवल एक ही स्थिति है तो मुझे संदेह है कि यह कुछ ऐसा है जो आप कर रहे हैं। - संपादित करें: इसके अलावा, एफवाईआईडब्ल्यू, आपका वाक्यविन्यास उपरोक्त कोड (उद्धरण-मिलान) पर बंद है लेकिन लिंक को अन्य स्थितियों में से 9 0% में काम करता है, मैं _assuming_ हूं जब आप इसे पोस्ट करने के लिए गए थे। अन्यथा, मुझे यकीन है कि तुम दोनों से बचने के 'बनाने के लिए लग रही होगी" 'लंगर के भीतर, और सुनिश्चित करें कि आप एक बंद' दिया है "' '$ id') –

+0

हाँ वह यह है कि मैं क्या सोचा था, टाइपो के बारे में के बाद, मैंने इसे उदाहरण के रूप में लिखा है, यह वास्तविक कोड नहीं है। दूसरी ओर .. अगर यह एक हॉटमेल मुद्दा है तो यह सभी लिंक के लिए समान "सुरक्षा" क्यों नहीं बनाता है! यह सिर्फ आखिरी के साथ खुश है! हॉटमेल मुझे पागल करने के लिए गोलियां लेना चाहता है! – Andy

+0

एक विषय पर एक और अच्छी चर्चा: http://www.jeremytunnell.com/posts/really-hairy-problem-with-seemingly-random-crlf-and-spaces-inserted-in-emails – toto21

उत्तर

0

मैंने लाइनों को बहुत लंबा होने पर sendmail डालने के पात्रों को देखा है। यह मामला यहां नहीं है (जैसा कि अन्य ग्राहक इसे ठीक से संभालने में हैं), लेकिन मुझे आश्चर्य है कि हॉटमेल की लाइन लंबाई सीमा है जो आप मार रहे हैं।

यह कोई फर्क पड़ता है अगर आप

while ($condition){ 

    echo "<a href=\"thanks.php?id=".$id."\"> THANKS </a>\n"; 

} 
+0

नहीं, पर कोई फर्क नहीं सब, के अलावा, वे लिंक thanks.php को .. पहले 9 थंबनेल एकदम सही (यहां तक ​​कि हॉटमेल में) समस्या पिछले एक है कर रहे हैं के साथ सिर्फ 10 थंबनेल .. कर रहे हैं और यूआरएल में से हर एक के लिए वास्तव में लम्बाई समान होती है उन्हें। । = ( – Andy

11

अपने echo में एक नई पंक्ति डालें, यानी मैं जानता हूँ कि यह देर हो चुकी है लेकिन वहाँ एक वैकल्पिक समाधान है कि मेरे लिए काम किया है:

इस लाइन के लिए उपयोग सांकेतिक शब्दों में बदलना अपना संपूर्ण संदेश का उपयोग कर बेस 64:

:

$message = chunk_split(base64_encode($message)); 

फिर, इस अपने हैडर संलग्न

$headers .= "Content-Transfer-Encoding: base64\r\n\r\n"; 

यह मेल क्लाइंट को बताएगा कि आपका संदेश base64 एन्कोडेड है।

+1

यह मेरे लिए बहुत काम किया –

+1

आप @karancan धन्यवाद, आपका जवाब महान :) एचटीएमएल ईमेल में linkes में rundom रिक्त स्थान के साथ एक मुद्दा था - वे जा चुके हैं। अच्छा काम!! –

+0

मेरे लिए काम किया, धन्यवाद आदमी। चीयर्स। – user3636476

10

करकानन का समाधान शायद काम करता है, लेकिन मूल कारण है जो होबो कह रहा था। mail फ़ंक्शन प्रत्येक 900 वर्णों (मुझे लगता है) में लाइन-ब्रेक डालें। तो यदि आप $message .= "more text"; के समूह के साथ अपना $ संदेश बना रहे हैं तो यह 900 बार वर्णों से अधिक होने के बाद आपको यह त्रुटि मिल जाएगी। हालांकि यह भ्रमित है क्योंकि रिक्त स्थान अस्थायी प्रतीत होते हैं, खासकर यदि आप एक HTML संदेश बना रहे हैं क्योंकि कभी-कभी लाइनब्रेक्स पूरी तरह से सौम्य स्थानों में दिखाई देंगे।

सरल समाधान लाइनों के अंत में \r\n\ जोड़ना है।

दिलचस्प है, इन रूपों काम:

$message .= "<tr><td>1</td><td>2</td>\r\n"; 
$message .= '<tr><td>1</td><td>2</td>'."\r\n"; 

लेकिन यह नहीं करता है:

$message .= '<tr><td>1</td><td>2</td>\r\n'; 

\r\n दोहरे उद्धरण चिह्नों से घिरा होना चाहिए, नहीं तो वर्ण बस के बजाय पाठ में जोड़ दी जाती एक कैरिज रिटर्न/लाइन ब्रेक बनाना।

+1

क्या आप वाकई PHP मेल फ़ंक्शन हैं और SMTP सर्वर नहीं हैं? यदि यह PHP है -> क्या इसके लिए कोई PHP बग रिपोर्ट किया गया है? मुझे कोई नहीं मिला, लेकिन इस व्यवहार को बदला जाना चाहिए (i। ई। इस व्यवहार को छोड़ दें या कम से कम एक नोटिस अगर आरएफसी छोटी लाइनों की अपेक्षा करता है)। –

+0

मुझे इसका सामना करने के दो साल बाद, लेकिन ऐसा लगता है कि यह एसएमटीपी सर्वर हो सकता है और मेल फ़ंक्शन नहीं। – Mordred

6

एक ही समस्या का सामना कर रहा था और इन समाधानों में से अधिकांश का प्रयास किया लेकिन यह मेरे लिए काम नहीं किया। ऐसा लगता है कि जब मेल मेल फ़ंक्शन के लिए बहुत लंबा लगता है तो यह 900 वर्ण चिह्न के आस-पास स्थान जोड़ता है। तो वर्डवाप जोड़ने का निम्नलिखित समाधान मेरे लिए काम करता था।

मेल ($ करने के लिए, $ विषय, WordWrap ($ संदेश), $ हेडर); है की तरह हॉटमेल (अर्ध) करना मुश्किल होता लिंक से उपयोगकर्ता "की रक्षा"

+0

बहुत आसान समाधान, हालांकि यह आपके वास्तविक सामग्री पाठ को अनावश्यक '
के साथ कूड़ा सकता है। यदि इससे कोई फर्क नहीं पड़ता है, या आप '\ r \ n' को परिवर्तनीय पाठ के कारण रखने की गारंटी नहीं दे सकते हैं तो यह एक स्वीकार्य समाधान है। – Mordred

संबंधित मुद्दे