Is there an action_hook or something similar that could help me achieve this?
I tried adding markup in a PHP string variable and just fired off an email with the wp_mail() function like so:
$email_to = '<a href="https://getridbug.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="61120e0c040005051304121221060c00080d4f020e0c">[email protected]</a>'; $email_subject = 'Email subject'; $email_body = "<html><body><h1>Hello World!</h1></body></html>"; $send_mail = wp_mail($email_to, $email_subject, $email_body);
But it showed up as plain text?
Any ideas?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
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' );
Method 2
As an alternative, you can specify the Content-Type HTTP header in the $headers parameter:
$to = '<a href="https://getridbug.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e390868d87978ca3869b828e938f86cd808c8e">[email protected]</a>';
$subject = 'The subject';
$body = 'The email body content';
$headers = array('Content-Type: text/html; charset=UTF-8');
wp_mail( $to, $subject, $body, $headers );
Method 3
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
Method 4
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 = '<a href="https://getridbug.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1b6874767e7a7f7f697e68685b7c767a727735787476">[email protected]</a>';
$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
Method 5
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 <<a href="https://getridbug.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="691d0c1a1d291d0c1a1d470a0604">[email protected]</a>>');
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.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0