要大量寄發電子報信件,以收件者為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);