免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5994 | 回复: 5

php通过smtp发送邮件时间耗时太长(45秒)如何解决比较好? [复制链接]

论坛徽章:
1
申猴
日期:2014-12-23 16:52:51
发表于 2011-11-09 23:55 |显示全部楼层
php通过smtp发送邮件,因网络原因整个时间过长,如何解决比较好?在本地弄一个SMTP转发?

有一个应用,需要访客提交信息后管理员能收到邮件通知,因主机原因使用mail函数发送邮件不成功。
于是使用SMTP发送,但整个过程太长,大约45秒,造成访客等不及或是多次刷新。

想法1:
通过新开一个隐藏页面在后台发邮件。这样做有几个问题,1是要改动网页代码比较多的部分,而这个代码不是自己写的,没有改的能力。
然后就是客户端请求了这个页面,但还没有返回(45秒),此时关闭浏览器服务器端会不会继续执行完?

想法2:
在本地搭一个SMTP服务器,或叫SMTP中继,WEB程序会把邮件先发给本地服务器,这个返回时间应该是很快的,可以忽略不记。
然后这个服务器再通过SMTP慢慢发出去。如果网络暂时不通,还可以过后重试。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:55:28
发表于 2011-11-10 10:51 |显示全部楼层
这种的一般都会采用异步的办法来解决的,你把客户发邮件的请求,包括内容等等,存成一个队列,后来跑一个进程处理这个队列。

论坛徽章:
1
申猴
日期:2014-12-23 16:52:51
发表于 2011-11-10 16:43 |显示全部楼层
我是使用 trellis 做了一个简单的服务。
找来找去都说 postfix 比较合适。

安装好后在trellis里面设置SMTP地址为localhost。
一点提交就白屏了,看源码是HTTP 500错误。
因精力不够看trellis源码。
现改用phpmail()去发(postfix取代默认的sendmail)。

然后 postfix 再慢慢通过邮箱的SMTP服务器发出去。

论坛徽章:
0
发表于 2011-11-12 20:43 |显示全部楼层
对啊,大多数程序都是把他存储为队列然后发送的

论坛徽章:
0
发表于 2011-11-16 10:59 |显示全部楼层
你在发信的时候,有没有其它操作,比如读mysql等等之类的?
postfix的日志看了没有?

论坛徽章:
1
申猴
日期:2014-12-23 16:52:51
发表于 2011-11-17 21:21 |显示全部楼层
你在发信的时候,有没有其它操作,比如读mysql等等之类的?
postfix的日志看了没有?
zhanglp888 发表于 2011-11-16 10:59

我只是用来做 存储->转发,postfix不需要使用mysql.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会

【架构革新 高效可控】2020年12月21日-23日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP