Puncte:0

hook_mail_alter() nu elimină antetele Return-Path, Sender și Reply-To

drapel us

Vreau să elimin Calea de intoarcere, Expeditor, și Raspunde la anteturi din e-mailurile trimise. Încerc să obțin acest lucru folosind următorul cod, dar anteturile nu sunt eliminate din e-mail.

funcția mymodule_mail_alter(&$mesaj) {
  unset($message['headers']['Return-Path']);
  unset($message['headers']['Sender']);
  unset($message['headers']['Reply-To']);
}

ce fac greșit?

drapel fr
Atât de multe au rămas nespuse... cum ar fi ce plugin(e) @Mail utilizați.
drapel us
Folosim mailer PHP implicit al Drupal 8 și modulul SMTP. Încercăm să lansăm e-mailul de testare prin modulul SMTP după introducerea acreditărilor. Dar se pare că nu putem modifica anteturile din hook_mail_alter
imclean avatar
drapel my
De ce a fost respinsă editarea mea? Comentariul lui @secretsayan de mai sus adaugă informații esențiale care ar trebui să fie în întrebare. Îl restrânge la modulul SMTP, mai degrabă decât la nucleul Drupal.
Puncte:1
drapel us

Eliminarea valorilor din $message['headers'] nu este suficient, deoarece pluginul folosit pentru a trimite e-mailuri ar putea folosi și $message['Return-Path'], $message['Expeditorul'], sau $message['Răspunde la'] valoare pentru a construi antetele de e-mail. Clasa care este folosită ca plugin implicit pentru a trimite e-mailuri, PHPMail folosește următorul cod, dar alte plugin-uri ar putea folosi cod diferit.

$site_mail = $this->configFactory->get('system.site')->get('mail');
$additional_headers = isset($message['Return-Path']) && ($site_mail === $message['Return-Path'] || static::_isShellSafe($message['Return-Path'])) ? '-f' . $message['Return-Path'] : '';
$mail_result = @mail($message['to'], $mail_subject, $mail_body, $mail_headers, $additional_headers);

Deoarece pluginul de e-mail este folosit pentru a trimite e-mailul după hook_mail_alter() implementările sunt invocate și, deoarece pluginul de e-mail poate adăuga unul dintre aceste antete la discreția sa, nu există nicio garanție că e-mailul este trimis fără acele antete. Presupunând că pluginul de e-mail adaugă doar acele antete când $mesaj sau $message['headers'] conține o valoare pentru ei, următorul cod ar trebui să funcționeze.

funcția mymodule_mail_alter(&$mesaj) {
  unset($message['Return-Path']);
  unset($mesaj['Expeditorul']);
  unset($mesaj['Răspunde-La']);
  unset($message['headers']['Return-Path']);
  unset($message['headers']['Sender']);
  unset($message['headers']['Reply-To']);
}
drapel fr
Aș dori să adaug că RFC spune că anteturile nu fac distincție între majuscule și minuscule, deci, de exemplu, „unset($message['headers']['Return-Path']);" este insuficientă - cheia antetului ar putea fi „return-Path”, așa că dezactivarea nu ar face nimic. De asemenea, pluginul @Mail ar putea presupune o anumită carcasă, așa că, chiar dacă pluginul ar încerca să respecte alegerea dvs., cazul pe care îl utilizați l-ar putea declanșa.Concluzia este ceea ce apademo a spus mai sus: „Din moment ce pluginul de e-mail este folosit pentru a trimite e-mailul după ce implementările hook_mail_alter() sunt invocate... nu există nicio garanție că e-mailul este trimis fără aceste anteturi.”
Puncte:0
drapel my

The SMTP modulul stabilește întotdeauna anumite antete care nu pot fi desetate. Vezi următoarele rânduri din Drupal\smtp\Plugin\Mail\SMTPMailSystem:

$headers['Sender'] = $de la;
$headers['Return-Path'] = $de la;
$headers['Reply-To'] = $de la;

Acest lucru este pentru a-l face compatibil cu nucleul Drupal, care face același lucru din ceea ce pot spune.

Pentru mai mult control, puteți utiliza modulul PHPMailer SMTP în schimb, care dezactivează în mod explicit Calea de intoarcere antet de respectat RFC 5321.

De asemenea, nu face ipoteze despre ce antete suplimentare ar trebui să fie prezente (dincolo de cele necesare) și le stabilește doar dacă sunt adăugate în altă parte.

Următoarele ar funcționa dacă cazul antetelor se potrivește:

funcția mymodule_mail_alter(&$mesaj) {
  unset($message['headers']['Sender']);
  unset($message['headers']['Reply-To']);
}

În mod alternativ, următoarele ar anula anteturile, indiferent de caz:

funcția mymodule_mail_alter(&$mesaj) {
  $message['headers'] = array_change_key_case($message['headers']);
  unset($message['headers']['sender']);
  unset($message['headers']['reply-to']);
}

PHPMailer SMTP este doar pentru trimiterea de e-mailuri și nu face nicio formatare HTML, așa că ar trebui să utilizați și un modul precum MIME Mail pentru acel scop.

Disclaimer: Sunt autorul PHPMailer SMTP.

Puncte:-1
drapel jp

Utilizați în schimb funcția hook_mail($key, &$message, $params). De asemenea, veți avea nevoie de $key suplimentară, cred pentru a distinge pentru ce funcționalitate este trimis e-mailul.

Apoi, acest cârlig ar fi declanșat atunci când trimiteți e-mail-ul manual:

$trimite = adevărat;
$mailManager = \Drupal::service('plugin.manager.mail');
$rezultat = $mailManager->mail($modul, $key, $to, $langcode, $params, null, $send);

Aș sugera să utilizați Swiftmailer, omite toate lucrările manuale.

apaderno avatar
drapel us
Înțeleg că OP vrea să elimine acele anteturi din fiecare e-mail. `hook_mail()` nu ar ajuta cu asta.
apaderno avatar
drapel us
Chiar dacă OP a dorit să elimine antetele Return-Path, Sender și Reply-To din e-mailul trimis de un modul pe care l-a scris OP sau de un anumit modul, acest răspuns nu spune cum se poate realiza asta.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.