Trimiterea unui email HTML cu atașament folosind wp_mail()
Aceasta ar trebui să fie ușor, dar nu reușesc să găsesc soluția. Vreau să trimit un email formatat HTML, care să conțină și un atașament. Atașamentul este trimis corect, dar mesajul este livrat ca text simplu, astfel:
<p>Salut!</p>
<p> </p>
<p>Un text oarecare.</p>
<p> </p>
<p>Cu cele mai bune urări,</p>
<p>Echipa</p>
Dacă ar fi fost un email fără atașament, aș fi forțat trimiterea în format html prin modificarea header-ului așa cum este descris aici. Dar acum am nevoie ca tipul conținutului să fie multipart/mixed (corect?). Așadar întrebarea mea este: cum pot convinge funcția wp_mail()
să trimită mesajele mele în format html și să includă și atașamentul?

Link de referință faceți clic aici.
Utilizând codul de mai jos puteți trimite e-mailul în format HTML.
$to = 'sendto@example.com';
$subject = 'Subiectul';
$body = 'Conținutul corpului e-mailului';
$headers = array('Content-Type: text/html; charset=UTF-8');
wp_mail( $to, $subject, $body, $headers );
// Pentru atașament
$attachments = array( WP_CONTENT_DIR . '/uploads/file_to_attach.zip' );
$headers = 'From: Numele Meu <myname@example.com>' . "\r\n";
wp_mail( 'test@example.org', 'subiect', 'mesaj', $headers, $attachments );

Cred că răspunsul în cazul tău particular nu implică bug-ul menționat în firul legat. Nu este nevoie să setezi antete personalizate pentru a realiza ceea ce dorești.
În schimb, poți seta simplu corpul alternativ ca text folosind $phpmailer->AltBody
. Acest lucru setează automat tipul de conținut la multipart/alternative
(nu multipart/mixed) și lași clasa phpmailer
să se ocupe de restul fără a fi nevoie să setezi manual antete personalizate.
add_action('phpmailer_init','wp_mail_set_text_body');
function wp_mail_set_text_body($phpmailer) {
$phpmailer->AltBody = strip_tags($phpmailer->Body);
}
$to = 'me@example.com';
$headers = array();
$attachments = array(dirname(__FILE__).'/test.txt');
wp_mail($to,$subject,$message,$headers,$attachments);
Dacă adaugi atașamente, tipul general de conținut va deveni automat multipart/mixed
cu multipart/alternative
în interiorul acestuia, care conține părți text/plain
și text/html
, urmate apoi de atașamente.
De asemenea, poți adăuga atașamente multipart/related
(inline), cum ar fi imagini, trecându-le la wp_mail
prin $attachements
(cu al 5-lea parametru ca 'inline') – sau chiar declarându-le direct în corpul HTML. Acestea nu vor fi accesibile în versiunea text, din câte știu.

după cum se menționează în link-ul postat de tine:
Tipul de conținut implicit este 'text/plain', care nu permite utilizarea HTML. Totuși, poți seta tipul de conținut al email-ului folosind filtrul 'wp_mail_content_type'.
Adăugând acest cod în functions.php, conform wp_mail_content_type:
add_filter( 'wp_mail_content_type', 'set_content_type' );
function set_content_type( $content_type ) {
return 'text/html';
}
Ar trebui să funcționeze.
