2017-06-19 140 views
3

我正在使用Codeigniter 3,并在我的网站上有一个简单的联系表单。这个联系表单在我的localhost XAMPP环境中完美工作,但不在我的共享网络托管(BT)上。Codeigniter SMTP无法连接

我无法解决问题是什么,我一直在与他们的支持联系,显然如果电子邮件帐户能够通过电子邮件客户端发送和接收电子邮件(它可以),他们不提供任何额外的支持:/

我能够登录到Office365使用此帐户发送和接收电子邮件。 Office365中的smpt设置是;

Server name: smtp.office365.com 
Port: 587 
Encryption method: STARTTLS 

我现在的代码如下;

$config['protocol']  = 'smtp'; 
    $config['smtp_host'] = 'smtp.office365.com'; // also tried tls://smtp.office365.com 
    $config['smtp_port'] = '587'; 
    $config['smtp_user'] = '[email protected]'; 
    $config['smtp_pass'] = 'MyPass'; 
    $config['smtp_crypto'] = 'tls'; 
    $config['mailtype']  = 'html'; 
    $config['wordwrap']  = TRUE; 
    $config['charset'] = 'iso-8859-1'; 
    $config['newline'] = "\r\n"; 

在localhost邮件发送,没有问题。在现场Web主机上,我收到以下错误;

消息:的fsockopen():无法连接到smtp.office365.com:587 (连接超时)

我读过这个问题可能与未启用的OpenSSL ,但网络主机已确认它已启用。我也使用下面的代码检查了加载的扩展;

echo "<pre>"; 
    print_r(get_loaded_extensions()); 
    echo "</pre>"; 

返回;

Array 
(
    [0] => Core 
    [1] => date 
    [2] => ereg 
    [3] => libxml 
    [4] => openssl 
    [5] => pcre 
    etc 
    etc 
) 

我检查过我能够使用下面的代码连接到smtp服务器;

$fp = fsockopen('tcp://smtp.office365.com', 587, $errno, $errstr, 10); 
echo fgets($fp, 128); 
var_dump($fp, $errno, $errstr); 
fclose($fp); 

在我的本地主机上,我收到以下消息;

220 VI1PR0602CA0001.outlook.office365.com微软ESMTP邮件服务 准备在星期一,2017年6月19日10时19分10秒0000资源(55)的类型(流) INT(O)的字符串(0 )“”

在实时服务器上,我收到了这个;

消息:的fsockopen():无法连接到TCP ://smtp.office365.com:587(连接超时)

我曾尝试Gmail的SMTP,这同样适用,但在本地不在远程Web主机上。

还有什么我应该尝试,或要求我的网络主机检查?目前我没有想法。

任何帮助表示赞赏。

回答

5

我不知道这是否会在你的情况下工作,但我有同样的问题。它使用宅基地在我的本地发展上工作,但在东道国它的错误。我做了什么来解决它,是我改变协议的价值邮件。

试图改变你的代码:

$config['protocol']  = 'smtp'; 

这样:

$config['protocol']  = 'mail'; 
+0

惊人@winnie damayo - 那工作!非常感谢你。为什么这个工作和我的原始方法没有?根据Codeigniter docs的说法,它使用'$ config ['protocol'] ='smtp''我一直试图解决这个问题的日子,再次感谢:)如果你可以详细说明答案是好的! –