【批次规划】
考虑到以下因素:
AmazonSES默认24小时发送邮件上限为10000封
电邮地址库不定时更新,需要严谨的排重
同一个电邮地址库分多次发送,且不重复发送
因此如下操作:
一个项目只管理一个电邮地址库,新电邮地址只在这个库中更新
设置config.php:每批次10000封,每24小时一个批次。
# define the amount of emails you want to send per period. If 0, batch processing # is disabled and messages are sent out as fast as possible define("MAILQUEUE_BATCH_SIZE",10000); # define the length of one batch processing period, in seconds (3600 is an hour, 86400 is a day) define("MAILQUEUE_BATCH_PERIOD",86400);
【安装配置】
打开 phplist-X.X.x/public_html 会看到里面的 lists 文件夹。
修改配置文件 /lists/config/config.php
首先是语言和数据库的基本设置.
# 这个是设置前台普通用户界面的语言,管理界面的语言可以在后台自由选择 $language_module = “english.inc”; # Mysql database server 数据库地址,一般情况这儿不需更改 $database_host = “localhost”; # 数据库名 $database_name = “phplistdb”; # 数据库用户名 $database_user = “phplist”; # 用户密码 $database_password = ‘phplist'; # if you use multiple installations of PHPlist you can set this to # something to identify this one. it will be prepended to email report # subjects 这项没有试过 $installation_name = ‘PHPlist'; # 表前缀 $table_prefix = “phplist_”; #用户表前缀 # read README.usertables for more information $usertable_prefix = “phplist_user_”; # 安装地址和管理界面地址 $pageroot = ‘/lists'; $adminpages = ‘/lists/admin';
bounces 处理设置
“Bounces” 处理是 phplist 的一个强大的功能, Bounce 是制一些邮件因为某些原因不能递送而返回的信息.这些原因可能是:收件人信箱满了,有限公司地址可能不再生效或暂时关闭,或者邮件地址被拼错等 等.Bounce 是不同于自动回复的,For more info, see this Wikipedia article on bounces[http://en.wikipedia.org/wiki/Bounce_message].
消息邮箱
在 config.php 文件里,你可以特别设置一个叫”消息信箱地址”的邮箱地址.这个地址将包含在邮件头信息的”Return-Path”里.
他将可以用来接受 bounces,但是首先你得确认已经建立了这个邮箱地址而且他工作正常.还有不要忘记去掉 “$message_envelope” 前面的确”#”
$message_envelope = “[email protected]”;
Bounce threshold
这是一个附加的设定,规定一个邮箱地址连续几次发送失败后,系统自动将该地址屏蔽(unconfirmed)
$bounce_unsubscribe_threshold = 5;
发送速率设置
如果phplist运行时占用大量CPU资源,肯能导致主机商方面的措施。因此有必要限制发出的邮件的数量
# Send a batch of 360 messages per batch period: # 每批次发出360封信 define(“MAILQUEUE_BATCH_SIZE”,360); # batch period is set to 3600 seconds (=1 hour): # 一批次为 3600 秒(1小时) define(“MAILQUEUE_BATCH_PERIOD”,3600); # Pause between messages (in seconds) to avoid overloading the server: # 每封信发送间隔1秒,以避免服务器过载。 define(‘MAILQUEUE_THROTTLE’,1);
【整合phpList和Amazon SES】
phpList从2011年年初的开发版本2.11.6开始支持Amazon SES,目前开发版本是2.11.10。注意,稳定版本是2.10.19,不要使用这个。
下载地址:http://sourceforge.net/projects/phplist/files/phplist-development/
解压缩后,我们需要安装的程序文件位置在 phplist-2.11.10.zip/phplist-2.11.10/public_html/lists/
打开 config/config.php 编辑:
在文件中直接插入(注意,复制的时候可能单字节单引号串换为双字节的单引号,导致phpList出现空白页):
define('PHPMAILER',0); define('AWS_ACCESSKEYID','Your Access Key ID'); define('AWS_SECRETKEY','Your corresponding secret key'); define('AWS_POSTURL','http://email.us-east-1.amazonaws.com/');
注意:
- 直接插入config.php即可,这几项参数phpList的默认config文件中是没有对应的。
- 这部分config.php修改仅限于Amazon SES适配,其他设置参考phpList安装步骤。
- AWS_ACCESSKEYID和AWS_SECRETKEY,是通过申请“Request Production Access”之后获得的,而不是在“SMTP Settings”中申请“Create My SMTP Credentials”所获得的。
- Amazon SES正常工作需要PHP支持curl。
- phpList中所使用的webmaster、sender、bounce、no-reply等用上的电邮地址必须通过“Verified Senders”》“Email Addresses”的验证。
- Amazon SES不支持附件,所以必须去除邮件底部的phpList图标,define(“EMAILTEXTCREDITS”,1);。
申请AWS的AWSAccessKeyId(AWS Access Key ID)
- 打开Amazon Associates
- 点击按钮“Sign Up Now”
- 在页面中庸Amazon账号登录
- 点击“Manage Your Account”
- 点击“Access Identifiers”栏中的“Click here”
- 在“Access Credentials”的第一个Tab就是“Access Keys”
只去除html邮件中的版权图片
phpList默认设置,如果发送的是html的邮件,版权信息是一个Logo图片,这个可以在配置文件中去掉,也就是config.php 文件,找到:
define("EMAILTEXTCREDITS",0);
改成:
define("EMAILTEXTCREDITS",1);
这样发送HTML邮件的时候就不会加上图片版权信息了,但是会替换成文字的版权信息。也就是发送TEXT/HTML邮件都会有一个文字的版权信息:
powered by phplist v 2.XX.XX
去除所有版权信息
打开文件 lists/admin/sendemaillib.php 做如下修改:
找到:
$text["signature"] = "\n\n--\nPowered by PHPlist, www.phplist.com --\n\n";
清除中间的值,变为:
$text["signature"] = "";
然后再找到:
if (!EMAILTEXTCREDITS) { ….. } else { $html["signature"] = $PoweredByText; }
在这段代码的下面紧接着加入一行:
$html['signature'] = '';
将改好的文件上传到网站中,发送的邮件就不会加入版权信息了。
Amazon-SES-Mailer-PHP(仅供参考,还没明白这个怎么用)
官网地址:http://github.com/geoloqi/Amazon-SES-Mailer-PHP
按照步骤:
执行:
pear channel-discover pear.amazonwebservices.com
返回成功:
Adding Channel "pear.amazonwebservices.com" succeeded Discovery of channel "pear.amazonwebservices.com" succeeded
执行:
pear install aws/sdk
返回错误:
Unknown remote channel: guzzlephp.org/pear aws/sdk requires package "channel://guzzlephp.org/pear/Guzzle" (version >= 3.0.3) No valid packages found install failed
这个问题可能是PEAR版本过低造成的。
查询PEAR版本:
pear -V
返回结果:
PEAR Version: 1.9.0
那么升级:
pear channel-update pear.php.net pear upgrade pear
然后继续:
pear channel-discover guzzlephp.org/pear
返回成功:
Adding Channel "guzzlephp.org/pear" succeeded Discovery of channel "guzzlephp.org/pear" succeeded
开始安装AWS SDK:
pear install aws/sdk
返回错误:
Unknown remote channel: pear.symfony.com guzzle/Guzzle requires package "channel://pear.symfony.com/EventDispatcher" (version >= 2.1.0) aws/sdk requires package "guzzle/Guzzle" (version >= 3.0.3) No valid packages found install failed
执行:
pear channel-discover pear.symfony.com
返回成功:
Adding Channel "pear.symfony.com" succeeded Discovery of channel "pear.symfony.com" succeeded
再尝试安装AWS SDK:
pear install aws/sdk
返回成功:
downloading sdk-2.4.0.tgz ... Starting to download sdk-2.4.0.tgz (1,588,738 bytes) ..........done: 1,588,738 bytes downloading Guzzle-3.7.0.tgz ... Starting to download Guzzle-3.7.0.tgz (313,463 bytes) ...done: 313,463 bytes downloading EventDispatcher-2.3.1.tgz ... Starting to download EventDispatcher-2.3.1.tgz (11,198 bytes) ...done: 11,198 bytes install ok: channel://pear.symfony.com/EventDispatcher-2.3.1 install ok: channel://guzzlephp.org/pear/Guzzle-3.7.0 install ok: channel://pear.amazonwebservices.com/sdk-2.4.0