ทำไมจะไม่ wp_mail () ให้ฉันตั้งค่าส่วนหัวจาก: เมื่อจดหมาย PHP ธรรมดา () จะ?


32

เมื่อฉันใช้wp_mail( $to, $subject, $message, $headers )(โดยมีค่าอยู่) จะได้รับอีเมลที่ส่งจากชื่อและอีเมลที่ไม่ได้ตั้งค่าไว้ที่ใดที่ฉันสามารถหาได้ (ไม่ใช่แม้แต่ในการตั้งค่า PHP หรือ Apache) อย่างไรก็ตามการใช้mail( $to, $subject, $message, $headers )แทนที่จะใช้งานได้ดี จะเกิดอะไรขึ้นกับwp_mail()สาเหตุนี้

คำตอบ:


44

สวัสดี@helenyhou:

คุณสามารถตั้งค่าส่วนหัวได้โดยไม่ต้องมีพารามิเตอร์ WordPress ใช้"ตะขอ"และตะขอที่คุณจำเป็นต้องมี'wp_mail_from'และ'wp_mail_from_name'ตะขอ

นี่คือตะขอที่คุณอาจเพิ่มลงในfunctions.phpไฟล์ธีมของคุณเพื่อแก้ไข"From:"ส่วนหัวเมื่อใช้wp_mail()กับที่อยู่อีเมลHelen Hou-Sandi <helenyhou@example.com>:

add_filter('wp_mail_from','yoursite_wp_mail_from');
function yoursite_wp_mail_from($content_type) {
  return 'helenyhou@example.com';
}
add_filter('wp_mail_from_name','yoursite_wp_mail_from_name');
function yoursite_wp_mail_from_name($name) {
  return 'Helen Hou-Sandi';
}

ฉันแค่ดูที่ตัวกรองและคุณพูดถูกมันจะแก้ไขปัญหาได้ ฉันควรจะอัพเดท Codex หรือไม่ codex.wordpress.org/Function_Reference/wp_mail นอกจากนี้ยังเกี่ยวข้องกับ: สิ่งนี้ดูเหมือนว่าจะส่งผลกระทบต่อรูปแบบปลั๊กอินจำนวนมากรวมถึง GravityForm อันยิ่งใหญ่ ฉันกำลังเขียนแบบฟอร์มที่กำหนดเอง แต่ถ้านี่เป็นวิธีการที่ WP ควรประพฤติตัวทำไมการตั้งค่าส่วนหัวโดยใช้วิธีการแบบเก่าปกติใช้งานได้สำหรับคนอื่น ๆ (และแม้แต่บางเว็บไซต์อื่น ๆ ของฉัน)
helenhousandi

@helenyhou - เพื่อป้องกันไม่ให้มีผลต่อรูปแบบอื่น ๆ คุณจะต้องเพิ่มตัวกรองในปลั๊กอินของคุณก่อนที่จะถูกเรียกwp_mail()แล้วลบออกทันที สำหรับสาเหตุที่การตั้งค่าส่วนหัวทำงานฉันไม่ทราบว่ากรณีการใช้งานอื่น ๆ ของคุณคืออะไร แต่ฉันประหลาดใจถ้าwp_mail()จะใช้วิธีนั้น
MikeSchinkel

2
Ahhhh ฉันพบสิ่งที่เกิดขึ้น - ปลั๊กอินอื่นกำลังเพิ่มตัวกรองทั่วโลกสำหรับสิ่งที่ฉันไม่ได้ขอและไม่สามารถเลือกได้ - เลวร้ายเลวเลว ดังนั้นตอนนี้ส่วนหัวปกติจะทำงานหลังจากทั้งหมด ดูเหมือนว่าการใช้ตัวกรองเหล่านั้นจะเป็นแนวปฏิบัติที่ดีที่สุดหากมีอยู่ในนั้น
helenhousandi

เพียงทราบที่นี่ว่าตัวกรองใด ๆ ที่มีการเพิ่มปลั๊กอินสามารถลบออกได้ผ่าน remove_filter (HOOK, FUNCTION)
Jason Coleman

ใช้งานได้เฉพาะหากจากโดเมนอีเมลเช่นเดียวกับไซต์
Omer

4

ถ้าคุณใช้From: "Your Name" <youremail@example.com>\r\nรูปแบบในส่วนหัวของคุณคุณไม่ควรมีปัญหา (เว้นแต่คุณจะติดตั้งปลั๊กอินที่แทนที่ฟังก์ชั่น wp_mail)

