最近公司接了个销售跟踪的单子---主要是php+mysql+linux的网络应用!其中有个功能----邮件发送设计,到现在还没有完全解决。
在邮件发送中,我们遇到smtp服务器兼容问题,这个问题困扰了我们很久。
1.邮件发送设计思想和主要设计代码类:
class sendmail
{
var $lastmessage; //记录最后返回的响应信息
var $lastact; //最后的动作,字符串形式
var $welcome; //用在HELO后面,欢迎用户
var $smtp; //smtp服务器
var $smtp_username;//用户名
var $smtp_password;//用户密码
var $port; //smtp端口号
var $fp; //socket句柄
var $from; //发送者
var $debug; //是否显示调试信息
var $isSendHtml;//是否发送HTML邮件
//-------------------------------------------------
// 构造类
//-------------------------------------------------
function sendmail()
{
//使用mail.airwap.com.cn发送邮件,可以正常发 送
$this->welcome="Free";
$this->smtp="mail.airwap.com.cn";
$this->smtp_username="free";
$this->smtp_password="123456";
$this->from="Free@airwap.com.cn";
/*
//使用smtp.21cn.com发送邮件,不可以正常发送
$this->welcome="Free";
$this->smtp="smtp.21cn.com";
$this->smtp_username="77longxiao";
$this->smtp_password="19888";
$this->from="smtp.21cn.com";
*/
$this->debug=false;
$this->isSendHtml=true;
$this->lastmessage="";
$this->lastact="";
$this->port="25";
}
.............
}
2.问题分析:根据上面的设计思想,用不同的smtp服务器在原理上,应该是可以正常发送email,但实际应用中出现了问题:
1)使用mail.airwap.com.cn发送邮件,可以正常发送,发送成功的信息:
>> Connect to SMTP server : mail.airwap.com.cn
<< 220 mail.airwap.com.cn ESMTP Sendmail 8.12.3/8.12.3; Mon, 7 Oct 2002 14:16:35 +0800 (CST)
>> EHLO Free
<< 250-mail.airwap.com.cn Hello [218.16.74.38], pleased to meet you
<< 250-ENHANCEDSTATUSCODES
<< 250-PIPELINING
<< 250-EXPN
<< 250-VERB
<< 250-8BITMIME
<< 250-SIZE
<< 250-DSN
<< 250-ETRN
<< 250-AUTH LOGIN PLAIN
<< 250-DELIVERBY
<< 250 HELP
>> AUTH LOGIN
<< 334 VXNlcm5hbWU6
>> ZnJlZQ==
<< 334 UGFzc3dvcmQ6
>> MTk4ODg=
<< 235 2.0.0 OK Authenticated
>> 认证成功可以发送邮件了
>> MAIL FROM:
Free@airwap.com.cn
<< 250 2.1.0
Free@airwap.com.cn... Sender ok
>> RCPT TO:
<< 250 2.1.5 ... Recipient ok
>> DATA
<< 354 Enter mail, end with "." on a line by itself
>> To:
tan-jian@163.net
From:
Free@airwap.com.cn
Content-Type: text/html; charset=gb2312
Subject:
Brainy@airwap.com.cn
test chinese
.
>> QUIT
<< 250 2.0.0 g976GZTE002789 Message accepted for delivery
发送成功!
2)使用smtp.21cn.com发送邮件,不可以正常发送,错误信息提示!
>> Connect to SMTP server : smtp.21cn.com
<< 220 21cn.com SMTP Server of AIMC 2.9.5.2 (C).
>> HELO esales
<< 250 21cn.com, unknown.host<127.0.0.1> okay (DELAYED).
>> MAIL FROM:
77longxiao@21cn.com
<< 250 <77longxiao@21cn.com>, sender ok.
>> RCPT TO:
<< 553 Relay restriction.
发送失败!
3.smtp服务器比较:
mail.airwap.com.cn是一家公司的架设的邮件服务器,限制不是很多
smtp.21cn.com是标准的smtp服务器,限制较多
如果是smtp服务器的限制问题,但在java邮件技术应用中,同样使用他们,都可以正常发送email,所以我们感到困惑
4.问题保守的解决方案:就是采用本地的smtp服务器发送email(运行发送邮件的程序的linux系统装有smtp服务器,也就是将限制调到最低),而不是采用外界的smtp服务器,这种方案,我还没有测试过!理论上是可以通过的!
问题综合:
1.采用上述的设计思路,没有很好的控制smtp.21cn.com服务器接收信息的具体情况?如果能通过程序控制,问题应该可以解决!但如果程序无法控制,那么这种设计方案要修改
2.针对同一个smtp服务器:smtp.21cn.com在设计java应用中(主要应用activation.jar和mail.jar包)可以正常发送,我有个疑问,是不是php核心有限制或者存在bug
3.求助php邮件发送应用的成功案例
谢谢各位高手的指教!