WordPress의 wp_mail () 함수를 사용하여 HTML 형식의 이메일을 보내는 방법이 있습니까?
5 대답
- 투표
-
- 2011-09-06
wp_mail 코덱스 페이지 에서 :
<인용구>기본 콘텐츠 유형은 'text/plain'이며 HTML 사용을 허용하지 않습니다.그러나 'wp_mail_content_type'필터를 사용하여 이메일의 콘텐츠 유형을 설정할 수 있습니다.
// In theme's functions.php or plug-in code: function wpse27856_set_content_type(){ return "text/html"; } add_filter( 'wp_mail_content_type','wpse27856_set_content_type' );
from wp_mail codex page:
The default content type is 'text/plain' which does not allow using HTML. However, you can set the content type of the email by using the 'wp_mail_content_type' filter.
// In theme's functions.php or plug-in code: function wpse27856_set_content_type(){ return "text/html"; } add_filter( 'wp_mail_content_type','wpse27856_set_content_type' );
-
흠 유용한 것 같습니다.질문,함수 이름을 wpse27856_set_content_type으로 지정한 특별한 이유가 있습니까?Hmm sounds useful. Just a question, any particular reason why you named your function wpse27856_set_content_type?
- 2
- 2011-09-06
- racl101
-
아니요,이 특정 질문의 ID를 기반으로 한 고유 한 이름입니다.wpse=wp stachexchange,27856은 URL에서이 질문의 ID입니다.사람들이 여기에서 코드를 복사/붙여 넣기 할 경우 잠재적 인 충돌을 피하기 위해 그렇게합니다.No, it's just a unique name based on the id of this particular question. wpse = wp stachexchange, 27856 is the id of this question in the URL. I just do that to avoid potential collisions if people copy/paste code out of here.
- 18
- 2011-09-06
- Milo
-
이메일 헤더에 Content-Type을 포함 할 수도 있습니다.Notifly 플러그인이 어떻게 작동하는지 확인하십시오.You can also just include the Content-Type in your email headers. Check out how the Notifly plugin does it.
- 3
- 2011-09-07
- Otto
-
오 예,하하.나는n00b입니다.이 게시물의 ID라고 생각합니다.oh yeah, ha ha. What a n00b I am. Guess it is the id of this post.
- 0
- 2011-09-07
- racl101
-
이메일이 .txt 파일이어야합니까,.html 파일이어야합니까?이 방법을 사용하고 있지만 소스를 보면 .txt 파일이고 포함 된 이미지가 처리되지 않습니다.Should the email be a .txt file or a .html file? I'm using this method but if I view source it is a .txt file and the embedded image is not processed.
- 0
- 2012-07-27
- AlxVallejo
-
@AlxVallejo 파일에서 보내는 경우 먼저 파일을 문자열로 읽어야 할 것입니다.@AlxVallejo if your sending from file you will probably need to read the file as a string first.
- 0
- 2013-01-28
- Blowsie
-
헤더를 전달하는 것이 후크를 추가하는 것보다 더 효율적인 방법입니다.-1passing the headers in is a more efficient method than adding a hook. -1
- 0
- 2016-11-01
- Jeremy
-
@Jeremy는 확실하지만 헤더를 직접 전달하는 것은`wp_mail`을 호출하는 코드가 아닌 경우와 같이 많은 경우에 옵션이 아닙니다.@Jeremy sure, but passing the headers directly is not an option in many cases, like when it's not your code calling `wp_mail`.
- 0
- 2016-11-02
- Milo
-
@Milo 당신이 맞지만이 질문에 대한 헤더는 정답입니다.@Milo You are correct but for this question the headers are the correct answer.
- 0
- 2016-11-02
- Jeremy
-
재설정 링크가 <>에 포함되어 있기 때문에 비밀번호 재설정 이메일이 손상됩니다.This will break your password reset email, because the reset link is wrapped in <>.
- 2
- 2017-10-24
- Simon Josef Kok
-
이것은`wp_mail`이 HTML 이메일이 아닌 일반 텍스트 이메일을 보낼 것으로 예상하는 다른 코드를 손상시키지 않습니까?Doesn't this break any other code that expects `wp_mail` to send plain text email, rather than HTML email?
- 0
- 2019-04-04
- Flimm
-
@SimonJosefKok,이 버그 보고서를 올바르게 읽고 있다면 비밀번호 재설정 이메일을 깨는 문제는 WordPress 5.4부터 해결되었습니다.이메일 주소에서 꺾쇠 괄호를 제거하기로 결정한 것 같습니다.https://core.trac.wordpress.org/ticket/23578#comment:24@SimonJosefKok, if I'm reading this bug report correctly, the issue of breaking password reset emails is resolved as of WordPress 5.4. Sounds like they decided to remove the angle brackets from the email address. https://core.trac.wordpress.org/ticket/23578#comment:24
- 0
- 2020-02-11
- Mark Berry
-
- 2015-07-26
또는 $ headers 매개 변수에 Content-Type HTTP 헤더를 지정할 수 있습니다.
$to = '[email protected]'; $subject = 'The subject'; $body = 'The email body content'; $headers = array('Content-Type: text/html; charset=UTF-8'); wp_mail( $to, $subject, $body, $headers );
As an alternative, you can specify the Content-Type HTTP header in the $headers parameter:
$to = '[email protected]'; $subject = 'The subject'; $body = 'The email body content'; $headers = array('Content-Type: text/html; charset=UTF-8'); wp_mail( $to, $subject, $body, $headers );
-
이것은 add_filter가 때때로 첨부 파일로 표시되기 때문에 더 잘 작동합니다.공유해 주셔서 감사합니다!This works better as the add_filter sometimes shows as attachment. Thanks for sharing!
- 4
- 2018-02-17
- deepakssn
-
이것은 일반적으로이를 수행하는 가장 좋은 방법입니다.상위 답변은 다른 플러그인을 방해하고 문제를 일으킬 수 있습니다.This is the generally best way to-do this. The top answer will interfere with other plugins and cause problems.
- 2
- 2019-12-06
- Alex Standiford
-
- 2015-01-02
wp_mail 함수를 사용한 후 콘텐츠 유형 필터를 제거하는 것을 잊지 마십시오. 수락 된 응답 이름 지정에 따라 wp_mail이 실행 된 후이 작업을 수행해야합니다.
remove_filter( 'wp_mail_content_type','wpse27856_set_content_type' );
여기에서이 티켓 확인-충돌을 피하기 위해 콘텐츠 유형 재설정- http ://core.trac.wordpress.org/ticket/23578
Don't forget to remove the content type filter after you use the wp_mail function. Following the accepted answer naming you should do this after wp_mail is executed:
remove_filter( 'wp_mail_content_type','wpse27856_set_content_type' );
Check this ticket here - Reset content-type to avoid conflicts -- http://core.trac.wordpress.org/ticket/23578
-
이건 답변이 아닌 댓글이어야합니다.This should be a comment, not an answer, no?
- 12
- 2017-07-26
- Bob Diego
-
- 2020-04-05
아래에서 공유 할 또 다른 쉬운 방법입니다.원하는대로 메일 본문을 스타일링 할 수도 있습니다.도움이 될 수도 있습니다.
$email_to = '[email protected]'; $email_subject = 'Email subject'; // <<<EOD it is PHP heredoc syntax $email_body = <<<EOD This is your new <b style="color: red; font-style: italic;">password</b> : {$password} EOD; $headers = ['Content-Type: text/html; charset=UTF-8']; $send_mail = wp_mail( $email_to, $email_subject, $email_body, $headers );
PHP heredoc 구문에 대한 추가 정보 https://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc
Another easy way I'm going to share below. Even you can style your mail body as your wish. Maybe it's helpful for you.
$email_to = '[email protected]'; $email_subject = 'Email subject'; // <<<EOD it is PHP heredoc syntax $email_body = <<<EOD This is your new <b style="color: red; font-style: italic;">password</b> : {$password} EOD; $headers = ['Content-Type: text/html; charset=UTF-8']; $send_mail = wp_mail( $email_to, $email_subject, $email_body, $headers );
More about PHP heredoc syntax https://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc
-
- 2020-03-05
ob_start
를 사용하면bloginfo 등과 같은 WP 변수/함수를 사용할 수 있습니다.PHP 파일을 만들고 해당 파일에 HTML을 붙여 넣습니다 (필요한 경우 해당 PHP 파일 내의 wp 변수 사용).
아래 코드 사용 :
$to = 'Email Address'; $subject = 'Your Subject'; ob_start(); include(get_stylesheet_directory() . '/email-template.php');//Template File Path $body = ob_get_contents(); ob_end_clean(); $headers = array('Content-Type: text/html; charset=UTF-8','From: Test <[email protected]>'); wp_mail( $to, $subject, $body, $headers );
이렇게하면 코드가 깨끗하게 유지되고 ob_start로 인해 파일로드 시간도 절약됩니다.
Use
ob_start
, because this will allow you to use WP variables/functions like bloginfo etc.make a PHP file and paste your HTML in that file(use wp variables inside that php file if needed).
Use the below code:
$to = 'Email Address'; $subject = 'Your Subject'; ob_start(); include(get_stylesheet_directory() . '/email-template.php');//Template File Path $body = ob_get_contents(); ob_end_clean(); $headers = array('Content-Type: text/html; charset=UTF-8','From: Test <[email protected]>'); wp_mail( $to, $subject, $body, $headers );
this will keep your code clean and due to ob_start we will also save the time of loading the file.
이 작업을 수행하는 데 도움이되는 action_hook 또는 이와 유사한 것이 있습니까?
PHP 문자열 변수에 마크 업을 추가하려고 시도했고 다음과 같이
wp_mail()
함수로 이메일을 발동했습니다.하지만 일반 텍스트로 표시 되었나요?
아이디어가 있습니까?