อย่างไรก็ตามอย่างที่ Mike พูดคุณสามารถกรองค่าสูงสุดด้วยตัวกรองเหล่านั้นหรือคุณเพียงแค่ติดตั้งปลั๊กอินนี้:

ส่งจาก

มันจะให้การตั้งค่าตัวเลือกแก่คุณเพื่อกำหนดชื่อและอีเมลที่จะใช้ใน wp_mail


1

ขออภัยที่จะฟื้นคำถามเก่า แต่ไม่ดีกว่าที่จะตั้งค่าผ่านส่วนหัวเช่น:

$subject  = "MyPlugin: Alert (".get_bloginfo('wpurl').")";
$headers  = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type: text/html; charset=".get_bloginfo('charset')."" . "\r\n";
$headers .= "From: MyPlugin <".$this->settings['from_address'].">" . "\r\n";
wp_mail($this->settings['notify_address'], $subject, $alertMessage, $headers);

ด้วยวิธีนี้คุณไม่ต้องกังวลกับการใช้ตัวกรองแล้วลบที่หลังจาก wp_mail ()


2
ฉันไม่ได้ตั้งตัวกรองปลั๊กอินอื่นทำ ตัวกรองมีความสำคัญกว่าส่วนหัว นอกจากนี้คุณควรใช้site_url()แทนget_bloginfo('wpurl')
helenhousandi

แต่แน่นอนว่าปลั๊กอินนั้นไม่ดีสำหรับการไม่ล้างหลังจากตัวเอง .... ไม่มากคุณสามารถทำได้เกี่ยวกับมันแม้ว่า :( ในกรณีนี้ฉันควรเปลี่ยนปลั๊กอินของฉันเพื่อใช้ตัวกรองในกรณีที่ปลั๊กอินอื่นเสีย
Brady

@helenyhou - +1 เพื่อเตือนฉันเกี่ยวกับ site_url () ฉันได้เปลี่ยนปลั๊กอินของฉันเพื่อใช้ตัวกรองแทนที่จะใช้ $ headers พลัสผมได้ทำแน่ใจว่าจะเอาตัวกรองเหล่านั้นเมื่อฉันได้ส่งอีเมลเพื่อไม่ให้ได้รับในทางของสิ่งอื่น :)
เบรดี้

ใช่มันเป็นปลั๊กอินที่ไม่ดีสำหรับฉันที่จะไม่ให้ตัวเลือกแก่ฉันที่จะไม่ใช้ตัวกรองเหล่านั้น ฉันอาจจะถามว่าจะใช้อันไหนดีกว่าในอนาคต - ตัวกรองต่อการใช้งานหรือส่วนหัวที่คุ้นเคยยิ่งขึ้น ส่วนหัวอาจมีประสิทธิภาพมากกว่า แต่ทำไมตัวกรองเหล่านั้นถึงมีอยู่ คำถามเพิ่มเติมอยู่เสมอ :)
helenhousandi

ในฐานะของเวอร์ชันปัจจุบันมันเป็นที่ยอมรับโดยสิ้นเชิงที่จะใช้get_bloginfo('wpurl'): ผลตอบแทนนี้site_url()แล้ว get_bloginfo('home')และget_bloginfo('siteurl')เลิกใช้แล้ว developer.wordpress.org/reference/functions/get_bloginfo
James M

1

มันค่อนข้างแฮ็ค แต่คุณสามารถใช้Reply Toแท็กส่วนหัวได้:

$headers = 'Reply-To: "Aaren A. Aarenson" <aaron@somemail.com>';

น่าเศร้าที่นี่เพิ่มที่อยู่อีเมลในรายการจากและการตอบกลับหมายความว่าคุณจะต้องลบที่อยู่ที่กำหนดค่าในwp_mail_fromตัวกรองด้วยตนเอง


สิ่งนี้แก้ไขได้สำหรับฉัน คุณช่วยชีวิตคู่! ;)
382738

0

ผมมีปัญหาเหมือนกัน. สำหรับฉันมันออกมาว่าผู้ให้บริการโฮสต์ (BlueHost) ป้องกันไม่ให้เปลี่ยนจากฟิลด์ พวกเขาอธิบายได้ที่นี่https://my.bluehost.com/cgi/help/206 https://my.bluehost.com/cgi/help/206

ฉันแก้ไขปัญหาด้วยการเพิ่มอีเมลไปยังกล่องจดหมาย cPanel เช่นเดียวกับที่พวกเขาพูด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.