Вопрос

Можно ли отправлять электронные письма с функцией wp_mail (), имеющей свой контент-тип: Multipart/Alternative?

Мне нужно отправить электронные письма, которые можно показать в виде HTML или простого текста в зависимости от того, что среда интерпретирует электронное письмо.

Любые предложения приветствуются!

Это было полезно?

Решение

Это прямо в wp_mail() документация (под Применение):

Тип контента по умолчанию - «текст/простой», который не позволяет использовать HTML. Вы можете установить тип контента электронной почты либо, используя фильтр 'wp_mail_content_type' (см. Пример ниже), либо включив заголовок, такой как «Тип контента: текст/html». Будьте осторожны, чтобы сбросить 'wp_mail_content_type' обратно в «текст/простой» после отправки своего сообщения, однако, потому что неспособность сделать это может привести к неожиданным проблемам с электронными письмами от WP или плагинов/тем.

(акцент мой)

2 -й пример на странице показывает, как это сделать (пример использует text/html Но вы должны иметь возможность использовать свой multipart/alternative вместо.

Другие советы

Вполне возможно, когда у вас есть доступ к экземпляру PhpMailer.

if ($is_html) 
    add_action('phpmailer_init', 'fix_mimeheader');

// more code.

wp_mail( $to, $subject, $html_message, $headers, $attachments );

// ...

function fix_mimeheader( $phpmailer ) {
     // Generate $text_message here.
     // ...

     $phpmailer->AltBody = $text_message;
}

Сообщение, отправленное в WP_MAIL, должно быть вашим HTML -кодом. Вы также не должны включать какие -либо заголовки типа контента. В настоящее время я использую из CC и ответа в плагин, который я сделал.

Если электронное письмо отправляется как HTML, я запускаю действие, которое устанавливает свойство Altbody на объекте PhpMailer напрямую. Затем это заставляет правильные флаги преобразовать электронную почту в многотатарное/альтернативное электронное письмо.

Вы можете использовать WP_MAIL_CONTENT_TYPE FILTER, который был теперь задокументирован в кодексе.

Документация WP_MAIL о сбросе типа контента обратно в «Текст/простой» вводит в заблуждение, IMO. Поскольку это фильтр, вы на самом деле не «сбрасываете» его. В своем фильтре необходимо рассмотреть некоторую условную логику, чтобы определить, когда вам нужно использовать Multipart и простой текст или HTML:

add_filter( 'wp_mail_content_type', 'my_mail_content_type' );
function my_mail_content_type( $content_type ) {

    if( $some_condition ) {
        return 'multipart/mixed';
    } else {
        return 'text/plain';
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top