Trimiterea unui email HTML cu atașament folosind wp_mail()

23 mai 2016, 14:46:21
Vizualizări: 29.3K
Voturi: 1

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>&nbsp;</p>
<p>Un text oarecare.</p>
<p>&nbsp;</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?

6
Comentarii

care este rezultatul când setezi tipul de conținut la text/html prin filtrul furnizat? https://developer.wordpress.org/reference/hooks/wp_mail_content_type/

majick majick
23 mai 2016 15:41:39

Ai dat peste un bug care încă nu a fost rezolvat oficial în nucleu. Din fericire, există un patch pe care îl poți adăuga și practic ești pe cale să intri într-o mare migrenă (huvudvärk), dar am încercat să reduc durerea pentru tine în explicația mea despre cum funcționează mesajele multipart cu wp_mail() în întrebarea mea: http://wordpress.stackexchange.com/questions/191923/sending-multipart-text-html-emails-via-wp-mail-will-likely-get-your-domain-b -- Mult succes!

Christine Cooper Christine Cooper
23 mai 2016 17:11:29

@majick : este un mesaj multipart / mixed. Nu poate avea tipul de conținut 'text/html'.

Maija Vilkina Maija Vilkina
23 mai 2016 18:32:02

@ChristineCooper : da, am citit acel fir de discuție, doar speram că există acum o metodă mai bună de a rezolva asta. Uh. :( Cred că voi folosi text simplu pentru conținut deocamdată.

Maija Vilkina Maija Vilkina
23 mai 2016 18:32:59

această eroare nu ar trebui să te împiedice să faci ceea ce ceri, vezi răspunsul (și unul adăugat la celălalt fir de discuție care identifică cauza.)

majick majick
25 mai 2016 10:22:49

Consultă acest articol https://www.phparticles.com/wordpress/how-to-use-wp-mail-with-wordpress/

Mr.Happy Mr.Happy
4 oct. 2020 15:40:47
Arată celelalte 1 comentarii
Toate răspunsurile la întrebare 3
1

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 );
23 mai 2016 17:00:46
Comentarii

Dacă citești cu atenție, vei observa că acesta nu este un răspuns la întrebarea mea.

Maija Vilkina Maija Vilkina
23 mai 2016 18:30:05
0

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.

24 mai 2016 17:35:27
1

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.

23 mai 2016 15:43:28
Comentarii

Nu asta am întrebat.

Maija Vilkina Maija Vilkina
23 mai 2016 18:30:18