phplist常見問題
要大量寄發電子報信件,以收件者為gmail信箱為範例,可參考Google大量寄件者指南,以提高會員可以正常收到電子報的機率。
其中於phplist可執行與常見的問題,底下以域名sample.url.com.tw與其主機IP位址 192.168.1.100為示範資料。
1. 郵件主機IP必須要設定DNS反解 :
100.1.168.192.in-addr.arpa name = sample.url.com.tw
2. 若有多個帳號時發信帳號需區分用途:
如會員週刊使用news@sample.url.com.tw,宣傳促銷信件使用edm@sample.url.com.tw。
3. 勿假冒其他網域來發送信件:
例如在phplist中使用gmail.com的email帳號來發送信件。
4. 降低信件被歸類為垃圾信的機率:
可藉由藉由其他官網/FB/IG/LINE等其他管道,告知會員可藉由以下方式:
*請會員將發信帳號,例如enews@sample.url.com.tw,加入Gmail通訊錄中。
*萬一該信件被歸類於垃圾信件,透過點選該封信件"回報為非垃圾郵件"的按鈕。
5. 維持郵件收件人的名單有效度:
為了減少郵件收件人將你的信件回報為垃圾郵件的可能性,建議收件人名單須注意以下幾點:
a.需讓收件人同意願意接收你的信件,並確認收信email位址無誤。
b.可定時發信給訂戶,若收件者並未讀取您的郵件,或是遭到退信,建議將這些email從訂閱清單中移除。
c.使用List-Unsubscribe-Post或是List-Unsubscribe的檔頭設定支援取消訂閱的功能。
d.發送信件頻率的建議緩慢提高,避免短時間內一次發送大量信件。
6. 設定SPF與DKIM驗證機制,避免網域遭人冒用發信
設定SPF:
設定一筆該網域的DNS的TXT記錄,例如sample.url.com.tw,其設定值為"v=spf1 a mx ip4:192.168.1.100"
若已經有存在既有的SPF的TXT記錄,將ip4:192.168.1.100這段設定整合進去即可。
設定DKIM:
產生公鑰和私鑰,需1024位元以上的長度
openssl genrsa -out dkim.sample.url.com.tw.pem 1024
openssl rsa -in dkim.sample.url.com.tw.pem -pubout > dkim.sample.url.com.tw.pub
上傳私鑰(pem) dkim.sample.url.com.tw到phplist的config目錄中,
修改檔案擁有者為網站使用者權限,如
chown daemon.daemon dkim.sample.url.com.tw.pem
將公鑰(pub)的值寫入到DNS的TXT記錄中:
host為dkim._domainkey.sample.url.com.tw
其值為k=rsa; p=公鑰內容
修改phplist目錄中的admin/class.phplistmailer.php檔案,以支援dkim相關設定:
在以下這段程式碼之後
public function __construct($messageid, $email, $inBlast = true, $exceptions = false)
{
parent::__construct($exceptions);
$this->addCustomHeader('X-phpList-version', VERSION);
$this->addCustomHeader('X-MessageID', $messageid);
$this->addCustomHeader('X-ListMember', $email);
if (GOOGLE_SENDERID != '') {
$this->addCustomHeader('Feedback-ID', "$messageid:".GOOGLE_SENDERID);
}
加上
// For DKIM
$this->DKIM_domain = 'sample.url.com.tw';
$this->DKIM_selector = 'dkim';
$this->DKIM_private = '私鑰檔案所在的完整路徑';
$this->DKIM_passphrase = '';
$this->DKIM_identity = 'enews@sample.url.com.tw';
7. 調整發信頻率:
修改admin/init.php檔案中:
//每批次發送信件數量
if (!defined('MAILQUEUE_BATCH_SIZE')) {
define('MAILQUEUE_BATCH_SIZE', 1000);
}
//每批次的週期時間長度,單位為秒
if (!defined('MAILQUEUE_BATCH_PERIOD')) {
define('MAILQUEUE_BATCH_PERIOD', 3600);
}
//發送每封信的時間間隔,單位為秒
if (!defined('MAILQUEUE_THROTTLE')) {
define('MAILQUEUE_THROTTLE', 0.5);
}
8. 關閉phplist logo與替代簽名檔文字:
修改admin/sendemaillib.php
註解這行
//$text['signature'] = "\n\n-- powered by phpList, www.phplist.com --\n\n";
複製一行內容空白的來替代
$text['signature'] = "";
在這段的下方
if (!EMAILTEXTCREDITS) {
$html['signature'] = $PoweredByImage; //'<div align="center" id="signature"><a href="https://www.phplist.com"><img src="powerphplist.png" width=88 height=31 title="Powered by PHPlist" alt="Powered by PHPlist" border="0" /></a></div>';
// oops, accidentally became spyware, never intended that, so take it out again :-)
$html['signature'] = preg_replace('/src=".*power-phplist.png"/', 'src="powerphplist.png"', $html['signature']);
} else {
$html['signature'] = $PoweredByText;
}
多加一行$html['signature'] = "";
再修改config/config_extended.php
將這EMAILTEXTCREDITS與AGETEXTCREDITS兩個數值改為1
// to be 1, the HTML emails will then only add a line of text as signature
define('EMAILTEXTCREDITS', 1);
// if you want to also remove the image from your public webpages
// set the next one to 1, and the pages will only include a line of text
define('PAGETEXTCREDITS', 1);
9. 匯入大於1MB的名單檔案:
需要修改設定檔參數 config/config.php,其中的
define("IMPORT_FILESIZE",2);
才能上傳超過預設的1MB(預設)
10. 開啟電子報夾帶附檔功能:
修改admin/init.php:
將ALLOW_ATTACHMENTS設定值修改為1
if (!defined('ALLOW_ATTACHMENTS')) {
define('ALLOW_ATTACHMENTS', 1);
}
修改config/config_extended.php:
將ALLOW_ATTACHMENTS與FILESYSTEM_ATTACHMENTS修改為1
// set this to 1 to allow adding attachments to the mails
// caution, message may become very large. it is generally more
// acceptable to send a URL for download to users
// using attachments requires PHP 4.1.0 and up
define('ALLOW_ATTACHMENTS', 1);
// when using attachments you can upload them to the server
// if you want to use attachments from the local filesystem (server) set this to 1
// filesystem attachments are attached at real send time of the message, not at
// the time of creating the message
define('FILESYSTEM_ATTACHMENTS', 1);