我有此代码:
$domain = 'massag.com';
$hosts = array();
$mxweights = array();
getmxrr($domain, $hosts, $mxweights);
var_dump($hosts);
var_dump($mxweights);
$host = gethostbynamel($hosts[0])[0];
var_dump($host);
$f = @fsockopen($host, 25, $errno, $errstr, 10);
if(!$f) {
var_dump('NOT CONNECTED');
}
它没有连接到smtp服务器,但是当我使用命令
smtp:217.196.209.9
在mxtoolbox.com上已连接。
我在用PHP代码做错什么了吗?
我已经尝试将$host
替换为smtp.massag.com,但没有帮助。
答案 0 :(得分:1)
使用dig
查询所提供的IP或其反向DNS,它表明没有MX记录,因此可能会出现错误。
dig -x 217.196.209.9 MX | grep 'IN.*MX'
;9.209.196.217.in-addr.arpa. IN MX
dig smtp.miramo.cz MX | grep 'IN.*MX'
;smtp.miramo.cz. IN MX
但是在massag.com上返回结果
dig massag.com MX | grep 'IN.*MX'
;massag.com. IN MX
massag.com. 85375 IN MX 20 miramo3.miramo.cz.
massag.com. 85375 IN MX 10 smtp.miramo.cz.
最后,添加一些测试以避免不必要的错误并使用工作域
<?php
$domain = 'massag.com';
if(getmxrr($domain, $hosts, $mxweights)){
print_r($hosts);
print_r($mxweights);
if(count($hosts) > 0){
$host = gethostbynamel($hosts[0])[0];
print("Found host: " . $host . "\n");
$f = fsockopen($host, 25, $errno, $errstr, 10);
if(!$f){
var_dump('NOT CONNECTED');
}
}else{
print("no MX record found\n");
}
}
?>
使用tutorialspoint.com作为域的结果:
Array
(
[0] => ALT2.ASPMX.L.GOOGLE.com
[1] => ASPMX.L.GOOGLE.com
[2] => ALT1.ASPMX.L.GOOGLE.com
[3] => ALT4.ASPMX.L.GOOGLE.com
[4] => ALT3.ASPMX.L.GOOGLE.com
)
Array
(
[0] => 5
[1] => 1
[2] => 5
[3] => 10
[4] => 10
)
Found host: 74.125.128.26
使用OP(massag.com)提供的域
Array
(
[0] => smtp.miramo.cz
[1] => miramo3.miramo.cz
)
Array
(
[0] => 10
[1] => 20
)
Found host: 217.196.209.9
答案 1 :(得分:0)
我用fig, axes = plt.subplots(nrows=1, ncols=2)
j = 0
for ax in axes.flat:
if j == 0:
Z = sensi_n_M(X,Y,n)
varName = 'vegetation coverage'
label = 'dM/M'
elif j == 1:
Z = sensi_n_AS(X,Y,n)
varName = 'average slope'
label = r'{dtan\beta/tan\beta}'
title1 = ax.set_title(r'$\frac{dn/n}{'+label+'}$'+'\n', fontsize=25)
ylabel=ax.yaxis.set_label_text('average slope')
ylabel.set_fontsize(15)
xlabel=ax.xaxis.set_label_text('vegetation coverage')
xlabel.set_fontsize(15)
for tick in ax.xaxis.get_major_ticks():
tick.label1.set_fontsize(10)
for tick in ax.yaxis.get_major_ticks():
tick.label1.set_fontsize(10)
fill = ax.contourf(X, Y, Z, rstride=1, cstride=1, #clevs,
#edgecolors = 'r',
cmap=plt.cm.RdBu_r,vmin=-2.4,vmax=1.2)
j = j+1
v = np.linspace(-2.4,1.2,13)
fig.subplots_adjust(left=0.2, wspace=0.8, top=0.8)
cax,kw = mpl.colorbar.make_axes([ax for ax in axes.flat])
cb = plt.colorbar(fill, cax=cax)
cb.set_ticklabels(v)
plt.show()
和fsockopen
取代了socket_create
函数,它的功能要好得多。函数fsockopen有时无法正确连接。