2015-10-07 6 views
10

मैं मेल() फ़ंक्शन का उपयोग करके PHP का उपयोग करके सफलतापूर्वक मेल भेज रहा हूं लेकिन भेजना सर्वर पता के रूप में दिखा रहा है और जो मैंने स्क्रिप्ट में कॉन्फ़िगर नहीं किया है। अपाचे सर्वर पर पोस्टफिक्स स्थापित है। ServerFault answer पर मैं -f और -r झंडे का उपयोग करने के पढ़ा लेकिन है कि या तो इस तरह से काम नहीं करता:पोस्टफिक्स PHP मेल() फ़ंक्शन

mail($to, $subject, $message, $headers,'From: ' . $fromname . ' <'.$from.'>', "-f $from -r [email protected]"); 

सबसे अच्छा मैं ऐसा करने में सक्षम किया गया है पोस्टफिक्स myorigin जो स्थानीय मशीन नाम होस्ट नाम है बदल रहा है मशीन नाम के मूल डोमेन के लिए।

इससे मुझे विश्वास होता है कि पोस्टफिक्स अनदेखा कर रहा है या तत्व को अलग कर रहा है? तत्व? के रूप में mail() केवल 5 पैरामीटर स्वीकार

+0

उबंटू पेज –

+0

लिंक करें मैं यह कैसे कर सकता हूं? @ करोलि हॉर्वथ –

+0

कभी नहीं, मुझे एहसास है कि अब आप क्या कह रहे हैं ... यह एक सर्वरफॉल्ट उत्तर था ... मैंने लिंक जोड़ा। –

उत्तर

5

आप पोस्टफिक्स को अपना जॉब रीराइटिंग हेडर कर सकते हैं और From: पते जोड़ सकते हैं। इसके लिए, पोस्टफिक्स में sender_canonical_maps है।

मान लीजिए कि अपने वेब सर्वर (या एक प्रक्रिया प्रबंधक) उपयोगकर्ता username नामित के अधीन ही कार्य करते हैं, और आप स्पष्ट नहीं [email protected] के बजाय अपने ईमेल की From: शीर्षक में [email protected] करना चाहते हैं।फिर, विहित मानचित्र होते हैं:

#/etc/postfix/canonical 
username [email protected] 

पोस्टफिक्स उपयोग करने के लिए यह नहीं किया जा सकता का विन्यास आसान:

postmap /etc/postfix/canonical 
postconf -e sender_canonical_maps=hash:/etc/postfix/canonical 

अन्य विकल्प को चिह्नित करने के लिए सभी ईमेल सर्वर से भेजने के रूप में [email protected] से भेज पोस्टफ़िक्स बताने के लिए है luser_relay के माध्यम से:

postconf -ev [email protected] 

आप इसे, बहुत संभव है किसी को पहले से ही आप के लिए यह किया था, लेकिन वह गलत किया था नहीं कर सकते हैं। यह एक कारण हो सकता है कि आप From: पता क्यों नहीं बदल सकते हैं क्योंकि इसे पोस्टफिक्स द्वारा मजबूर रूप से ओवरराइट किया जा रहा है।

9
mail($to, $subject, $message, $headers,'From: ' . $fromname . ' <'.$from.'>', "-f $from -r [email protected]"); 

काम नहीं कर सकता: bool mail (string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]])

दोनों

mail($to, $subject, $message, null, "-r [email protected]"); 
mail($to, $subject, $message, 'Name <[email protected]>', "-r [email protected]"); 

काम मेरे लिए (मैं जो प्रेषकों पुनर्लेखन सकता पोस्टफ़िक्स में किसी भी अतिरिक्त प्रतिबंध नहीं है)। यह भी सुनिश्चित करें कि प्रेषक ठीक तरह से स्वरूपित है (कोई स्थान या कुछ भी नहीं)।

हालांकि, मैं "-r [email protected]" पैरामीटर को शामिल करने के लिए अपने php.ini में sendmail_path सेटिंग समायोजित करने की अनुशंसा करता हूं।

यदि यह आपके लिए काम नहीं करता है, तो आपको यहां मेल हेडर पोस्ट करना चाहिए और चेतावनियों/त्रुटियों के लिए अपनी लॉग फाइलों को जांचना चाहिए।

