왜 wp_mail ()을 사용하여 평범한 오래된 PHP mail ()이 From : 헤더를 설정할 수 없습니까?


32

wp_mail( $to, $subject, $message, $headers )(물론 값을 사용하여) 사용할 때 이메일은 발신 이름과 이메일로 어디에서나 찾을 수없는 곳 (PHP 또는 Apache 설정에서도)으로 보내집니다. 그러나 mail( $to, $subject, $message, $headers )대신 사용하면 정상적으로 작동합니다. wp_mail()이것을 일으키는 원인 은 무엇입니까 ?

답변:


44

안녕하세요 @helenyhou :

매개 변수가 아닌 헤더를 설정할 수 있습니다. 워드 프레스는 "후크" 와 필요한 후크 '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.wordpress.org/Function_Reference/wp_mail 또한 관련이 있습니다 : 이것은 강력한 GravityForms를 포함하여 많은 폼 플러그인에 영향을주는 것 같습니다. 현재 사용자 정의 양식을 작성하고 있지만 이것이 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-site_url ()을 상기시켜주는 +1 또한 $ headers를 사용하지 않고 필터를 사용하도록 플러그인을 변경했습니다. 또한 다른 방법으로 방해받지 않도록 이메일을 보낸 후에는 해당 필터를 제거했습니다. :)
— Brady

그렇습니다. 플러그인은 해당 필터를 사용하지 않는 옵션을 제공하지 못하지만 운 좋게도 필터가 내 경우에 효과가 있다고 언급했습니다. 아마도 사용 빈도 필터 또는 더 친숙한 헤더 인 미래에 어느 것이 더 나은지 알아볼 것입니다. 헤더가 더 효율적일 수 있지만 왜 필터가 있습니까? 항상 더 많은 질문 :)
— 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필터에 구성된 주소를 수동으로 제거해야합니다 .


이것은 나를 위해 그것을 고쳤다. 당신은 생명의 짝을 구했습니다! ;)
— user382738 2016 년

0

나는 같은 문제가 있었다. 나를 위해 호스팅 공급자 (BlueHost)가 보낸 사람 필드를 변경하지 못하고 있다고 나왔습니다. 여기에 https://my.bluehost.com/cgi/help/206이 있습니다.

이메일을 cPanel 편지함에 추가하는 것처럼 문제를 해결했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.