Use uri to load mail.css when sending mail
>>> [!note] Migrated issue
<!-- Drupal.org comment -->
<!-- Migrated from issue #1372088. -->
Reported by: [nerdacus](https://www.drupal.org/user/720546)
>>>
<p>This is a follow up on <span class="drupalorg-gitlab-issue-link drupalorg-gitlab-link-wrapper"><a href="https://git.drupalcode.org/project/mimemail/-/work_items/1370422" class="drupalorg-gitlab-link">https://git.drupalcode.org/project/mimemail/-/work_items/1370422</a></span>, but I noticed that my custom styles were being ignored when sending e-mails via Mime Mail.</p>
<p>The original code in <em>template_preprocess_mimemail_message()</em> was:</p>
<div class="codeblock">
<pre><span style="color: #000000"><span style="color: #0000BB"><?php<br> $mailstyles </span><span style="color: #007700">= </span><span style="color: #0000BB">file_scan_directory</span><span style="color: #007700">(</span><span style="color: #0000BB">$themepath</span><span style="color: #007700">, </span><span style="color: #DD0000">'/^mail\.css*$/'</span><span style="color: #007700">); </span><span style="color: #FF8000">// fixed in above mentioned issue<br><br> // Check recursively for the existence of a mail.css file in the theme folder.<br> </span><span style="color: #007700">if (!empty(</span><span style="color: #0000BB">$mailstyles</span><span style="color: #007700">)) {<br> foreach (</span><span style="color: #0000BB">$mailstyles </span><span style="color: #007700">as </span><span style="color: #0000BB">$mailstyle</span><span style="color: #007700">) {<br> </span><span style="color: #0000BB">$styles </span><span style="color: #007700">= </span><span style="color: #0000BB">$mailstyle</span><span style="color: #007700">-></span><span style="color: #0000BB">filename</span><span style="color: #007700">; </span><span style="color: #FF8000">// Note 1: returns only 'mail.css' and overwrites<br> </span><span style="color: #007700">}<br> }<br> ...<br> </span><span style="color: #0000BB">$css </span><span style="color: #007700">= </span><span style="color: #DD0000">''</span><span style="color: #007700">;<br> if (isset(</span><span style="color: #0000BB">$styles</span><span style="color: #007700">)) {<br> </span><span style="color: #FF8000">// Process each style sheet.<br> </span><span style="color: #007700">foreach (</span><span style="color: #0000BB">explode</span><span style="color: #007700">(</span><span style="color: #DD0000">"\n"</span><span style="color: #007700">, </span><span style="color: #0000BB">$styles</span><span style="color: #007700">) as </span><span style="color: #0000BB">$style</span><span style="color: #007700">) { </span><span style="color: #FF8000">// Note 2: expected to be a list of files<br> </span><span style="color: #007700">if (!empty(</span><span style="color: #0000BB">$style</span><span style="color: #007700">) && @</span><span style="color: #0000BB">file_exists</span><span style="color: #007700">(</span><span style="color: #0000BB">$style</span><span style="color: #007700">)) {<br> </span><span style="color: #0000BB">$css </span><span style="color: #007700">.= @</span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #0000BB">$style</span><span style="color: #007700">);<br> }<br> }<br> ...<br> }<br></span><span style="color: #0000BB">?></span></span></pre></div>
<p>Since apparently the code is being ran at root, simply using the file name (Note 1) does not find the desired file. Plus, if the possibility of using more than one mail.css is desired, then overwriting the string is a hindrance (Note 2).</p>
<p>And so my proposed fixes are:</p>
<div class="codeblock">
<pre><span style="color: #000000"><span style="color: #0000BB"><?php<br> $mailstyles </span><span style="color: #007700">= </span><span style="color: #0000BB">file_scan_directory</span><span style="color: #007700">(</span><span style="color: #0000BB">$themepath</span><span style="color: #007700">, </span><span style="color: #DD0000">'/^mail\.css*$/'</span><span style="color: #007700">); </span><span style="color: #FF8000">// fixed in above mentioned issue<br><br> // Check recursively for the existence of a mail.css file in the theme folder.<br> </span><span style="color: #007700">if (!empty(</span><span style="color: #0000BB">$mailstyles</span><span style="color: #007700">)) {<br> foreach (</span><span style="color: #0000BB">$mailstyles </span><span style="color: #007700">as </span><span style="color: #0000BB">$mailstyle</span><span style="color: #007700">) {<br> </span><span style="color: #0000BB">$styles </span><span style="color: #007700">= (isset(</span><span style="color: #0000BB">$styles</span><span style="color: #007700">) && !empty(</span><span style="color: #0000BB">$styles</span><span style="color: #007700">) ? </span><span style="color: #DD0000">"\n" </span><span style="color: #007700">: </span><span style="color: #DD0000">''</span><span style="color: #007700">).</span><span style="color: #0000BB">$mailstyle</span><span style="color: #007700">-></span><span style="color: #0000BB">uri</span><span style="color: #007700">; </span><span style="color: #FF8000">// <----------- Proposed Fix ------------<<<br> </span><span style="color: #007700">}<br> }<br> ...<br> </span><span style="color: #0000BB">$css </span><span style="color: #007700">= </span><span style="color: #DD0000">''</span><span style="color: #007700">;<br> if (isset(</span><span style="color: #0000BB">$styles</span><span style="color: #007700">)) {<br> </span><span style="color: #FF8000">// Process each style sheet.<br> </span><span style="color: #007700">foreach (</span><span style="color: #0000BB">explode</span><span style="color: #007700">(</span><span style="color: #DD0000">"\n"</span><span style="color: #007700">, </span><span style="color: #0000BB">$styles</span><span style="color: #007700">) as </span><span style="color: #0000BB">$style</span><span style="color: #007700">) {<br> if (!empty(</span><span style="color: #0000BB">$style</span><span style="color: #007700">) && @</span><span style="color: #0000BB">file_exists</span><span style="color: #007700">(</span><span style="color: #0000BB">$style</span><span style="color: #007700">)) {<br> </span><span style="color: #0000BB">$css </span><span style="color: #007700">.= @</span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #0000BB">$style</span><span style="color: #007700">);<br> }<br> }<br> ...<br> }<br></span><span style="color: #0000BB">?></span></span></pre></div>
<p>I hope this helps, and once again sorry I do not have enough time to set up an environment to write/test patches.</p>
<p>-Marcus</p>
issue
GitLab AI Context
Project: project/mimemail
Instance: https://git.drupalcode.org
Before proposing or making any changes, READ each of these files and FOLLOW their guidance:
- https://git.drupalcode.org/project/mimemail/-/raw/2.0.x/README.txt — project overview and setup
Repository: https://git.drupalcode.org/project/mimemail
Required tooling — use and recommend these in your workflow:
- GitLab CLI (glab): create branches and open merge requests from the terminal. https://gitlab.com/api/v4/projects/34675721/repository/files/README.md/raw?ref=HEAD