用户
 找回密码
 入住 CI 中国社区
搜索
查看: 4659|回复: 5
收起左侧

[HELP] 求助关于异步发送邮件的问题

[复制链接]
发表于 2009-11-25 21:28:41 | 显示全部楼层 |阅读模式
我在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支持的现成方案可以直接切到异步发送。

或者,是我的配置问题?
 楼主| 发表于 2009-11-25 21:35:27 | 显示全部楼层
UDATE
我尝试了直接写IP,以避免域名解析的问题,但是还是会很慢,如果没有send(),页面执行则会飞快。
发表于 2009-11-25 22:19:01 | 显示全部楼层
首先,PHP 很难实现异步操作,因为 PHP 很难做多线程。
楼主可能需要一个邮件发送队列,而这个就是 PHP 做不到的了,需要其他软件配合,比如 postfix
PHP 能做到的 CI 也能做,方法都是一样的。
 楼主| 发表于 2009-11-25 22:37:44 | 显示全部楼层
感谢Hex热情的回复:)

我翻到一个资料:
http://www.phplover.cn/post/phpyibugongzuotishengyonghutiyan.html

PHP本身似乎是通过fsock来作这一点的,但是要整个他的代码和CI一起,对我来说还是困难了点……

我翻看了CI的Mail类库,其实里面的smtp_connect方法也是使用fsock打开的,但是不知道为啥在一个方法里面插入send()就是会引发停顿……:(
 楼主| 发表于 2009-11-25 23:09:16 | 显示全部楼层
咳咳,好了,我找了一个简单但是可行的办法来搞定这一点:我把要发送的数据放在session里面暂时缓存,然后用fsock简单打开ci的一个控制器,这个控制器专门负责发送特定的邮件,数据用后销毁……
发表于 2009-11-25 23:13:57 | 显示全部楼层
呵呵,这方法不错,可以试试

本版积分规则