पीएस: कृपया सुनिश्चित करें कि आप उपयोगकर्ता दर्ज डेटा को सीधे mail() पर पास नहीं करते हैं, क्योंकि यदि उपयोगकर्ता न्यूलाइन (जैसे \nCC: [email protected] विषय में, मेल या मेल से) सम्मिलित कर सकते हैं तो आपके सर्वर का उपयोग स्पैमिंग के लिए किया जा सकता है।

4

आप दो बार और इस तरह अपने mail() कॉल में हैडर तर्क मिल गया है, अपने $additional_parameters तर्क इस्तेमाल किया जा रहा नहीं है क्योंकि यह एक समारोह है कि केवल 5. स्वीकार करता है में 6 तर्क आप के बजाय हैडर बढ़ना चाहिए में शामिल किया जाता है अपने हेडर के बाकी:

//Be mindful to protect from email injection attacks. 
$fromname = str_replace("\n", "", $fromname); 
$from = str_replace("\n", "", $from); 

//This assumes that $headers is already set, containing your other headers 
$headers .= 'From: ' . $fromname . ' <'.$from.">\n"; 

mail($to, $subject, $message, $headers, "-f $from -r [email protected]"); 

इस का उपयोग करना, मैं उम्मीद होती है कि अपने 5 वीं तर्क अब बेमानी है और करने के लिए सरल किया जा सकता है:

$fromname = str_replace("\n", "", $fromname); 
$from = str_replace("\n", "", $from); 

$headers .= 'From: ' . $fromname . ' <'.$from.">\n"; 

mail($to, $subject, $message, $headers); 
+1

'ट्रिम 'स्ट्रिंग के भीतर न्यूलाइन के खिलाफ मदद नहीं करता है। – cweiske

+0

एक ही समय में '-r' और' -f' निर्दिष्ट करने की आवश्यकता नहीं है। – MrTux

+0

@MrTux - आप सही हैं, वे झंडे बिल्कुल वही काम करते हैं। हालांकि, मुझे विश्वास नहीं है कि यह प्रश्न में वर्णित समस्याओं का कारण बन रहा है; स्पष्टता उद्देश्यों के लिए मैं इसे छोड़ दूंगा। – HPierce

4

पीएचपी में, mail च के लिए वाक्यविन्यास इस प्रकार गर्मजोशी है:

mail($to, $subject, $message, $headers, $parameters); 
अपने मामले में

तो अगर आप "प्रेषक" पता एक अलग और एक अलग "द रिटर्न पथ" निर्दिष्ट करना चाहते हैं, अपने कोड के रूप में किया जाना चाहिए इस प्रकार है:

$to = "[email protected]"; 
$subject = "Your reset email"; 
$message = "<message text/html>"; 
$from = "[email protected]"; 
$bounceEmail = "[email protected]"; 
$headers = array(
    "From: " . $from 
); 
$headers = implode("\r\n", $headers); 
$parameters = "-r" . $bounceEmail; 

// Send it! 
mail($to, $subject, $message, $headers, $parameters); 

आशा इससे मदद मिलती है!

+0

PHP के दस्तावेज़ों का उद्धरण: ईमेल शीर्षलेख के अंत में स्ट्रिंग डालने के लिए स्ट्रिंग। यह आमतौर पर अतिरिक्त शीर्षलेख जोड़ने के लिए उपयोग किया जाता है (से, सीसी, और बीसीसी)। ** एकाधिक अतिरिक्त शीर्षलेखों को एक सीआरएलएफ (\ r \ n) ** से अलग किया जाना चाहिए। यदि बाहरी डेटा को इस हेडर को लिखने के लिए उपयोग किया जाता है, तो डेटा को स्वच्छ किया जाना चाहिए ताकि कोई अवांछित शीर्षलेख इंजेक्शन न हो। http://php.net/manual/en/function.mail.php – Jamesking56

+0

^(श्री टक्स की टिप्पणी हटा दी गई है लेकिन मैं इसे यहां समृद्धि के लिए छोड़ दूंगा) – Jamesking56

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