Tại sao wp_mail () không cho phép tôi đặt tiêu đề From: khi thư PHP cũ () đơn giản sẽ?


32

Khi tôi sử dụng wp_mail( $to, $subject, $message, $headers )(tất nhiên là có các giá trị), email sẽ được gửi với một tên và email không được đặt ở bất cứ đâu tôi có thể tìm thấy (ngay cả trong các cài đặt PHP hoặc Apache). Tuy nhiên, sử dụng mail( $to, $subject, $message, $headers )thay vì hoạt động tốt. Điều gì có thể xảy ra với wp_mail()nguyên nhân này?

Câu trả lời:


44

Xin chào @rcenyhou:

Bạn có thể đặt tiêu đề, không phải với một tham số. WordPress sử dụng "hook" và hook bạn cần 'wp_mail_from''wp_mail_from_name'hook.

Dưới đây là các móc bạn có thể thêm vào functions.phptệp của chủ đề để sửa đổi "From:"tiêu đề khi sử dụng wp_mail()vào địa chỉ email 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';
}

Tôi chỉ nhìn vào các bộ lọc và bạn đã đúng, nó đã khắc phục vấn đề. Tôi cho rằng Codex nên được cập nhật? codex.wordpress.org/Function_Reference/wp_mail Cũng liên quan: điều này dường như ảnh hưởng đến rất nhiều plugin hình thức ngoài kia, bao gồm cả GravityForms hùng mạnh. Tôi hiện đang viết một biểu mẫu tùy chỉnh, nhưng nếu đây là cách WP phải hành xử, tại sao việc thiết lập các tiêu đề sử dụng phương thức cũ thông thường lại hiệu quả với những người khác (và thậm chí một số trang web khác của tôi)?
helenhousandi

@helenyhou - Để tránh ảnh hưởng đến các hình thức khác, bạn cần thêm các bộ lọc trong plugin ngay trước khi được gọi wp_mail()và sau đó xóa chúng ngay sau đó. Về lý do tại sao cài đặt các tiêu đề hoạt động, tôi không biết các trường hợp sử dụng khác của bạn là gì nhưng tôi sẽ ngạc nhiên nếu wp_mail()nó hoạt động theo cách đó.
MikeSchinkel

2
Ahhhh tôi đã tìm thấy những gì đang xảy ra - một plugin khác đang thêm các bộ lọc trên toàn cầu cho những thứ tôi không yêu cầu và không thể từ chối - xấu, xấu, xấu. Vì vậy, bây giờ các tiêu đề thường xuyên làm việc sau khi tất cả. Có vẻ như sử dụng các bộ lọc đó sẽ là cách thực hành tốt nhất, nếu chúng ở đó.
helenhousandi

Chỉ cần lưu ý ở đây rằng bất kỳ bộ lọc nào mà plugin đang thêm có thể được xóa qua remove_filter (HOOK, FUNCTION).
Jason Coleman

nó chỉ hoạt động nếu tên miền từ email giống như trang web.
Omer

4

Chà, nếu bạn đang sử dụng From: "Your Name" <youremail@example.com>\r\nđịnh dạng trong các tiêu đề của mình, bạn không nên gặp sự cố (trừ khi bạn đã cài đặt plugin ghi đè chức năng wp_mail).

Tuy nhiên, như Mike đã nói, bạn có thể lọc các giá trị cuối cùng với các bộ lọc đó hoặc bạn chỉ có thể cài đặt plugin này:

Gửi từ

Nó sẽ cung cấp cho bạn một cài đặt tùy chọn để xác định tên và email sẽ sử dụng trong wp_mail.


1

Xin lỗi để làm sống lại một câu hỏi cũ nhưng không tốt hơn để đặt qua các tiêu đề như vậy:

$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);

Bằng cách đó, bạn không phải lo lắng về việc sử dụng bộ lọc và sau đó xóa sau wp_mail ().


2
Tôi không đặt bộ lọc, một plugin khác đã làm. Bộ lọc được ưu tiên hơn tiêu đề. Ngoài ra, bạn thực sự nên sử dụng site_url()thay vìget_bloginfo('wpurl')
helenhousandi

Nhưng sau đó chắc chắn rằng plugin là xấu vì đã không thanh toán bù trừ lên sau khi bản thân .... không rất nhiều bạn có thể làm gì về nó mặc dù :( trong trường hợp đó tôi tốt hơn thay đổi Plugin của tôi để lọc sử dụng chỉ trong trường hợp plugin khác đã phá vỡ nó.
Brady

@rcenyhou - +1 để nhắc tôi về site_url (). Tôi cũng đã thay đổi plugin của mình để sử dụng các bộ lọc thay vì sử dụng các tiêu đề $. Ngoài ra, tôi đã đảm bảo xóa các bộ lọc đó một khi tôi đã gửi email để không cản trở bất kỳ điều gì khác :)
Brady

vâng, plugin đó thật tệ khi không cho tôi tùy chọn không sử dụng các bộ lọc đó, nhưng may mắn là đã bình luận ra các bộ lọc phù hợp với trường hợp của tôi. Có lẽ tôi sẽ hỏi xung quanh để xem cái nào tốt hơn để sử dụng trong tương lai - bộ lọc cho mỗi lần sử dụng hoặc các tiêu đề quen thuộc hơn. Các tiêu đề có thể hiệu quả hơn, nhưng tại sao những bộ lọc đó lại ở đó? Luôn luôn có nhiều câu hỏi hơn :)
helenhousandi

Kể từ phiên bản hiện tại, nó hoàn toàn được chấp nhận để sử dụng get_bloginfo('wpurl'): Điều này site_url()đã trả về . get_bloginfo('home')get_bloginfo('siteurl')bị phản đối developer.wordpress.org/reference/fifts/get_bloginfo
James M

1

Đó là một chút hack nhưng bạn cũng có thể sử dụng Reply Tothẻ tiêu đề:

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

Đáng buồn thay, điều này thêm địa chỉ email vào danh sách Từ và trả lời có nghĩa là bạn sẽ phải xóa thủ công địa chỉ được định cấu hình trong wp_mail_frombộ lọc.


CÁi này đã sửa nó giúp tôi. Bạn đã cứu một người bạn đời! ;)
dùng382738

0

Tôi đã từng gặp vấn đề tương tự. Đối với tôi, nhà cung cấp dịch vụ lưu trữ (Bluehost) đã ngăn không cho thay đổi từ trường. Tại đây họ giải thích về nó https://my.bluehost.com/cgi/help/206 .

Tôi đã khắc phục sự cố bằng cách thêm email vào hộp thư cPanel đúng như họ nói.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.