これは簡単なはずですが、わかりません。 HTML形式の電子メールを送信したいのですが、添付ファイルもあります。添付ファイルは正しく送信されていますが、メッセージは次のようにプレーンテキストとして配信されます。
<p>Hello!</p>
<p> </p>
<p>Some text.</p>
<p> </p>
<p>Best wishes,</p>
<p>Team</p>
添付ファイルのないEメールの場合は、 here のようにヘッダーを変更してHTMLを送信するように強制します。しかし今、私はコンテンツタイプをマルチパート/ミックスにする必要があります(そうでしょう?)。だから私の質問は:私はどうやってwp_mail()
に自分のメッセージをhtmlとして送って添付ファイルを含めるよう説得するのか?
参照リンク ここをクリック 。
以下のコードを使用すると、HTML形式でメールを送信できます。
$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 );
// For attachment
$attachments = array( WP_CONTENT_DIR . '/uploads/file_to_attach.Zip' );
$headers = 'From: My Name <[email protected]>' . "\r\n";
wp_mail( '[email protected]', 'subject', 'message', $headers, $attachments );
私はあなたの特定のケースでの答えはリンクされたスレッドに記載されているバグを含まないと信じています。やりたいことを実現するためにカスタムヘッダーを設定する必要はありません。
代わりに$phpmailer->AltBody
を使って代替ボディをテキストとして設定するだけです。これは自動的にtoコンテンツタイプmultipart/alternative
(multipart/mixedではない)を設定し、あなたはphpmailer
クラスがカスタムヘッダを手動で設定する必要がある残りの{without}の世話をすることを可能にします。
add_action('phpmailer_init','wp_mail_set_text_body');
function wp_mail_set_text_body($phpmailer) {
$phpmailer->AltBody = strip_tags($phpmailer->Body);
}
$to = '[email protected]';
$headers = array();
$attachments = array(dirname(__FILE__).'/test.txt');
wp_mail($to,$subject,$message,$headers,$attachments);
添付ファイルを追加すると、全体のコンテンツタイプは自動的にmultipart/mixed
となり、そのwchiの中にmultipart/alternative
がtext/plain
とtext/html
の部分を含み、その後に添付ファイルが続きます。
画像などのmultipart/related
(インライン)添付ファイルをwp_mail
経由で$attachements
に渡すことで(5番目のパラメータを 'inline'として)、またはHTML本体自体の中で宣言することもできます。私が知る限り、これらはテキスト版にはアクセスできないでしょう。
あなたが投稿した リンクに記載されているように :
デフォルトのコンテンツタイプは 'text/plain'です。これはHTMLの使用を許可しません。ただし、 'wp_mail_content_type'フィルタを使用してメールのコンテンツタイプを設定できます。
wp_mail_content_type に記載されているように、これをfunctions.phpに追加します。
add_filter( 'wp_mail_content_type', 'set_content_type' );
function set_content_type( $content_type ) {
return 'text/html';
}
トリックをするべきです。