求助关于异步发送邮件的问题
我在Controller里面写了如下的邮件发送:function create(){
$this->load->library("email");
$this->email->from("user@domain.com","Base");
$this->email->to($topicData->username ."@domain.com");
$this->email->subject("title");
$this->email->message($replybody);
$this->email->send();
redirect("topic/");
}
config文件内容:
$config["protocol"] = "smtp";
$config["smtp_host"] = "domain.com";
$config["smtp_user"] = "user";
$config["smtp_pass"] = "***********";
$config["charset"] = "utf-8";
$config["smtp_timeout"] = "30";
$config["wordwrap"] = "FALSE";
$config["wrapchars"] = "20000";
$config["newline"] = "\r\n";
发送是成功的。
然而我的问题在于,执行的时候总是要等send()完成才能执行后面的跳转,这导致很高的延时,等半天才能进去下一个操作,否则页面就一直死着。我翻查了资料,但是没有CI支持的现成方案可以直接切到异步发送。
或者,是我的配置问题? UDATE
我尝试了直接写IP,以避免域名解析的问题,但是还是会很慢,如果没有send(),页面执行则会飞快。 首先,PHP 很难实现异步操作,因为 PHP 很难做多线程。
楼主可能需要一个邮件发送队列,而这个就是 PHP 做不到的了,需要其他软件配合,比如 postfix
PHP 能做到的 CI 也能做,方法都是一样的。 感谢Hex热情的回复:)
我翻到一个资料:
http://www.phplover.cn/post/phpyibugongzuotishengyonghutiyan.html
PHP本身似乎是通过fsock来作这一点的,但是要整个他的代码和CI一起,对我来说还是困难了点……
我翻看了CI的Mail类库,其实里面的smtp_connect方法也是使用fsock打开的,但是不知道为啥在一个方法里面插入send()就是会引发停顿……:( 咳咳,好了,我找了一个简单但是可行的办法来搞定这一点:我把要发送的数据放在session里面暂时缓存,然后用fsock简单打开ci的一个控制器,这个控制器专门负责发送特定的邮件,数据用后销毁…… 呵呵,这方法不错,可以试试
页:
[1]