iT邦幫忙

0

phpmailer 的 $mail->Body 是否可以收納到一個文件中?

$mail->Body = '';
我發現我要寄信時,我會寫入一整個 html + css 語法,還會添加 php 語言
就像是:

$mail->Body = '
    <html>
    <head>
    '.$phpmailerCssStyle.'
    </head>

    <body>
    <div class="edm-layout">
      <img src="'.$host_url.'images/logo.png">
      <div class="line"></div>
    </div>

    <div class="edm-content">
      <div class="edm-hithere">
        嗨,'.$getUser['name'].' <br>XXX '.$prodTotal.' XXXXX<br>XXXXXX'.formatProductPrice($thisTotal).' XXX
      </div>';

        $row_distinct = mysqli_fetch_array($cako_id_distinct);

        $cako_data = $pdo->query(
          "SELECT XXXXXXX "
        );
        $mail->Body .= '
        <div class="edm-products">
          '.$row_distinct['XXXX'];
          
          //.......
          
          </body>
    </html>

類似那麼長的代碼
我是否可以把它收納到一個文件中,只要簡單引入就可以了?

$mail->Body = 'xxx.php'; or require_once...
有辦法實現嗎?
或其他方式?
至少我在這一頁的代碼不會看到這一長串的代碼.....

froce iT邦高手 1 級 ‧ 2018-08-29 15:11:50 檢舉
http://php.net/manual/en/function.file-get-contents.php
fillano iT邦超人 1 級 ‧ 2018-08-30 09:28:39 檢舉
用template來做啦。

2 個回答

0
犬千賀
iT邦新手 5 級 ‧ 2018-09-07 12:11:14
最佳解答

你想用PHP跑 可以用cURL

存成Template再用str_replace改 是比較好的做法((我覺得
有條件的話 我會寫

{#if xxx}//... {/#if}
{#while sss} // ... {/#while sss}

這之類的 match去抓來跑replace

1

簡單作法...

$str = file_get_contents("test.php");
$mail->Body = $str;
看更多先前的回應...收起先前的回應...
小松菜奈 iT邦研究生 4 級 ‧ 2018-08-29 16:04:53 檢舉
mail->Body = str;

還是

mail->Body = $str; 

忘了寫$str,一行也可以…

$mail->Body = file_get_contents("test.php");
小松菜奈 iT邦研究生 4 級 ‧ 2018-08-29 16:11:21 檢舉

如果裡面有夾帶 php 語言呢?假設我在A放上這個 file_get_contents,test.php可以吃到A的 php 嗎?

先試了有問題再說吧,要看情況,不確定你的情境是不是會有問題

小松菜奈 iT邦研究生 4 級 ‧ 2018-08-29 16:30:09 檢舉

試了,確實沒辦法吃到
'.$phpmailerCssStyle.'
'.$getUser['name'].'
類似這樣

wingkawa iT邦新手 4 級 ‧ 2018-08-29 16:32:19 檢舉

幫補充:
應該是吃不到,
吃不到變數的話,記得以前有用很笨的方法,先定義好有哪些變數再取代掉
大概像這樣

test.php:

Hello {{#userName}} !;

mail.php:

$userName = 'asys0512';
$str = file_get_contents("test.php");
$newStr = str_replace("{{#userName}}", $userName, $str);
小松菜奈 iT邦研究生 4 級 ‧ 2018-08-29 16:35:14 檢舉

就算把 sql 丟進去,也沒辦法吃,會印成純 HTML

在外部處理,再用str_replace取代就好,這不是什麼困難的問題,有用過smarty或mvc就知道,是一樣的原理

小松菜奈 iT邦研究生 4 級 ‧ 2018-08-29 16:53:36 檢舉

了解,想問如果是多個 str_replace 呢?以及 test.php 裡面如果有牽涉 while 呢

就連while都拉到外部來做,做完再replace,多個 str_replace參考以下作法…
https://blog.csdn.net/CCC65A8780D2C/article/details/53138441

我要發表回答

立即登入回答