왜 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.